Tema – 10Gestión de usuarios
Índice
1. Creación de usuarios
2. Consultar usuarios creados
3. Borrar usuarios
4. Cambiar nombre a un usuario
5. Cambiar password
6. Otorgar permisos
7. Ver permisos
8. Quitar permisos
9. Niveles de los permisos
2
10.1. Creación de usuarios
• La sentencia para añadir un usuario en MySQL es la siguiente:
CREATE USER nombre_usuario
IDENTIFIED BY ‘contraseña’;
• Ejemplo 1:CREATE USER dani
IDENTIFIED BY ‘12345’;
• Ejemplo 2:CREATE USER dani;
3
10.1. Creación de usuarios
• Si queremos evitar que un usuario pueda conectarse desde cualquier máquina a nuestro servidor MySQL, podemos crear al usuario limitando su acceso a una máquina concreta. Lo haremos usando la siguiente nomenclatura:
nombre_usuario@host
4
10.1. Creación de usuarios
• Ejemplo 1: el usuario dani sólo puede acceder de forma local:
CREATE USER dani@localhost
IDENTIFIED BY ‘12345’;• Ejemplo 2: el usuario dani sólo puede acceder
desde la red 192.168.1.0:
CREATE USER dani@‘192.168.1.%’
IDENTIFIED BY ‘67890’;
5
10.1. Creación de usuarios
• Ejemplo 3: el usuario dani puede acceder a través de un dominio:CREATE USER dani@‘%.midominio.com’
IDENTIFIED BY ‘abcdef’;
• Hay que tener en cuenta que hemos creado tres usuarios con el nombre ‘dani’, pero que son usuarios diferentes.
6
10.2. Consultar usuarios creados
• Los usuarios de MySQL se almacenan en la tabla mysql.user. Podemos consultar la información de esta tabla con la sentencia SELECT:
SELECT * FROM mysql.user;
7
10.3. Borrar usuarios
• Los usuarios de MySQL se borran con la sentencia DROP USER. Podemos borrar varios usuarios indicando sus nombres, separados por comas:• Ejemplo:
DROP USER usuario1, usuario2…
8
10.4. Cambiar nombre a un usuario
• Para cambiar el nombre de un usuario podemos usar la sentencia RENAME:
RENAME USER nombre_viejo TO nombre_nuevo [, nombre_viejo2 TO nombre_nuevo2…]• Ejemplo:
RENAME USER pepe TO pepito;
9
10.5. Cambiar password
• Podemos cambiar el password de usuarios existentes mediante la sintaxis:SET PASSWORD
FOR usuario = PASSWORD(‘nuevo_password’);
• También podemos usar la sentencia:SET PASSWORD
FOR usuario@host = PASSWORD(‘nuevo_pass’);
10
10.6. Otorgar permisos
• Los permisos en MySQL tienen en cuenta tres aspectos:–Permiso: el tipo de operación que se le
dejará hacer al usuario.–Base de datos: la base de datos o tablas
sobre las cuáles se aplicarán dichos permisos.–Usuario: el o los usuarios a los cuáles se les
otorgará dichos permisos.11
10.6. Otorgar permisos
• La sentencia para dar permisos es:
GRANT privilegios
ON database
TO usuario
[WITH option];
12
10.6. Otorgar permisos
• Privilegios que tenemos en MySQL:• ALL: activa todos los privilegios (excepto el de dar
privilegios a otros usuarios).• ALTER, CREATE, CREATE ROUTINE, CREATE
TEMPORARY TABLES, CREATE VIEW, DROP.• INSERT, SELECT, UPDATE, DELETE.• EXECUTE, PROCESS, REFERENCES, RELOAD,
REPLICATION CLIENT, REPLICATION SLAVE• FILE, INDEX, LOCK TABLES, SHOW DATABASES,
SHOW VIEW, SHUTDOWN, SUPER, USAGE13
10.6. Otorgar permisos
• La cláusula WITH option es opcional. Podemos especificar las siguientes opciones:• GRANT OPTION• MAX_QUERIES_PER_HOUR num• MAX_CONNECTIONS_PER_HOUR num• MAX_USER_CONNECTIONS num
• La opción GRANT OPTION sirve para dar a un usuario el privilegio para conceder permisos a otros. Hay que destacar que el usuario sólo puede otorgar aquellos permisos que él tenga.
14
10.6. Otorgar permisos
• Ejemplo: el usuario podrá visualizar los datos de la tabla película de la base de datos Videoclub:
GRANT SELECT
ON Videoclub.pelicula
TO fulanito;• Si ‘fulanito’ ejecutara la sentencia SHOW TABLES
FROM Videoclub, sólo vería la tabla película. Si la base de datos tuviera más tablas, éstas no se visualizarían.
15
10.6. Otorgar permisos
• Ejemplo 1: dar varios permisos:GRANT SELECT, INSERT, UPDATE, DELETE
• Ejemplo 2: dar todos los permisos:GRANT ALL
• Ejemplo 3: dar permisos sobre varias tablas:ON database.tabla1, database.tabla2, database2.tabla3
• Ejemplo 4: dar permisos sobre todas las tablas:ON database.*
•Ejemplo 5: dar permisos a varios usuarios:TO user1, user2, user3
16
10.6. Otorgar permisos
• Ejemplo 6: permisos sobre algunas columnas:GRANT UPDATE(poblacion), SELECT(nombre, poblacion)
• Ejemplo 7: permisos con opciones:GRANT SELECT ON mundo.* TO fulanito WITH MAX_CONNECTIONS_PER_HOUR 3 MAX_QUERIES_PER_HOUR 300
MAX_UPDATES_PER_HOUR 30;
17
10.7. Ver permisos
• Para ver los permisos que tiene un usuario, usamos la sentencia:
SHOW GRANTS FOR usuario
18
10.8. Quitar permisos
• La sentencia para quitar permisos es:
REVOKE permisos
ON database
FROM usuario;
19
10.8. Quitar permisos
• Ejemplo 1: quitamos el permiso de selección otorgado al usuario fulanito:
REVOKE SELECT
ON Videoclub.pelicula
FROM fulanito;• Ejemplo 2: quitamos todos los permisos a un usuario:
REVOKE ALL PRIVILEGES
ON Videoclub.pelicula
FROM fulanito;• Ejemplo 3: quitamos todos los privilegios y la opción de dar privilegios a
otros usuarios:
REVOKE ALL PRIVILEGES, GRANT OPTION
ON Videoclub.pelicula
FROM fulanito20
10.9. Niveles de los permisos
• Los permisos podemos darlos en los siguientes niveles:• Nivel global.• Nivel de base de datos.• Nivel de tabla• Nivel de columna.• Nivel de rutina.
21
10.9. Niveles de los permisos
• Nivel global: estos permisos se aplican a todas las bases de datos del servidor.• Se almacenan en la tabla mysql.user.• GRANT ALL ON *.* y REVOKE ALL ON
*.* dan y quitan permisos globales.
22
10.9. Niveles de los permisos
• Nivel de base de datos: estos permisos se aplican a todos los objetos de la base de datos indicada.• Se almacenan en las tablas mysql.db y
mysql.host.• GRANT ALL ON base_datos.* y REVOKE
ALL ON base_datos.* dan y quitan permisos de bases de datos.
23
10.9. Niveles de los permisos
• Nivel de tabla: estos permisos se aplican a todas las columnas en la tabla indicada.• Se almacenan en la tabla
mysql.tables_priv.• GRANT ALL ON base_datos.tbl_name y
REVOKE ALL ON base_datos.tbl_name dan y quitan permisos de bases de datos.
24
10.9. Niveles de los permisos
• Nivel de columna: estos permisos se aplican a columnas en la tabla indicada.• Se almacenan en la tabla
mysql.columns_priv.
25
10.9. Niveles de los permisos
• Nivel de rutina: estos permisos se aplican a funciones almacenadas. Son los permisos CREATE ROUTINE, ALTER ROUTINE, EXECUTE.• Pueden darse a nivel global o de base de
datos, y también a nivel de rutina para rutinas individuales, excepto CREATE ROUTINE.• Se almacenan en la tabla mysql_procs_priv.
26