Contenidos - Geiss-96

Anuncio
Contenidos
ƒ
ƒ
ƒ
ƒ
ƒ
MySQL: El sistema de derechos de acceso
1 Aspectos de seguridad
2 El Sistema de Privilegios
3 Conexión al servidor
4 Control de Acceso
5 Ejercicios
2
1 Aspectos de seguridad
MySQL: El sistema de derechos de acceso
ƒ MySQL tiene un sistema de seguridad muy avanzado
ƒ Utiliza Listas de Control de Accesos (ACL) en todas las
conexiones, consultas y operaciones
ƒ Algunos consejos:
consejos
ƒ No dar acceso a la tabla user en la BD mysql
ƒ Utilizar GRANT y REVOKE para implantar una política de
seguridad cerrada
ƒ No almacenar claves en la BD sin cifrar
ƒ Instalar un cortafuegos en el servidor de MySQL
ƒ Utilizar passwords para todos los usuarios de MySQL:
ƒ mysql –u root mysql
ƒ update user set password=PASSWORD(‘nuevaClave’)
where user=‘root’;
ƒ flush privileges;
ƒ Comprobar que este usuario es el único con permisos de
lectura/escritura en los directorios de datos
ƒ No dar los privilegios PROCESS y FILE a todos los usuarios
3
2 El Sistema de Privilegios (i)
MySQL: El sistema de derechos de acceso
ƒ Función del Sistema de Privilegios:
Privilegios
ƒ Autentificar a un usuario que se conecta desde un host y
asociarle privilegios de base de datos
ƒ “Asegurar que los usuarios hacen aquello que se les permite
hacer”
ƒ Identidad:
ƒ Host desde el que se conecta el usuario
ƒ Nombre del usuario
ƒ El sistema concede privilegios de acuerdo a
ƒ la identidad (quién, dónde)
ƒ lo que se quiere hacer (qué)
4
2 El Sistema de Privilegios (ii)
MySQL: El sistema de derechos de acceso
ƒ El control de acceso de MySQL consiste en dos fases:
fases
ƒ 1 Determinar si el usuario se puede conectar
ƒ 2 Asumiendo que se puede conectar, comprobar cada
petición y determinar si se tienen suficientes privilegios
para realizarla
ƒ Los privilegios se almacenan en las tablas user, db, host,
tables_priv, columns_priv en la BD mysql
ƒ Ejercicio 1:
ƒ Consultar las tablas donde se almacenan los
privilegios
ƒ ¿Cuántos usuarios hay definidos?
5
2 El Sistema de Privilegios (iii)
MySQL: El sistema de derechos de acceso
ƒ Principales privilegios:
privilegios
ƒ SELECT, INSERT, UPDATE y DELETE permiten realizar
operaciones sobre filas de una BD
ƒ INDEX permite crear o eliminar índices
ƒ ALTER permite modificar una tabla (ALTER TABLE)
ƒ CREATE y DROP permiten crear y eliminar BD y tablas
ƒ GRANT permite ceder a otro usuario los privilegios que se
poseen
ƒ FILE permite leer cualquier fichero del servidor y situarlo en
una tabla, que puede entonces consultarse con select
ƒ SHUTDOWN permite detener el servidor
ƒ PROCESS permite ver el texto (código) correspondiente a
una consulta en ejecución
6
3 Conexión al servidor
MySQL: El sistema de derechos de acceso
ƒ El host por defecto es localhost
ƒ El usuario por defecto es el nombre de usuario de Linux
ƒ No se proporciona password si no se indica -p
ƒ Se pueden indicar valores por defecto en la sección
[client] del fichero de configuración
ƒ En Linux, my.cnf o .my.cnf
ƒ En Windows, my.ini
7
4 Control de Acceso (i)
MySQL: El sistema de derechos de acceso
ƒ Fase 1: Verificación de la conexión
ƒ “Identidad = host + nombreUsuario”
ƒ El servidor da acceso si
ƒ a) una fila en la tabla user coincide con el host y el usuario
ƒ b) se suministra la clave (password) correcta
+-----------+---------+------------------+
| host
| user
| password
|
+-----------+---------+------------------+
| localhost | root
| 547d58836f44eb70 |
| %
| root
|
|
| localhost |
| 547d58836f44eb70 |
| %
|
|
|
| %
| user1
| 547d58836f44eb70 |
| localhost | user1
| 547d58836f44eb70 |
| localhost | user2
| 555a3ad2495c04df |
| %
| user2
| 555a3ad2495c04df |
+-----------+---------+------------------+
8
4 Control de Acceso (ii)
MySQL: El sistema de derechos de acceso
ƒ Host puede ser un nombre de host, una IP o localhost
ƒ Se pueden utilizar comodines:
ƒ % se refiere a cualquier cadena
ƒ _ se refiere a cualquier carácter
ƒ En la columna user no se permiten comodines, pero un
nombre en blanco “coincide” con cualquier nombre y
representa a un usuario anónimo
ƒ Si password se deja en blanco representa el hecho de que el
usuario se conecta sin contraseña
ƒ Ejemplos:
9
4 Control de Acceso (iii)
MySQL: El sistema de derechos de acceso
ƒ Fase 2: Verificación de la petición (consulta)
ƒ Se verifica cada petición para ver si el usuario tiene
suficientes privilegios para realizarla
ƒ El servidor utiliza las tablas user, db, host, tables_priv y
columns_priv
ƒ Se utilizan
ƒ GRANT para asignar permisos a los usuarios
ƒ REVOKE para retirar permisos
ƒ Puesto que sobre estas tablas también se pueden aplicar
derechos, hay que tener precaución
ƒ La tabla user se refiere a todas las BD
10
4 Control de Acceso (iv)
MySQL: El sistema de derechos de acceso
ƒ GRANT
ƒ REVOKE
11
4 Control de Acceso (v)
MySQL: El sistema de derechos de acceso
ƒ GRANT y REVOKE permiten crear usuarios y conceder y
revocar derechos a cuatro niveles de privilegio:
privilegio
ƒ Global:
Global Se aplican a todas las BD de un servidor dado
ƒ Tabla: mysql.user
ƒ Base de datos:
datos Se aplican a todas las tablas de una BD
ƒ Tablas: mysql.db y mysql.host
ƒ Tabla:
Tabla Se aplican a todas las columnas de una tabla
ƒ Tablas: mysql.tables_priv
ƒ Columna:
Columna Se aplican a determinadas columnas de una tabla
ƒ Tablas: mysql.columns_priv
12
4 Control de Acceso (vi)
MySQL: El sistema de derechos de acceso
ƒ Todos los permisos (i):
(i)
13
4 Control de Acceso (vii)
MySQL: El sistema de derechos de acceso
ƒ Todos los permisos (ii):
14
4 Control de Acceso (viii)
MySQL: El sistema de derechos de acceso
ƒ Creación de usuarios:
usuarios
ƒ Forma 1: Utilizar GRANT
ƒ Forma 2: Manipular las tablas de MySQL directamente
ƒ Forma 1: Ejemplos
ƒ Forma 2: Ejemplos
15
5 Ejercicios
MySQL: El sistema de derechos de acceso
ƒ Utilizando la BD personal (tablas dvds y cuentas)
ƒ 1 Crear los usuarios tesorero y habitante. El primero
puede acceder a todas las tablas, pero el segundo sólo
a cuentas
ƒ 2 Crear otro usuario llamado invitado que sólo puede
insertar datos en la tabla dvds (no puede leer, por
ejemplo). Comprobar también que no tiene acceso a
cuentas
ƒ 3 Ante la sospecha de que los permisos están mal
configurados, revocar todos los privilegios a todos los
usuarios excepto a root
ƒ 4 ¿Desde dónde se podían conectar los usuarios?
ƒ 5 Crear un usuario invitado2 que sólo tenga acceso
para lectura (SELECT) a la columna concepto de la
tabla cuentas y solamente conectándose desde el
ordenador local
16
5 Ejercicios: Solución (i)
MySQL: El sistema de derechos de acceso
[ consulta.sql ]
create database personal;
use personal;
create table dvds (
autor varchar(24),
titulo varchar(24),
year smallint
);
insert into dvds (autor,titulo,year) values ('amaral',
'estrella de mar',2003);
insert into dvds (autor,titulo,year) values ('vivaldi',
'las cuatro estaciones',1600);
create table cuentas (
fecha date,
concepto varchar(32),
importe float,
tipo_mov enum('D','H')
);
insert into cuentas (fecha,concepto,importe,tipo_mov) values
('2005-11-25','nomina',1500.0,'D');
insert into cuentas (fecha,concepto,importe,tipo_mov) values
('2005-11-26','compra coche',12000.0,'H');
17
5 Ejercicios: Solución (ii)
MySQL: El sistema de derechos de acceso
[ consulta2.sql ]
use personal;
grant all on personal.* to tesorero@localhost identified by 'tes';
grant all on personal.* to tesorero@'%' identified by 'tes';
grant all on personal.cuentas to habitante@localhost identified by 'hab';
grant all on personal.cuentas to habitante@'%' identified by 'hab';
grant insert on personal.dvds to invitado@localhost identified by 'inv';
grant insert on personal.dvds to invitado@'%' identified by 'inv';
18
5 Ejercicios: Solución (iii)
MySQL: El sistema de derechos de acceso
[ consulta3.sql ]
use personal;
revoke all on personal.* from tesorero@'%';
revoke all on personal.* from tesorero@localhost;
revoke all on personal.cuentas from habitante@'%';
revoke all on personal.cuentas from habitante@localhost;
revoke insert on personal.dvds from invitado@'%';
revoke insert on personal.dvds from invitado@localhost;
19
5 Ejercicios: Solución (iv)
MySQL: El sistema de derechos de acceso
[ consulta4.sql ]
use personal;
grant select(concepto) on personal.cuentas to invitado2@localhost
identified by 'inv2';
grant select(concepto) on personal.cuentas to invitado2@'%‘
identified by 'inv2';
20
Descargar