MySQL almacena en las tablas de la base de datos (BD) mysql la información correspondiente a los usuarios.
El comando CREATE USER crea nuevos usuarios MySQL.
Para utilizarlo, es necesario tener el permiso global CREATE USER o el permiso INSERT en la base de datos mysql. Para cada cuenta nueva, CREATE USER crea una nueva fila en la tabla mysql.user sin privilegios específicos. Se produce un error si la cuenta ya existe.
La cuenta puede tener opcionalmente una contraseña con la cláusula IDENTIFIED BY.
ESTRUCTURA
CREATE USER nom_user [IDENTIFIED BY [PASSWORD] 'password'] [, nom_user [IDENTIFIED BY [PASSWORD] 'password']] ...
Ejemplo: CREATE USER ‘usuari_prova'@'localhost' identified by 'pwd';
Para eliminar: DROP USER nom_user [, nom_user] ...
Una cuenta está formada por un 'nombre de usuario' y un 'nombre de host', unidos por '@'. El nombre de usuario es imprescindible pero el nombre del host puede ser: una dirección IP, nombre de servidor,.. local 'localhost', cualquier máquina '%'.
Si solo se especifica la parte del 'nombre de usuario' en la cuenta, se asigna como nombre de host '%' . Que es lo mismo que 'usuari'@'%'
La sentencia GRANT permite a los administradores de sistemas crear cuentas de usuario de MySQL y conceder derechos a estas, en una sola sentencia.
ESTRUCTURA GRANT
<privilegis> ON <objecte> TO <usuaris> [WITH GRANT OPTION];
Para ver los permisos que tiene una cuenta, utilice SHOW GRANTS
- Ejemplos de privilegios pueden ser: ALL PRIVILEGES: todos los privilegios sobre el objeto especificado.
- SELECT: [(columnas)]: consultas. Se puede concretar a qué columnas.
- INSERT: inserciones.
- UPDATE [(columnas)]: modificaciones. Se puede concretar a qué columnas.
- DELETE: borrados.
Ejemplos de objeto pueden ser una tabla o una vista.
Usuarios puede ser cualquiera: PUBLIC, o bien una lista de los usuarios que queremos autorizar.
La opción WITH GRANT OPTION permite que el usuario que autorizamos pueda, a su vez, autorizar a otros usuarios a autorizar aquel privilegio.
Para utilizar GRANT, es necesario tener el permiso GRANT OPTION, y los privilegios que se estén otorgando.
Con REVOKE podemos eliminar los privilegios de la cuenta.
REVOKE [GRANT OPTION FOR] <privilegis> ON <objecte> FROM <usuaris> [RESTRICT|CASCADE];
- Privilegios, objeto y usuarios son los mismos que para la sentencia GRANT.
- La opción GRANT OPTION FOR se usaría en el caso de que quisiéramos desautorizar el derecho a autorizar (WITH GRANT OPTION).
- RESTRICT / CASCADE La opción CASCADE hace que, si un usuario al que hemos autorizado ha autorizado a su vez a otros, que a la vez pueden haber hecho más autorizaciones, queden desautorizados todos de golpe.
- La opción RESTRICT no nos permite desautorizar a un usuario si este ha autorizado a otros.
- MySQL no elimina automáticamente ningún permiso si se borra una base de datos o tabla.
- REVOKE no quita las entradas de la tabla mysql.user, es decir, ¡¡¡no se borra el usuario!!! Es necesario hacer uso de DROP USER o DELETE para borrarlo.
PRIVILEGIOS GLOBALES
Los permisos globales se aplican a todas las bases de datos (y en todas las tablas de las bases de datos) en un servidor determinado. Para asignar privilegios globales, utilice la sintaxis ON *.
Otros permisos pueden darse globalmente o a niveles más específicos. Los permisos globales se almacenan en la tabla mysql.user.
GRANT ALL ON . TO 'usuari'@'host';
REVOKE ALL ON . TO 'usuari'@'host';
GRANT SELECT, INSERT ON . TO 'usuari'@'host';
Privilegios de base de datos
Los privilegios de base de datos se aplican a todos los objetos en una base de datos dada. Para asignar privilegios a nivel de base de datos, utiliza ON db_name .*
Los privilegios de base de datos se almacenan en las tablas mysql.db y mysql.host. GRANT y REVOKE afectan a la tabla db, pero no a la tabla de hosts, que se utiliza muy poco.
GRANT ALL ON mydb.* TO 'usuari'@'host';
GRANT SELECT, INSERT ON mydb.* TO 'usuari'@'host';
Privilegios de tabla
Los permisos de tabla se aplican a todas las columnas de una tabla dada.
Para asignar privilegios a nivel de tabla, utilice la sintaxis db_name.tbl_name
Si especifica tbl_name en lugar de db_name.tbl_name, la declaración se aplica a tbl_name en la base de datos por defecto.
Los permisos de tabla se almacenan en la tabla mysql.tables_priv.
GRANT ALL ON mydb.mytbl TO 'usuari'@'host';
GRANT SELECT, INSERT ON mydb.mytbl TO 'usuari'@'host';
Privilegios de columna y de rutina
Los permisos de columna se aplican a columnas en una tabla dada. Cada privilegio otorgado a nivel de columna debe ir seguido de la columna o columnas, encerradas entre paréntesis.
Los valores permisibles para priv_type en una columna (es decir, cuando se utiliza una cláusula column_list) son insertar, seleccionar y actualizar.
Los permisos de columna se almacenan en la tabla mysql.columns_priv.GRANT SELECT (col1), INSERT (col1,col2) ON mydb.mytbl TO 'usuari'@'host';
También hay privilegios referentes a los procedimientos almacenados y se guardan en mysql.procs_priv
CONTRASENYAS
En la cláusula IDENTIFIED BY, la contraseña se debe dar como un literal.
No hace falta utilizar la función PASSWORD ()
GRANT ... IDENTIFIED BY 'mypass';
Si no desea enviar la contraseña en texto claro y sabe el valor hash que PASSWORD () retornaría para la contraseña, puede especificar el valor hash precedido por la palabra clave PASSWORD.
GRANT ... IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4';
Cláusula WITH
La cláusula WITH se utiliza para diversos propósitos:
- Para permitir a un usuario otorgar privilegios a otros usuarios
- Para especificar las limitaciones de uso de recursos de un usuario
- Para cuándo y cómo el usuario debe utilizar conexiones seguras con el servidor
La cláusula WITH GRANT OPTION le da al usuario la capacidad de dar a otros usuarios los privilegios que el usuario tiene en el nivel especificado. ¡Hay que tener cuidado a quién le dan este privilegio, por el hecho de que dos usuarios con diferentes privilegios pueden ser capaces de combinarse los privilegios!
No se puede dar a otro usuario un privilegio que no se tiene.
Supongamos que otorgáis a un usuario el privilegio INSERT en una base de datos. Si a continuación le damos el permiso SELECT en la base de datos y se especifica WITH GRANT OPTION, el usuario puede dar a otros usuarios no solo el permiso SELECT, sino también INSERT.
MAX_QUERIES_PER_HOUR, MAX_UPDATES_PER_HOUR y MAX_CONNECTIONS_PER_HOUR limitan el número de consultas, actualizaciones e inicios de sesión que un usuario puede realizar durante cualquier período de una hora. Si count es 0 (por defecto), esto significa que no hay ninguna limitación para este usuario.
MAX_USER_CONNECTIONS limita el número máximo de conexiones simultáneas que la cuenta puede hacer. Si count es 0 (por defecto), la variable del sistema max_user_connections determina el número de conexiones simultáneas para la cuenta.
REQUIRE NONE indica que la cuenta no tiene requerimientos de SSL o X509.
Esta es la opción por defecto. Las conexiones sin cifrar se permiten si el nombre de usuario y la contraseña son válidos. Se pueden cifrar las conexiones, a elección del cliente, si el cliente tiene el certificado correcto y los archivos clave. Es decir, el cliente no necesita especificar las opciones de comandos SSL, y en este caso la conexión será sin cifrar. Para utilizar una conexión encriptada, se debe especificar la opción -ssl-ca, o las tres de -ssl-ca, -ssl-key y -ssl-cert.
Renombrar usuario RENAME USER old_user TO new_user [, old_user TO new_user] ...
Sin embargo, no migra los objetos ni los privilegios
Para cambiar la contraseña:
SET PASSWORD [FOR user] = { PASSWORD('some password') | OLD_PASSWORD('some password') | 'encrypted password'}
SET PASSWORD FOR 'bob'@'%.loc.gov' = PASSWORD('newpass');
UPDATE mysql.user SET PASSWORD = PASSWORD (‘nova_pwd’);
Cambio del password para las cuentas anónimas:
shell>
mysql -u root
mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR ''@'%' = PASSWORD('newpwd');
EJEMPLOS
$>
mysql – u root – p
GRANT ALL PRIVILEGES ON . TO 'monty'@'localhost' IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON . TO 'monty'@'%' IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
GRANT RELOAD, PROCESS ON . TO 'admin'@'localhost' GRANT USAGE ON . TO 'dummy'@'localhost';
Dos de las cuentas tienen un nombre de usuario de monty y una contraseña de some_pass. Ambas cuentas son cuentas de root con plenos permisos para hacer cualquier cosa. Una cuenta ('monty'@'localhost') puede utilizarse solo cuando se conecte desde el equipo local. La otra ('monty'@'%') se puede utilizar para conectarse desde cualquier otro equipo.
Una cuenta tiene un nombre de usuario de admin y no tiene contraseña. Esta cuenta se puede utilizar solo desde el equipo local. Tiene los privilegios administrativos RELOAD y PROCESS. Estos permiten al usuario admin ejecutar las órdenes mysqladmin reload, mysqladmin refresh y mysqladmin flush-xxx, así como mysqladmin processlist. No se da autorización para acceder a ninguna base de datos. Una cuenta tiene un nombre de usuario sin contraseña. Esta cuenta se puede utilizar solo desde el equipo local. No tiene ningún privilegio. El permiso USAGE en el comando GRANT permite crear una cuenta sin darle ningún privilegio. Se asume que se otorgarán privilegios específicos posteriormente.
Cambios en los privilegios
Cuando mysqld se inicia, todos los contenidos de las tablas grant se leen y se hacen efectivos en el control de acceso.
Cuando el servidor carga las tablas grant, los privilegios para las conexiones de los clientes existentes se ven afectados de la siguiente manera:
- Los cambios en los privilegios de tabla y columna son efectivos en la siguiente petición del cliente.
- Los cambios en los privilegios de la base de datos son efectivos en la siguiente sentencia USE db_name.
- Los cambios de privilegios globales y las claves de acceso tienen efecto la próxima vez que el cliente se conecta.
Si se modifican las tablas grant utilizando GRANT, REVOKE o SET PASSWORD, el servidor se da cuenta de los cambios y recarga las tablas grant en la memoria inmediatamente.
Si se modifican las tablas grant directamente utilizando INSERT, UPDATE o DELETE, los cambios no tendrán efecto hasta que se reinicie el servidor, o se le comunique que debe recargar las tablas.
Para recargar las tablas manualmente, es necesario ejecutar el comando FLUSH PRIVILEGES o los comandos mysqladmin flushprivileges o mysqladmin reload. Si no se recargan las tablas manualmente, los cambios no serán efectivos hasta la próxima conexión.
ACTIVIDADES
- Crea un usuario de nombre ALUMNE y con contraseña ALUMNE CREATE USER 'ALUMNE'@'localhost' identified by 'ALUMNE';
- El usuario ALUMNE intenta acceder a alguna tabla de la BD EMPRESA, ¿puede hacerlo? No, saldrá error porque no tenemos permiso del creador de la BD, el root.
- Permite que ALUMNE seleccione los datos de la BD empresa. GRANT SELECT ON empresa.* TO ALUMNE@'localhost';
- El usuario ALUMNE intenta borrar, modificar e insertar datos en PRODUCTE, ¿puede hacerlo? Permíteselo: INSERT INTO empresa.PRODUCTE (PROD_NUM, DESCRIPCIO) VALUES (100866, 'ACE TENNIS RACKET II'); UPDATE empresa.PRODUCTE SET DESCRIPCIO='ACE TENNIS RACKET III' WHERE PROD_NUM=100866; DELETE FROM empresa.PRODUCTE WHERE PROD_NUM=100866; No lo puede hacer porque no tiene los permisos necesarios, para dárselos: GRANT INSERT, UPDATE, DELETE ON empresa.* TO 'ALUMNE'@'localhost'; (con el usuario root user)
- El usuario ALUMNE intenta crear la tabla VENTES con 2 campos (escoge 2 columnas), ¿puede hacerlo? Permite que el usuario cree la tabla anterior e inserte 3 tuplas (¿puede insertar? Si no, permíteselo) No lo puede hacer, para hacerlo necesitamos dárselo al usuario (con root): GRANT CREATE ON empresa.* TO 'ALUMNE'@'localhost'; CREATE TABLE VENTES( DNI VARCHAR(10), Nom VARCHAR(20), Cognom VARCHAR(20), CONSTRAINT PRIMARY KEY (DNI) ); INSERT INTO VENTES VALUES('53666748-N','Francisco','Mece'); INSERT INTO VENTES VALUES('53666738-N','Francisca','Mici'); INSERT INTO VENTES VALUES('53666338-N','Franciscu','Moci');
- El usuario ALUMNE intenta crear un nuevo usuario llamado "PROFE", ¿puede hacerlo? No, porque no tiene permiso de CREATE USER.
- Haz que el usuario ALUMNE pueda crear el usuario "PROFE" con contraseña "PROFE" y compruébalo: GRANT CREATE USER ON . TO 'ALUMNE'@'localhost'; (con root) CREATE USER 'PROFE'@'localhost' identified by 'PROFE'; (con alumne)
- El usuario ALUMNE da privilegios totales sobre la tabla 'VENTES' al usuario PROFE. Compruébalo. ¿Puede borrarla? No deja dar privilegios porque el grant option no está activado, para activarlo tendremos que poner: GRANT GRANT OPTION ON empresa.VENTES TO 'ALUMNE'@'localhost'; (con el usuario root) No podrá borrarla porque PROFE no tiene privilegios. Aun así, no podremos permitir privilegios totales debido a que no tenemos esta. GRANT SELECT, INSERT, UPDATE, DELETE ON empresa.* TO 'PROFE'@'localhost'; (esto sí podremos porque tenemos estos permisos.)
- El usuario ALUMNE crea un nuevo usuario (CAP/CAP) CREATE USER 'CAP'@'localhost' identified by 'CAP';
- El usuario ROOT le da al usuario ALUMNE el privilegio de dar privilegios a nivel de la BD de EMPRESA GRANT GRANT OPTION ON EMPRESA.* TO 'ALUMNE'@'localhost';
- El usuario ROOT le da al usuario CAP todos los privilegios sobre la tabla VENTES. GRANT ALL PRIVILEGES ON empresa.VENTES TO 'CAP'@'localhost'; (with root user) (Si ponemos --all también vale.)
- El usuario PROFE intenta pasar el privilegio de seleccionar y modificar datos de la tabla VENTES al usuario CAP, ¿puede hacerlo? No, porque no tiene el grant option, en todo caso, sería: GRANT SELECT,UPDATE,INSERT,DELETE ON empresa.VENTES TO 'CAP'@'localhost';
- El usuario ALUMNE hace lo necesario para que el usuario PROFE pueda pasar el privilegio anterior al usuario CAP GRANT GRANT OPTION ON empresa.VENTES TO 'PROFE'@'localhost'; (with the user ALUMNE) GRANT SELECT,UPDATE,INSERT,DELETE ON empresa.VENTES TO 'CAP'@'localhost'; (with the user PROFE)
- El usuario ALUMNE quiere retirar el privilegio de borrar datos de una tabla de la BD empresa (por ejemplo CLIENTS) al usuario CAP, ¿puede hacerlo? No puede hacerlo porque el usuario cap no tiene ningún privilegio sobre la tabla de la BD empresa CLIENTS, en todo caso, sería: REVOKE DELETE ON empresa.CLIENT FROM 'CAP'@'localhost';
- El usuario ALUMNE quiere retirar el privilegio de seleccionar datos de ventas al usuario CAP, ¿puede hacerlo? Sí puede. REVOKE SELECT ON empresa.VENTES FROM 'CAP'@'localhost';
- El usuario ALUMNE retira el privilegio de pasar el privilegio de la tabla VENTES al usuario PROFE. ¿Puede hacerlo? ¿El usuario CAP puede continuar seleccionando los datos? REVOKE GRANT OPTION ON empresa.VENTES FROM 'PROFE'@'localhost'; (con el usuario ALUMNE) No, no puede, porque en ejercicios anteriores ya lo hemos quitado.
- No permitir modificar la columna codi_client (por ejemplo) de la tabla clients (por ejemplo) al usuario CAP. Comprobarlo REVOKE UPDATE(CLIENT_COD),INSERT(CLIENT_COD) empresa.CLIENT FROM 'CAP'@'localhost'; (con el usuario PROFE)
- Mostrar los permisos que tienen los diferentes usuarios. GRANT GRANT OPTION ON empresa.* TO 'ALUMNE'@'localhost';
EJERCICIOS DE VISTAS Y PRIVILEGIOS
- El usuario ROOT crea una primera vista que permita ver en la tabla departamentos todos los campos menos la Localidad. CREATE USER 'ALUMNE1'@'localhost' identified by 'ALUMNE1'; use empresa; -- departaments es dept. CREATE VIEW depcamps AS SELECT d.DEPT_NO, d.DNOM FROM DEPT d;
- El usuario ROOT crea una segunda vista que permita ver el nombre de los clientes, su código y el número de pedido. CREATE VIEW cli AS SELECT c.NOM,c.CLIENT_COD,co.COM_NUM FROM CLIENT c NATURAL JOIN COMANDA co;
- El usuario ROOT permite control total al usuario ALUMNE sobre la primera vista. GRANT ALL ON depcamps TO 'ALUMNE1'@'localhost';
- Comprueba si el usuario ALUMNE puede modificar el nombre de los clientes con la primera vista. UPDATE depcamps SET DNOM="I+D" WHERE DNOM="INVESTIGACIÓ"; Sí puede.
- El usuario ROOT permite seleccionar e insertar al usuario ALUMNE sobre la segunda vista. GRANT INSERT,SELECT ON cli TO 'ALUMNE1'@'localhost';
- Comprueba si el usuario ALUMNE puede modificar el nombre de los clientes en la segunda vista y/o su código. UPDATE cli SET NOM="EVERY_MOUNTAIN" WHERE NOM="EVERY MOUNTAIN"; UPDATE cli SET CLIENT_COD="99" WHERE CLIENT_COD="102"; No podrá, no tiene permisos UPDATE.
- El usuario ROOT crea una tercera vista que permita ver todos los campos de la tabla CLIENT, pero solo los que no son de Santa Clara. CREATE VIEW clisanta AS SELECT * FROM CLIENT WHERE CIUTAT!="SANTA CLARA";
- El usuario ROOT crea una cuarta vista basada en la tercera que permita ver todos los campos, pero solo los de la ciudad Cupertino. CREATE VIEW cuper AS SELECT * FROM clisanta WHERE CIUTAT="CUPERTINO";
- El usuario ROOT permite seleccionar e insertar al usuario ALUMNE sobre la tercera y cuarta vista. GRANT INSERT,SELECT ON clisanta TO 'ALUMNE1'@'localhost'; GRANT INSERT,SELECT ON cuper TO 'ALUMNE1'@'localhost';
- Comprueba si el usuario ALUMNE puede modificar el nombre de los clientes con la tercera vista. UPDATE clisanta SET NOM="TKB_SPORT_SHOP" WHERE NOM="TKB SPORT SHOP"; NO podrá, no se han dado permisos de UPDATE (modificar).
- Dale permisos para que sea posible. GRANT UPDATE (NOM) ON clisanta TO 'ALUMNE1'@'localhost'; UPDATE clisanta SET NOM="TKB_SPORT_SHOP" WHERE NOM="TKB SPORT SHOP"; Ahora será posible
EL SISTEMA DE PRIVILEGIOS DE ACCESO
- Conéctese como root. Muestre todos los usuarios que hay en el SGBD actualmente. SELECT User FROM mysql.user GROUP BY user;
- Creación de un DBA, llamado dba1. Con permisos para hacer cualquier cosa. dba1 debe poder conectarse desde cualquier máquina, aparte de la propia máquina. Tenga en cuenta que la cuenta anónima por defecto para localhost tiene preferencia en el sistema de autenticación. CREATE USER 'dba1'@'localhost' identified by 'dba1'; CREATE USER 'dba1'@'%' identified by 'dba1'; GRANT ALL PRIVILEGES ON . TO 'dba1'@'%'; GRANT ALL PRIVILEGES ON . TO 'dba1'@'localhost'; GRANT GRANT OPTION ON . TO 'dba1'@'%'; GRANT GRANT OPTION ON . TO 'dba1'@'localhost';
- Conéctese como dba1 y verifique que puede acceder al catálogo de MySQL. Muestre los privilegios que tiene asignados dba1@localhost y el usuario. mysql -u dba1 -p show databases; (para los privilegios:) show grants; (para ver el usuario actual:) select current_user;
- Conectados como dba1 cree una base de datos llamada etpc. Siempre puede saber cuál es el usuario con el que está trabajando desde el cliente con la sentencia “select current_user”; CREATE SCHEMA etpc; select current_user;
- Creación de usuario1. Este usuario solo se puede conectar desde la misma dirección de red donde está el servidor. La contraseña será usuario1. Le asignamos el privilegio global de creación. Tenga en cuenta que la cuenta anónima por defecto para localhost tiene preferencia en el sistema de autenticación, por lo que habrá que crear un usuario usuario1 para localhost. NOTA: utilice la dirección de red '192.168.1.0/255.255.255.0'. use etpc; CREATE USER 'usuari1'@'localhost' identified by 'usuari1'; CREATE USER 'usuari1'@'192.168.1.0/255.255.255.0' identified by 'usuari1'; GRANT CREATE ON etpc. TO 'usuari1'@'localhost'; GRANT CREATE ON etpc. TO 'usuari1'@'192.168.1.0/255.255.255.0';
- Creación de usuario2. Este usuario solo se puede conectar desde la IP de clase C 192.168.1.10. Inicialmente no asignaremos ninguna contraseña de acceso. No le asignamos ningún permiso, solo el de conexión. Tenga en cuenta que la cuenta anónima por defecto para localhost tiene preferencia en el sistema de autenticación, por lo que habrá que crear un usuario usuario2 para localhost. use etpc; CREATE USER 'usuari2'@'localhost'; CREATE USER 'usuari2'@'192.168.1.10'; GRANT USAGE ON etpc. TO 'usuari2'@'localhost'; GRANT USAGE ON etpc. TO 'usuari2'@'192.168.1.10';
- Asignación/cambio de la contraseña de usuario2. SET PASSWORD FOR 'usuari2'@'localhost' = PASSWORD('usuari2'); SET PASSWORD FOR 'usuari2'@'192.168.1.10' = PASSWORD('usuari2');
- Verifique los usuarios creados (host y user), los passwords asignados, y la base de datos donde están los usuarios. select user,host,db from mysql.db; select user,Password from mysql.user; select m.user,m.host,m.db,my.password from mysql.db m RIGHT OUTER JOIN mysql.user my using(User);
- Como usuario1 cree una tabla llamada ASI2 en la base de datos ETPC. create table ASI2( Nom char(10) );
- Como usuario2 cree una tabla llamada ASI1 en la base de datos ETPC. ¿Qué es lo que no funciona? Que solo tenemos acceso para poder ver la bd, no para hacer modificaciones ni crear tablas.
PREGUNTAS TEORÍA
- Diferencia entre Restrict / Cascade La opción CASCADE hace que, si un usuario que hemos autorizado ha autorizado a su vez a otros, que a la vez pueden haber hecho más autorizaciones, queden desautorizados todos de golpe. La opción RESTRICT no nos permite desautorizar a un usuario si este ha autorizado a otros.
- ¿Qué comando crea y da permisos a la vez? GRANT
- Define tres formas de crear un usuario. ¿Cómo se borra un usuario? ¿Y cómo le quitamos los privilegios? Con la sentencia GRANT
GRANT SELECT, INSERT ON test.* TO 'adolfo'@'localhost' IDENTIFIED BY 'pass_adolfo';Con la sentencia create userCREATE USER ‘usuari_prova'@'localhost' identified by 'pwd';Insertando en la tabla userINSERT INTO user VALUES ('localhost','mariano',PASSWORD('pass_mariano'),'Y','Y','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0,0);Para eliminar a un usuarioDROP USER nom_user [, nom_user] …Para eliminar privilegios*REVOKE ALL ON BD.* from USER@localhost*¿Borrar un usuario es lo mismo que quitarle los privilegios? No es lo mismo porque REVOKE no quita las entradas de la tabla mysql.user, es decir, ¡¡¡no se borra el usuario!!! Es necesario hacer uso de DROP USER o DELETE para borrarlo.
Comprueba si tienes usuarios “anónimos” dentro de tu mysql. Select user from mysql.user; ¿En qué BD mysql almacena la información de los usuarios?
mysql.user
¿Cómo vemos los permisos que tiene un usuario? Poniendo show grants;
Mira tus permisos
SHOW GRANTS;
¿Cómo puede un usuario otorgar los privilegios que tiene? Poniendo GRANT OPTION; ¿Qué diferencia hay entre los privilegios de tabla y los privilegios de Base de datos? Que en la tabla solo tienes acceso a una tabla y si tienes de la base de datos puedes acceder a todas las tablas de esta. ¿Dónde se guardan los privilegios de columna? mysql.columns_priv; Crea un usuario con acceso localhost con contraseña, comprueba que puedes entrar, cámbiale la contraseña por otra y comprueba que puedes entrar de nuevo. CREATE USER 'USUARI'@'localhost' identified by 'USUARI';
mysql -u USUARI -p
SET PASSWORD FOR 'USUARI'@'localhost' = PASSWORD('USUARIO');
¿Qué permiso permite crear un usuario nuevo sin ningún privilegio? El permiso USAGE en el comando GRANT permite crear una cuenta sin darle ningún privilegio. ¿Cuándo se recargan automáticamente las tablas de privilegios? ¿Con qué comando lo podemos forzar? Se recargan en la petición del cliente, para forzarlo hay que ejecutar FLUSH PRIVILEGES. ¿Cómo está formada una cuenta de usuario? Por un usuario, un host y posiblemente una contraseña. También podemos encontrar permisos o privilegios. Por defecto, cuando creamos un usuario solo con el nombre del user, ¿con qué Host se crea? Será % = 'usuari'@'%' Por defecto, al entrar a mysql solo con el nombre del user, ¿con qué Host entramos? Entramos como localhost, aunque después de realizar unas pruebas, si la creación de un usuario externo se hace con el mismo nombre que la de un usuario interno y se crea antes, accederemos con el usuario externo.