Anda di halaman 1dari 9

INGENIERIA EN SISTEMAS COMPUTACIONALES

TALLER DE BASE DE DATOS

ING. ANDRES RIVERA MONTOYA


TEMA: CREACION DE UN USUARIO, DARLE PRIVILEGIOS, DESABILITAR USUARIO Y QUITARLE PRIVILEGIOS CANDIDO MIGUEL PERALTA

APATZINGAN MICHOACAN A 28 DE NOVIEMBRE DEL 2011

Cmo crear un usuario en MySQL: 3 formas diferentes


22
DEC

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:

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. $ mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 17 Server version: 5.0.67 Source distribution 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: mysql> GRANT SELECT, INSERT ON test.* TO 'adolfo'@'localhost' IDENTIFIED BY 'pass_adolfo'; 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: $ mysql -u adolfo -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 19 Server version: 5.0.67 Source distribution mysql> use test; Database changed mysql> select * from frutas; +-----------+----------+ | nombre | color | +-----------+----------+ | fresa | rojo | | manzana | verde | | uva | verde |

+-----------+----------+ 3 rows in set (0,03 sec) Ms detalles sobre la sentencia GRANT y los privilegios disponibles en la documentacin de mysql.

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: $ mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 20 Server version: 5.0.67 Source distribution mysql> CREATE USER 'fernando'@'localhost' IDENTIFIED BY 'fer_pass'; Query OK, 0 rows affected (0,00 sec) 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: $ mysql -u fernando -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 22 Server version: 5.0.67 Source distribution Los privilegios necesarios para ejecutar la sentencia CREATE USER son CREATE USER o bien INSERT en la base de datos 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).

modo hardcore: insertando en la tabla users


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. $ mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 23 Server version: 5.0.67 Source distribution mysql> use mysql Database changed Y despus realizamos la sentencia de insercin para aadir nuestro usuario: mysql> INSERT 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); Query OK, 1 row affected (0,00 sec) 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. mysql> DESCRIBE user; +-----------------------+-----------------------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------------+-----------------------------------+------+-----+---------+-------+ | Host | char(60) | NO | PRI | | | | User | char(16) | NO | PRI | | | | Password | char(41) | NO | | | | | Select_priv | enum('N','Y') | NO | | N | |

| 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 | |

2.-COMO DAR PRIVILEGIOS A UN USUARIO EN MYSQL.


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. mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0,01 sec) Una vez hecho esto, ya nos podremos conectar: $ mysql -u mariano -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 28 Server version: 5.0.67 Source distribution Ms informacin sobre el uso de este mtodo, en comparacin con el GRANT, en la documentacin de mysql.

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.

Privilegio CREATE DROP GRANT OPTION

Columna Create_priv Drop_priv Grant_priv

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.

Privilegio RELOAD SHUTDOWN PROCESS SUPER

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.

3.- COMO ELIMINAR UN USUARIO EN MYSQL


DROP USER Sintaxis
DROP USER usuario [, usuario ] ... El DROP USER declaracin elimina una o ms cuentas MySQL. Para utilizarlo, debe tener el permiso global CREATE USER o el privilegio DELETE privilegio para el mysql base de datos. Cada nombre de

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.

4.-COMO QUITAR PRIVILEGIOS A UN USUARIO EN MYSQL


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. REVOKE priv_type [( column_list )] [, priv_type [( column_list )]] ... ON [ object_type ] priv_level DESDE usuario [, usuario ] ... Revocar todos los privilegios, GRANT OPTION DESDE usuario [, usuario ] ... El REVOKE declaracin permite a los administradores del sistema para revocar los privilegios de las cuentas de MySQL. Cada nombre de cuenta utiliza el formato descrito en la Seccin 5.4.3, "Especificacin de los nombres de cuenta" . Por ejemplo: REVOKE INSERTAR ON *.* DE '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. Para ms detalles sobre la medida en que los privilegios existen, lo permisible priv_type y priv_level valores, y la sintaxis para especificar los usuarios y las contraseas, consulte la Seccin 12.7.1.3, " GRANT sintaxis " Para utilizar la primera REVOKE sintaxis, debe tener la opcin GRANT privilegio, y debe tener los privilegios que usted est revocando. Para revocar todos los privilegios, utilice la sintaxis segunda, que todas las gotas de base de datos global, tablas, columnas y los privilegios de rutina para el usuario con nombre o los usuarios: Revocar todos los privilegios, GRANT opcin de usuario [, usuario ] ... Para utilizar este REVOKE sintaxis, debe tener el permiso global CREATE USER privilegio o la ACTUALIZACIN de privilegio para el mysql base de datos.

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 .

Anda mungkin juga menyukai