MySQL es un sistema de gestin de bases de datos claramente orientado a la web, y una de los sntomas en su arquitectura ha venido siendo que la creacin de los usuarios se realiza en la misma sentencia que el permiso (grant) de acceso a una o varias bases de datos. La orientacin de MySQL va cambiando con el tiempo y el uso que se le da a las bases de datos cada vez trasciende ms el entorno web, actualmente hay tres formas de crear un usuario:
+-----------+----------+ 3 rows in set (0,03 sec) Ms detalles sobre la sentencia GRANT y los privilegios disponibles en la documentacin de mysql.
| Insert_priv | enum('N','Y') | Update_priv | enum('N','Y') | Delete_priv | enum('N','Y') | Create_priv | enum('N','Y') | Drop_priv | enum('N','Y') | Reload_priv | enum('N','Y') | Shutdown_priv | enum('N','Y') (...)
| NO | | N | | | NO | | N | | | NO | | N | | | NO | | N | | | NO | | N | | | NO | | N | | | NO | | N | |
Otras consideraciones
Tambin se pueden crear usuarios desde la herramienta visual MySQL Administrator, que forma parte de las GUI Tools que ofrece gratuitamente MySQL y se pueden descargar desde aqu. (Es multiplataforma, pero en Mac funciona bastante mal) Para saber con qu usuario estamos conectados en este momento, podemos usar la funcin CURRENT_USER() o USER(). mysql> SELECT CURRENT_USER(); +------------------+ | CURRENT_USER() | +------------------+ | adolfo@localhost | +------------------+ 1 row in set (0,00 sec) Al crear un usuario, se define el contexto desde el que se puede conectar, por ejemplo 'adolfo'@'localhost' solamente se puede conectar desde el mismo servidor de la base de datos, para crear usuarios que se puedan conectar desde varias mquinas, se puede crear un usuario por cada mquina o usar el comodn '%', el usuario 'adolfo'@'%' se podra conectar desde cualquier mquina, y el usuario 'fernando'@'192.168.1.%' se podra conectar desde mquinas con una direccin IP comprendida entre 192.168.1.1 y 129.168.1.255. Por ejemplo: GRANT SELECT, INSERT ON test.* TO 'adolfo'@'%' IDENTIFIED BY 'pass_adolfo'; CREATE USER 'fernando'@'192.168.1.%' IDENTIFIED BY 'fer_pass'; En el caso de que estemos realizando la creacin de un usuario mediante el mtodo INSERT y nos aparezca el siguiente error: ERROR 1136 (21S01): Column count doesn't match value count at row 1 La razn es que algunas de las columnas de la tabla user no tienen valor por defecto (por ejemplo ssl_type), y no las hemos informado todas, es necesario hacerlo.
Contexto bases de datos, tablas, o ndices bases de datos o tablas bases de datos, almacenados tablas, o procedimientos
REFERENCES ALTER DELETE INDEX INSERT SELECT UPDATE CREATE VIEW SHOW VIEW ALTER ROUTINE CREATE ROUTINE EXECUTE FILE CREATE TABLES LOCK TABLES CREATE USER PROCESS RELOAD REPLICATION CLIENT REPLICATION SLAVE SHOW DATABASES SHUTDOWN SUPER TEMPORARY
References_priv Alter_priv Delete_priv Index_priv Insert_priv Select_priv Update_priv Create_view_priv Show_view_priv Alter_routine_priv Create_routine_priv Execute_priv File_priv Create_tmp_table_priv Lock_tables_priv Create_user_priv Process_priv Reload_priv Repl_client_priv Repl_slave_priv Show_db_priv Shutdown_priv Super_priv
bases de datos o tables tablas tablas tablas tablas tablas tablas vistas vistas procedimientos almacenados procedimientos almacenados procedimientos almacenados acceso a archivos en la mquina del servidor administracin del servidor administracin del servidor administracin del servidor administracin del servidor administracin del servidor administracin del servidor administracin del servidor administracin del servidor administracin del servidor administracin del servidor
CREATE VIEW y SHOW VIEW fueron aadidos en MySQL 5.0.1. CREATE USER, CREATE ROUTINE, y ALTER ROUTINE fueron aaidos en MySQL 5.0.3. Aunque EXECUTE ya estaba presente en MySQL 5.0.0, no se
activ hasta MySQL 5.0.3. Para utilizar estos privilegios cuando se actualice desde una versin ms antigua de MySQL que no los tiene, debe actualizar sus tablas grant utilizando el script mysql_fix_privilege_tablesproporcionado con la distribucin MySQL. Los privilegios CREATE y DROP permiten crear nuevas bases de datos y tablas, o eliminar las existentes. Si otorga el privilegio DROP para la base de datos mysql a un usuario, ese usuario puede eliminar la base de datos en la que MySQL almacena los privilegios de acceso. Los privilegios SELECT, INSERT, UPDATE, and DELETE permiten realizar operaciones en registros de tablas existentes en una base de datos. Las sentencias SELECT requieren el privilegio SELECT slo si realmente extraen registros de una tabla. Algunas sentencias SELECT no acceden a tablas, y pueden ser ejecutados por tanto sin permiso para ninguna base de datos. Por ejemplo, podra utilizar el cliente mysql como una simple calculadora para evaluar expresiones que no hacen referencia a tablas:
mysql> SELECT 1+1; mysql> SELECT PI()*2; El privilegio INDEX permite crear o eliminar ndices. INDEX es aplicable a tablas existentes. Si tiene el privilegioCREATE para una tabla, entonces puede incluir definiciones de ndices en la sentencia CREATE TABLE.
El privilegio ALTER permite utilizar ALTER TABLE para cambiar la estructura de o renombrar tablas. El privilegio CREATE ROUTINE es necesario para crear procedimientos almacenados (funciones y procedimientos). El privilegio ALTER ROUTINE se necesita para modificar o eliminar procedimientos almacenados, y EXECUTE es necesario para ejecutarlos. El privilegio GRANT permite dar a otros usuarios las privilegios que uno mismo posee. Puede ser utilizado para bases de datos, tablas, y procedimientos almacenados. El privilegio FILE otorga permiso para leer y escribir archivos en la mquina del servidor utilizando las sentenciasLOAD DATA INFILE y SELECT ... INTO OUTFILE. Un usuario que tiene el privilegio FILE puede leer cualquier archivo de la mquina del servidor que sea legible por cualquiera o por el usuario que ejecuta el servidor MySQL. (Esto implica que el usuario puede leer cualquier archivo en el directorio de datos, porque el servidor puede acceder a cualquiera de estos archivos.) El privilegio FILE tambin permite al usuario crear archivos nuevos en cualquier directorio en que el servidor MySQL tiene acceso de escritura. Los archivos existentes no pueden ser sobreescritos. Los privilegios restantes son utilizados para operaciones administrativas. Muchas de ellas puede ser realizadas utilizando el programa mysqladmin o mediante sentencias SQL. La siguiente tabla muestra qu comandos demysqladmin permite ejecutar cada privilegio administrativo.
Comandos permitidos a los poseedores del privilegio Holders flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flushthreads, refresh, reload shutdown processlist kill
El comando reload comunica al servidor que debe releer las tablas grant a memoria. flush-privileges es un sinnimo de reload. El comando reload cierra y vuelve a abrir los archivos de registro y vuelca todas las tablas. Los otros comandos flush-xxx realizan funciones similares a refresh, pero son ms especficas y pueden ser preferibles en algunos casos. Por ejemplo, si quiere tan solo volcar los archivos de registro, flush-logs es mejor opcin que refresh. El comando shutdown apaga el servidor. Este comando puede ejecutarse nicamente desde mysqladmin. No hay sentencia SQL equivalente. El comando processlist muestra informacin sobre los subprocesos que se estn ejecutando en el servidor (es decir, sobre las sentencias que se estn ejecutando por parte de clientes asociados con otras cuentas). El comando kill mata los subprocesos del servidor. Siempre puede mostrar informacin sobre sus propios subprocesos, o matarlos, pero necesita el privilegio PROCESS para ver subprocesos iniciados por otros usuarios, y el privilegio SUPER para matarlos. El privilegio CREATE TEMPORARY TABLES permite la utilizacin de la palabra clave TEMPORARY en sentenciasCREATE TABLE. El privilegio LOCK TABLES permite la utilizacin de sentencias LOCK TABLES explcitas para bloquear tablas para las que tiene el privilegio SELECT. Esto incluye el uso de bloqueos de escritura, que evita que cualquier otra persona lea la tabla bloqueada. El privilegio REPLICATION CLIENT permite la utilizacin de las sentencias SHOW MASTER STATUS y SHOW SLAVE STATUS. El privilegio REPLICATION SLAVE debera otorgarse a cuentas que son utilizadas por servidores esclavos para conectarse al servidor actual como su maestro. Sin este privilegio, la cuenta esclava no puede pedir actualizaciones que se hayan hecho a las bases de datos del servidor maestro.
El privilegio SHOW DATABASES permite a la cuenta ver los nombres de las bases de datos mediante la ejecucin de la sentencia SHOW DATABASE. Cuentas que no tengan este privilegio solo pueden ver las bases de datos para las que tienen privilegios, y no pueden utilizar la sentencia de ninguna manera si el servidor ha sido iniciado con la opcin --skip-show-database. En general, es una buena idea garantizar a una cuenta solo aquellos privilegios que necesita. Se debe tener especial cuidado en seguir esta regla con los privilegios administrativos y FILE: El privilegio FILE puede utilizarse inadecuadamente para introducir en una tabla de la base de datos cualquier archivo que el servidor MySQL sea capaz de leer en la mquina del servidor. Esto incluye todos los archivos que sean legibles para cualquiera, adems de los archivos almacenados en el directorio de datos del servidor. Esta tabla puede entonces ser accedida utilizando una sentencia SELECT para transferir sus contenidos a la mquina cliente. El privilegio GRANT permite a los usuarios otorgar sus mismos privilegios a otros usuarios. Dos usuarios con diferentes privilegios y con el privilegio GRANT pueden combinar sus privilegios. El privilegio ALTER puede ser utilizado inadecuadamente para sabotear el sistema de privilegios mediante el renombrado de tablas. El privilegio SHUTDOWN puede utilizarse inadecuadamente para denegar el servicio a otros usuarios de manera total, cerrando el servidor. El privilegio PROCESS puede utilizarse para ver el texto de las consultas que se estn ejecutando actualmente, incluyendo consultas que establecen o modifican passwords. El privilegio SUPER puede utilizarse para cerrar la conexin a otros clientes o cambiar como el servidor funciona. Los privilegios otorgados para la propia base de datos mysql pueden utilizarse para cambiar passwords y otra informacin de privilegios de acceso. Las passwords se almacenan cifradas, as que un usuario malicioso no puede simplemente leerlas para conocer la password. An as, el usuario con privlegio de escritura a la columnaPassword de la tabla user puede cambiar la password de una cuenta, y seguidamente conectarse al servidor MySQL utilizando esa cuenta. Hay algunas cosas que no se pueden hacer con el sistema de privilegios de MySQL: No se puede especificar explcitamente que a un usuario se le deba denegar el acceso. No se puede especificar que un usuario tenga privilegios para crear o eliminar tablas en una base de datos, pero que no pueda crear o eliminar la propia base de datos.
cuenta utiliza el formato descrito en la Seccin 5.4.3, "Especificacin de los nombres de cuenta" . Por ejemplo:
DROP USER 'jeffrey' @ 'localhost';
Si slo se especifica la parte del nombre de usuario del nombre de la cuenta, una parte del nombre de host de'%' se utiliza. DROP USER como est en MySQL 5.0.0 borra slo cuentas que no tienen permisos. En MySQL 5.0.2, fue modificado para eliminar privilegios de la cuenta tambin. Esto significa que el procedimiento para borrar una cuenta depende de la versin de MySQL.
A partir de MySQL 5.0.2, puede eliminar una cuenta y sus privilegios de la siguiente manera:
DROP USER usuario ;
El comando borra registros de permisos para la cuenta de todas las tablas de permisos. Antes de MySQL 5.0.2, DROP USER slo sirve para quitar las filas de la cuenta de usuario para las cuentas de la tabla que no tienen privilegios. Para eliminar una cuenta MySQL completamente (incluyendo todos sus permisos), debe utilizar el siguiente procedimiento, la realizacin de estos pasos en el orden indicado: Use SHOW GRANTS para determinar qu privilegios de la cuenta. Use REVOKE para revocar los permisos mostrados por SHOW GRANTS . Esto elimina registros de la cuenta de todas las tablas de permisos, excepto el usuario de mesa, y revoca los privilegios globales que figuran en el usuario de la tabla. Borre la cuenta usando DROP USER para eliminar el de usuario fila de la tabla.
Importante DROP USER no cierra automticamente ninguna sesin de usuario. Por el contrario, en caso de que un
usuario con una sesin abierta se elimina, la declaracin no tendr efecto hasta que la sesin de ese usuario est cerrada. Una vez que se cierre la sesin, el usuario se ha cado, y el prximo de ese usuario para iniciar sesin en un error. Esto es por diseo . DROP USER no significa automticamente cada o invalidar las bases de datos u objetos dentro de ellos que el usuario anterior creado. Esto incluye programas almacenados o vistas que la DEFINER los nombres de atributos del usuario se borra. Intenta acceder a objetos puede producir un error si se ejecutan en el contexto que define la seguridad.
REVOKE quita los privilegios, pero no caer mysql.user entradas de la tabla. Para eliminar una cuenta de usuario completamente, use DROP USER (vase la seccin 12.7.1.2, " DROP USER Sintaxis " ) o DELETE . Si las tablas de permisos tienen registros de permisos que contengan maysculas y minsculas o base de datos de nombres de tablas y el lower_case_table_names variable del sistema se establece en un valor distinto de cero, REVOKE no puede ser utilizado para revocar estos privilegios. Ser necesario para manipular las tablas de permisos directamente. ( GRANT no crear filas como cuando lower_case_table_names est establecido, pero las filas como podra haber sido creado antes de establecer la variable.) Para verificar los privilegios de una cuenta despus de un REVOKE funcionamiento, uso SHOW GRANTS .