Está en la página 1de 20

2

MySQL
El Sistema de Derechos de Acceso

Crescencio Bravo
MySQL: El sistema de derechos de acceso

Contenidos
ƒ 1 Aspectos de seguridad
ƒ 2 El Sistema de Privilegios
ƒ 3 Conexión al servidor
ƒ 4 Control de Acceso
ƒ 5 Ejercicios

2
MySQL: El sistema de derechos de acceso

1 Aspectos de seguridad
ƒ 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;
ƒ No ejecutar el “demonio” mysqld como usuario root
ƒ 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
MySQL: El sistema de derechos de acceso

2 El Sistema de Privilegios (i)


ƒ 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
MySQL: El sistema de derechos de acceso

2 El Sistema de Privilegios (ii)


ƒ 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
MySQL: El sistema de derechos de acceso

2 El Sistema de Privilegios (iii)


ƒ 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
MySQL: El sistema de derechos de acceso

3 Conexión al servidor

ƒ 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
MySQL: El sistema de derechos de acceso

4 Control de Acceso (i)


ƒ 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
MySQL: El sistema de derechos de acceso

4 Control de Acceso (ii)


ƒ 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
MySQL: El sistema de derechos de acceso

4 Control de Acceso (iii)


ƒ 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
MySQL: El sistema de derechos de acceso

4 Control de Acceso (iv)


ƒ GRANT

ƒ REVOKE

11
MySQL: El sistema de derechos de acceso

4 Control de Acceso (v)


ƒ 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
MySQL: El sistema de derechos de acceso

4 Control de Acceso (vi)


ƒ Todos los permisos (i):
(i)

13
MySQL: El sistema de derechos de acceso

4 Control de Acceso (vii)


ƒ Todos los permisos (ii):

14
MySQL: El sistema de derechos de acceso

4 Control de Acceso (viii)


ƒ Creación de usuarios:
usuarios
ƒ Forma 1: Utilizar GRANT
ƒ Forma 2: Manipular las tablas de MySQL directamente

ƒ Forma 1: Ejemplos

ƒ Forma 2: Ejemplos

15
MySQL: El sistema de derechos de acceso

5 Ejercicios

ƒ 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
MySQL: El sistema de derechos de acceso

5 Ejercicios: Solución (i)

[ 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
MySQL: El sistema de derechos de acceso

5 Ejercicios: Solución (ii)

[ 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
MySQL: El sistema de derechos de acceso

5 Ejercicios: Solución (iii)

[ 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
MySQL: El sistema de derechos de acceso

5 Ejercicios: Solución (iv)

[ 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

También podría gustarte