You are on page 1of 9

Gestin de Usuarios en MySQL

Por Medio del Administrador MySQL


Los usuarios de MySQL se gestionan a travs de la base de datos llamada "mysql", concretamente con la tabla "user". Sin embargo, el manejo de esa tabla es relativamente complicado para un usuario que no sea del todo experto, por lo que ser mucho ms cmodo usar la aplicacin MySQL Administrator para realizar la gestin de usuarios. MySQL Administrator es una herramienta que provee directamente MySQL, que se puede descargar desde la propia pgina de MySQL y que ya introdujimos anteriormente en nuestro Taller de MySQL: Introduccin a MySQL Administrator. Entre las distintas opciones de MySQL Administrator tenemos una seccin para la gestin de usuarios, sus permisos, host de acceso, etc. La podemos ver y seleccionar en la barra de opciones de la izquierda.

Inicialmente slo hay un usuario creado, en muchas de las configuraciones tpicas, que es el usuario root. La lista de usuarios creados aparece en la parte de abajo de la barra de la izquierda. Podemos seleccionar cualquier usuario para editar sus propiedades.

Las propiedades de usuarios se dividen en tres pestaas:

User information: son los datos de login (nombre de usuario y contrasea de acceso) y otros datos personales del usuario, que es opcional completar. Schema Privileges: son los permisos asociados a ese usuario. Nos permite seleccionar los permisos de este usuario para cada base de datos de nuestro sistema Resources: son los recursos disponibles para ese usuario.

En la parte de debajo de la ventana encontraremos tres botones, para crear un nuevo usuario, para aplicar los cambios realizados en los formularios de edicin de un usuario y para descartarlos.

Si queremos crear un usuario podemos pulsar el botn de "Add New User" y se habilitara las propiedades del usuario, en la pestaa de User Information, para que introduzcamos el nombre para este usuario y la contrasea que vamos a asignar. La ventana de Schema Privileges nos permite seleccionar una base de datos y entonces accedemos a una lista con todos los privilegios posibles para permitir o denegar. Inicialmente, para un usuario nuevo, todos los permisos estn denegados, as que tendremos que seleccionar los que deseamos otorgar. Para ello simplemente seleccionamos entre los "avaliable privileges" (permisos disponibles) y los pasamos a "assigned privileges" (permisos asignados).

Por medio de comandos SQL


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:

1. La forma clsica, con la sentencia GRANT


Utilizando la sentencia GRANT podemos crear un usuario a la par que otorgarle uno o varios privilegios sobre los objetos de una base de datos, o la base de datos completa. Al encontrarse una sentencia de tipo GRANT, el motor de MySQL revisa si el usuario existe previamente para el contexto que estamos asignndole permisos, y si dicho usuario no est presente en el sistema, lo crea. No entrar en detalles sobre todas las opciones que nos permite ejecutar la sentencia GRANT, sino solo en las que se refieren a la creacin del usuario. Pongamos un ejemplo, queremos crear el usuario adolfo para la base de datos test: - Nos conectamos con un usuario que tenga privilegios, root, como propietario de la base de datos, los tiene.

Nos conectamos utilizando -u para indicarle el usuario y si quisieramos indicarle un password, deberiamos poner -p (sin aadirle la contrasea), en este caso la cuenta root, al ser una mquina de desarrollo, est desprotegida. - Lanzamos la sentencia GRANT, indicando los permisos que otorgamos, la base de datos y los objetos de la misma sobre los que estamos asignando privilegios, el nombre del usuario y el password:

En este ejemplo permitimos al usuario adolfo que seleccione (SELECT) e inserte (INSERT) en todos los objetos (*) de la base de datos test, adems indicamos que el contexto sea la mquina local de la base de datos (localhost), lo que impedir que el usuario se conecte desde otras mquinas, y finalmente asignamos un password mediante IDENTIFIED BY. Si quisieramos que el usuario no tuviera un password, deberemos omitir la clusula IDENTIFIED BY. En el caso de que el modo SQL del servidor estuviera en NO_AUTO_CREATE_USER, la creacin de usuarios no estara permitida a no ser que tuvieran asignado un password no vaco. - Una vez hecho esto, podremos conectarnos con nuestro usuario y realizar las acciones para las que hemos asignado permisos:

2. La sentencia CREATE USER


A partir de la versin MySQL 5.0.2 existe la posibilidad de crear usuarios sin necesidad de asignarles privilegios, utilizando la sentencia CREATE USER. Por ejemplo, para crear el usuario fernando:

Al igual que con la sentencia GRANT, el contexto 'localhost' define que el usuario solamente se puede conectar desde el servidor de MySQL, y el IDENTIFIED BY define el password del usuario, se puede omitir, para un usuario sin password, siempre que el modo SQL no sea NO_AUTO_CREATE_USER. Conexin con el usuario, utilizando la opcin -p:

Los privilegios necesarios para ejecutar la sentencia base de datos

CREATE USER

son CREATE USER o bien INSERT en la

mysql.

El usuario recin creado no tiene privilegio alguno, por lo que deberemos asignarle permisos utilizando sentencias

GRANT (esta vez sin la clusula IDENTIFIED BY).

3. Modo hardcore: insertando en la tabla users


Primero recordemos que en MySQL todos los usuarios que existen y se han creado constan en la base de datos mysql (La cual se crea por defecto en la instalacin) y especficamente en la tabla user que est dentro de esta bdd. Este es un mtodo que MySQL no recomienda demasiado, es un poco ms complejo que los otros dos, pero va bien a la hora de resolver problemas, como que por ejemplo alguno de las formas anteriores est dando algn problema extrao. Para ello es necesario un usuario con privilegio INSERT en la base de datos mysql. Tambin debo decir que se ha de tener mucho cuidado con esta base de datos, ya que contiene toda la informacin de usuarios y permisos. Ejemplo de creacin del usuario mariano usando INSERT en nuestra base de datos. Nos conectamos con un usuario con privilegios, en este caso root, y seleccionamos la base de datos mysql mediante la sentencia USE.

Y despus realizamos la sentencia de insercin para aadir nuestro usuario:

Es necesario llamar a la funcin PASSWORD() para almacenar el password codificado, en los otros casos, el IDENTIFIED BY se encarga de hacer la codificacin. En este caso se le dan permisos globales de INSERT y SELECT, para saber a qu corresponde cada columna, se puede hacer un DESCRIBE user.

Para asignar privilegios a bases de datos especficas o tablas especficas, se debe usar GRANT. Utilizando este mtodo, tenemos que forzar que se refresquen las tablas de permisos usando FLUSH PRIVILEGES.

Una vez hecho esto, ya nos podremos conectar:

Otras consideraciones
Para saber con qu usuario estamos conectados en este momento, podemos usar la funcin CURRENT_USER() o USER().

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:

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.

PRIVILEGIOS
En MySQL existen cinco niveles distintos de privilegios: Globales: se aplican al conjunto de todas las bases de datos en un servidor. Es el nivel ms alto de privilegio, en el sentido de que su mbito es el ms general. De base de datos: se refieren a bases de datos individuales, a todos los objetos que contiene cada base de datos. De tabla: se aplican a tablas individuales, y por lo tanto, a todas las columnas de esas tabla. De columna: se aplican a una columna en una tabla concreta. De rutina: se aplican a los procedimientos almacenados.

El comando show privileges muestra detalladamente, todos los privilegios disponibles dentro de Mysql, con su descripcion detallada de que hace y que sirve para asignar o revokar permisos a un usuario.

Funcin GRANT y REVOKE La funcin GRANT es la que utilizaremos para conceder los privilegios. Su funcionamiento es el siguiente: GRANT privilegios ON base/tabla

TO usuario [IDENTIFIED by contrasea] [WITH GRANT OPTION]; Nota.- Los comandos que estn escritos dentro de corchetes son solo opcionales ya que bsicamente se puede usar el comando GRANT sin utilizar IDENTIFIED Y WITH. Vemoslo en ms detalle, analizando lnea por lnea de esta estructura: GRANT privilegios: A continuacin de GRANT, incluiremos todos los privilegios que queramos conceder a este usuario, separados por comas. ON base/tabla: A continuacin de ON escribimos la base de datos o tabla sobre la que tendr vigor el privilegio. Si queremos extender este privilegio a todas las bases de datos presentes en el servidor, lo indicaremos con *.*. TO usuario [IDENTIFIED BY contrasea]: Usuario indica el nombre que deber introducir para poder acceder al servidor MySQL, y contrasea, evidentemente, la contrasea que necesitar para acceder al servidor MySQL. WITH GRANT OPTION: Se usa para permitir al usuario conceder a otros sus mismos privilegios. Como regla general, es aconsejable no utilizarla nunca.

La funcin REVOKE se utiliza para retirar privilegios a los usuarios. Su sintaxis es muy similar a la de GRANT: REVOKE privilegios ON base/tabla FROM usuario El funcionamiento de cada una de las lneas es idntico al de GRANT. Lista de Privilegios Tenemos los siguientes privilegios: 1- Privilegios para usuarios 2- Privilegios para administradores 3- Privilegios especiales.

Privilegios para los usuarios SELECT- Selecciona los registros de la tabla/s. INSERT- Insertar registro en la tabla/s. UPDATE- Actualizar datos ya existentes en la tabla/s. ALTER- Modificar la estructura de la tabla/s.

CREATE- Crear nuevas tablas, bases datos. DROP- Eliminar tablas o BD.

Privilegios de administradores FILE- Permite al admin leer y gravar achivos en el server mySQL. PROCESS- Permite al administrador controlar los procesos. RELOAD- Permite al administrador reformar los acesos,privilegios... SHUTDOWN- Permite al admin apagar el servidor.

Privilegios especiales ALL- Todos los privilegios comentadas anteriormente. USAGE- Permite el acceso.

You might also like