cuentas_usuario.pdf

13
Página 1 de 13 CONTENIDO: 1. SISTEMA DE PRIVILEGIOS 2. PRIVILEGIOS DE LOS QUE PROVEE MYSQL 3. CREACIÓN DE CUENTAS DE USUARIO 4. ASIGNAR CONTRASEÑAS 5. ELIMINAR CUENTAS DE USUARIO 6. LIMITAR RECURSOS DE CUENTAS 1. SISTEMA DE PRIVILEGIOS La función primaria del sistema de privilegios de MySQL es autenticar un usuario conectándose desde un equipo dado, y asociar dicho usuario con privilegios en una base de datos tales como SELECT, INSERT, UPDATE, y DELETE. El sistema de privilegios de MySQL asegura que todos los usuarios pueden ejecutar sólo la operación permitida. Como usuario, cuando conecta a un servidor MySQL, su identidad se determina mediante el equipo desde el que se conecta y el nombre de usuario que especifique. Cuando efectúe peticiones tras conectar, el sistema le otorga privilegios acorde a su identidad y lo que quiera hacer. Etapa 1: El servidor comprueba si debe permitirle conectarse. Etapa 2: Asumiendo que se conecta, el servidor comprueba cada comando que ejecuta para ver si tiene suficientes permisos para hacerlo. Por ejemplo, si intenta seleccionar registros de una tabla en una base de datos o eliminar una tabla de la base de datos, el servidor verifica que tenga el permiso SELECT para la tabla o el permiso DROP para la base de datos. El servidor usa las tablas USER, DB, y HOST en la base de datos mysql en ambas etapas de control de acceso. Si desea ver la descripción de la tabla USER digite: Mysql> describe mysql.user; En estas tablas se encuentran columnas de alcance, privilegios, seguridad, control de recursos. Las columnas de alcance de la tabla user (host, user y password) determinan si se rechazan o permiten conexiones entrantes. Para conexiones permitidas, cualquier privilegio otorgado en la tabla user indica los privilegios globales del usuario (superusuario). Estos privilegios se aplican a todas las bases de datos en el servidor. Si desea ver la descripción de la tabla DB digite: Mysql> describe mysql.db; Se encuentran columnas de alcance y privilegios. Las columnas de alcance de la tabla db (host, db, user) determinan qué usuarios pueden acceder a qué bases de datos desde qué equipo. La columna de privilegios determina qué operaciones se permiten. Un privilegio otorgado a nivel de base de datos se aplica a la base de datos y a todas sus tablas. Si desea ver la descripción de la tabla HOST digite: Mysql> describe mysql.host; ADMINISTRACIÓN DE CUENTAS DE USUARIO

Transcript of cuentas_usuario.pdf

Page 1: cuentas_usuario.pdf

Página 1 de 13

CONTENIDO:

1. SISTEMA DE PRIVILEGIOS

2. PRIVILEGIOS DE LOS QUE PROVEE MYSQL

3. CREACIÓN DE CUENTAS DE USUARIO

4. ASIGNAR CONTRASEÑAS

5. ELIMINAR CUENTAS DE USUARIO

6. LIMITAR RECURSOS DE CUENTAS

1. SISTEMA DE PRIVILEGIOS La función primaria del sistema de privilegios de MySQL es autenticar un usuario conectándose desde un equipo dado, y asociar dicho usuario con privilegios en una base de datos tales como SELECT, INSERT, UPDATE, y DELETE. El sistema de privilegios de MySQL asegura que todos los usuarios pueden ejecutar sólo la operación permitida. Como usuario, cuando conecta a un servidor MySQL, su identidad se determina mediante el equipo desde el que se

conecta y el nombre de usuario que especifique. Cuando efectúe peticiones tras conectar, el sistema le otorga privilegios acorde a su identidad y lo que quiera hacer. Etapa 1: El servidor comprueba si debe permitirle conectarse. Etapa 2: Asumiendo que se conecta, el servidor comprueba cada comando que ejecuta para ver si tiene suficientes permisos para hacerlo. Por ejemplo, si intenta seleccionar registros de una tabla en una base de datos o eliminar una tabla de la base de datos, el servidor verifica que tenga el permiso SELECT para la tabla o el permiso DROP para la base de datos. El servidor usa las tablas USER, DB, y HOST en la base de datos mysql en ambas etapas de control de acceso. Si desea ver la descripción de la tabla USER digite: Mysql> describe mysql.user; En estas tablas se encuentran columnas de alcance, privilegios, seguridad, control de recursos. Las columnas de alcance de la tabla user (host, user y password) determinan si se rechazan o permiten conexiones entrantes. Para conexiones permitidas, cualquier privilegio otorgado en la tabla user indica los privilegios globales del usuario (superusuario). Estos privilegios se aplican a todas las bases de datos en el servidor. Si desea ver la descripción de la tabla DB digite: Mysql> describe mysql.db; Se encuentran columnas de alcance y privilegios. Las columnas de alcance de la tabla db (host, db, user) determinan qué usuarios pueden acceder a qué bases de datos desde qué equipo. La columna de privilegios determina qué operaciones se permiten. Un privilegio otorgado a nivel de base de datos se aplica a la base de datos y a todas sus tablas. Si desea ver la descripción de la tabla HOST digite: Mysql> describe mysql.host;

AADDMMIINNIISSTTRRAACCIIÓÓNN DDEE CCUUEENNTTAASS DDEE UUSSUUAARRIIOO

Page 2: cuentas_usuario.pdf

Página 2 de 13

Se encuentran columnas de alcance y privilegios. La tabla host se usa en conjunción con la tabla db cuando desea que un registro de la tabla db se aplique a varios equipos. Por ejemplo, si quiere que un usuario sea capaz de usar una base de datos desde varios equipos en su red, deje el valor Host vacío en el registro de usuario de la tabla ddb , luego rellene la tabla host con un registro para cada uno de estos equipos. Durante la segunda etapa de control de acceso, el servidor efectúa una verificación de petición para asegurar que cada cliente tiene suficientes privilegios para cada petición que recibe. Adicionalmente a las tablas de permisos user, db, y host, el servidor puede consultar las tablas tables_priv y columns_priv para peticiones que impliquen tablas. Las tablas tables_priv y columns_priv proveen de un control de privilegios más fino a nivel de tabla y columna. Mysql> describe mysql.tables_priv; Mysql> describe mysql. columns_priv; Para verificación de peticiones que impliquen rutinas almacenadas, el servidor puede consultar la tabla procs_priv. Mysql> describe mysql. procs_priv; Las tablas tables_priv y columns_priv son similares a la tabla db , pero son más detalladas: se aplican a nivel de tabla y de columna en lugar de a nivel de base de datos. Un privilegio otorgado a nivel de tabla se aplica a la tabla y a todas sus columnas. Un privilegio otorgado a nivel de columna se aplica sólo a la columna especificada. La tabla procs_priv se aplica a rutinas almacenadas. Un privilegio otorgado a nivel de rutina se aplica sólo a una única rutina. Para determinar los permisos que se otorgan a una cuenta con valores por ejemplo la del root digite: mysql>show grants for ‘root’@’localhost’

Page 3: cuentas_usuario.pdf

Página 3 de 13

2. PRIVILEGIOS DE LOS QUE PROVEE MYSQL La información sobre los privilegios de las cuentas está almacenada en las tablas user, db, host, tables_priv, columns_priv, y procs_priv de la base de datos mysql. El servidor MySQL lee el contenido de estas tablas y lo almacena en memoria cuando se inicia, y lo relee cuando se ha realizado algún cambio dependiendo de las siguientes circunstancias: � Si se han hecho cambios en los privilegios de tabla y columna los cambios toman efecto en la siguiente petición

del cliente. � Si se han hecho cambios en privilegios de base de datos, estos toman efecto en la siguiente sentencia USE

db_name. � Si se han hecho cambios a los privilegios globales y las claves de acceso, lo cambios toman efecto la próxima vez

que el cliente se conecte. Los nombres utilizados en las sentencias GRANT y REVOKE (sentencias para otorgar o negar privilegios a un usuario) para referirse a privilegios se muestran en la siguiente tabla, junto al nombre de columna asociado con cada privilegio en las tablas grant y el contexto en que el privilegio se aplica. PRIVILEGIO CONTEXTO CREATE Bases De Datos, Tablas, O Índices DROP Bases De Datos O Tablas GRANT OPTION Bases De Datos, Tablas, O Procedimientos Almacenados REFERENCES Bases De Datos O Tablas ALTER Tablas DELETE Tablas INDEX Tablas INSERT Tablas SELECT Tablas UPDATE Tablas CREATE VIEW Vistas SHOW VIEW Vistas ALTER ROUTINE Procedimientos Almacenados CREATE ROUTINE Procedimientos Almacenados EXECUTE Procedimientos Almacenados FILE Acceso a Archivos en la Máquina Servidor CREATE TEMPORARY TABLES Administrador Del Servidor LOCK TABLES Administrador Del Servidor CREATE USER Administrador Del Servidor PROCESS Administrador Del Servidor RELOAD Administrador Del Servidor REPLICATION CLIENT Administrador Del Servidor REPLICATION SLAVE Administrador Del Servidor SHOW DATABASES Administrador Del Servidor SHUTDOWN Administrador Del Servidor SUPER Administrador Del Servidor � Para crear o modificar procedimientos almacenados cuando el registro binario está activado, debe también tener

el privilegio SUPER.

� Los privilegios CREATE y DROP permiten crear nuevas bases de datos y tablas, o eliminar las existentes. � Los privilegios SELECT, INSERT, UPDATE, and DELETE permiten realizar operaciones en registros de tablas

existentes en una base de datos.

Page 4: cuentas_usuario.pdf

Página 4 de 13

� El privilegio INDEX permite crear o eliminar índices. INDEX es aplicable a tablas existentes. Si tiene el privilegio CREATE 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 máquina del servidor utilizando las

sentencias LOAD DATA INFILE y SELECT ... INTO OUTFILE. � El comando processlist muestra información sobre los subprocesos que se están ejecutando en el servidor (es

decir, sobre las sentencias que se están ejecutando por parte de clientes asociados con otras cuentas). � El privilegio CREATE TEMPORARY TABLES permite la utilización de la palabra clave TEMPORARY en sentencias

CREATE TABLE. � El privilegio LOCK TABLES permite la utilización de sentencias LOCK TABLES explícitas 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 utilización de las sentencias SHOW MASTER STATUS � y SHOW SLAVE STATUS. � El privilegio REPLICATION SLAVE debería 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 ejecución

de la sentencia 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 máquina del servidor. Esto incluye todos los archivos que sean legibles para cualquiera, además 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 máquina 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.

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.

Page 5: cuentas_usuario.pdf

Página 5 de 13

� 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 estén ejecutando actualmente,

incluyendo consultas que establecen o modifican passwords. � El privilegio SUPER puede utilizarse para cerrar la conexión 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 información de privilegios de acceso. Las passwords se almacenan cifradas, así que un usuario malicioso no puede simplemente leerlas para conocer la password. Aún así, el usuario con privilegio de escritura a la columna Password de la tabla user puede cambiar la password de una cuenta, y seguidamente conectarse al servidor MySQL utilizando esa cuenta.

Page 6: cuentas_usuario.pdf

Página 6 de 13

3. CREACION DE CUENTAS DE USUARIO Una cuenta MySQL se define en términos de un nombre de usuario y el equipo o equipos desde los que el usuario puede conectar al servidor. La cuenta también tiene una contraseña. Nombre de usuarios en MySQL pueden tener como máximo 16 caracteres de longitud. Este límite está hard-codeado en los servidores y clientes MySQL, y tratar de evitarlo mediante la modificación de las tablas en la base de datos mysql no funciona. Nota: Nunca debe alterar ninguna de las tablas en la base de datos mysql de ninguna forma excepto mediante la ejecución de los scpripts proporcionados expresamente para este propósito con la distribución MySQL. Tratar de redefinir las tablas de sistema MySQL de cualquier otra forma da como resultado un comportamiento indefinido (y no soportado). MySQL encripta contraseñas usando su propio algoritmo. La encriptación de contraseña es la misma que la implementada en la función PASSWORD(). Se puede crear cuentas MySQL de las siguientes formas: a) Usando comando GRANT b) Manipulando las tablas de permisos MySQL directamente c) PHPMyAdmin

a) Usando comando GRANT El método preferido es usar comandos GRANT, porque son más concisos y menos propenso a errores. GRANT está disponible desde MySQL 3.22.11. Para crear una cuenta por medio del comando GRANT primero debe ingresar como ROOT a Mysql y digitar: mysql> GRANT ALL PRIVILEGES ON *.* TO 'usuario1'@'localhost' -> IDENTIFIED BY ' contraseña ' WITH GRANT OPTION; mysql> GRANT ALL PRIVILEGES ON *.* TO ''usuario1 '@'%' -> IDENTIFIED BY ' contraseña ' WITH GRANT OPTION; En este ejemplo se han creado dos cuentas que tienen como nombre de usuario: usuario1 y contraseña: contraseña. Ambas cuentas son cuentas de superusuario con plenos permisos para hacer cualquier cosa (ALL denota que se otorgan todos los permisos). Una cuenta ('nombre_usuario'@'localhost') puede usarse sólo cuando se conecte desde el equipo local. La otra ('nombre_usuario'@'%') puede usarse para conectarse desde cualquier otro equipo. mysql> GRANT RELOAD,PROCESS ON *.* TO ' usuario2'@'localhost'; Esta cuenta creada tiene como nombre de usuario: usuario2 y no tiene contraseña. Esta cuenta puede usarse sólo desde el equipo local. Tiene los privilegios administrativos RELOAD y PROCESS. Éstos permiten al usuario usuario1 ejecutar los comandos mysqladmin reload, mysqladmin refresh, y mysqladmin flush-xxx , así como mysqladmin processlist . No se dan permisos para acceder a ninguna base de datos. Puede añadir tal privilegio posteriormente mediante un comando GRANT adicional. mysql> GRANT USAGE ON *.* TO 'usuario3'@'localhost'; Esta cuenta tiene como nombre de usuario: usuario3 sin contraseña. Esta cuenta puede usarse sólo desde el equipo local. No tiene ningún privilegio. El permiso USAGE en el comando GRANT permite crear una cuenta sin darle ningún

Page 7: cuentas_usuario.pdf

Página 7 de 13

privilegio. Tiene el efecto de inicializar todos los privilegios globales a 'N'. Se asume que se otorgarán privilegios específicos posteriormente.

b) Manipulando las tablas de permisos MySQL directamente Como alternativa a GRANT, puede crear la misma cuenta directamente mediante comandos INSERT y después diciendo al servidor que recargue las tablas de permisos usando FLUSH PRIVILEGES: Creación de cuenta usuario1: mysql> INSERT INTO user -> VALUES('localhost','usuario1',PASSWORD('some_pass'), -> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); mysql> INSERT INTO user -> VALUES('%','usuario1',PASSWORD('some_pass'), -> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); Creación de cuenta usuario2: mysql> INSERT INTO user SET Host='localhost',User='usuario2',

� Reload_priv='Y', Process_priv='Y'; Creación de cuenta usuario3: mysql> INSERT INTO user (Host,User,Password) -> VALUES('localhost','usuario3',''); mysql> FLUSH PRIVILEGES; La razón de usar FLUSH PRIVILEGES al crear cuentas con INSERT es decir al servidor que vuelva a leer las tablas de permisos. De otro modo, los cambios no se tienen en cuenta hasta que se reinicie el servidor. Con GRANT, FLUSH PRIVILEGES no es necesario. La razón para usar la función PASSWORD() con INSERT es encriptar las contraseñas. El comando GRANT encripta la contraseña, así que PASSWORD() no es necesario. El valor 'Y' activa permisos para las cuentas. Para la cuenta usuario2, puede emplear la sintaxis más clara extendida INSERT usando SET. Las cuentas anteriormente creadas otorgan permisos para todas las bases de datos. Si queremos otorgar permisos sobre una base de datos específica lo hacemos de la siguiente manera: El siguiente ejemplo crea un usuario con privilegios sobre la siguiente base de datos: Nombre de la base de datos: mi_base. Nombre de usuario: user1 Contraseña: secreto: Privilegios: select, insert,update. mysql> GRANT SELECT,INSERT,UPDATE ON mi_base.* -> TO 'user1'@'localhost' -> IDENTIFIED BY 'secreto';

Page 8: cuentas_usuario.pdf

Página 8 de 13

Esta cuenta tiene acceso a la base de datos mi_base solo desde el equipo local. Para crear la misma cuenta utilizando el comando insert se hace lo siguiente: mysql> INSERT INTO user (Host,User,Password) -> VALUES('localhost',user1,PASSWORD('secreto')); mysql> INSERT INTO db -> (Host,Db,User,Select_priv,Insert_priv, -> Update_priv,) -> VALUES('localhost','mi_base','user1', -> 'Y','Y','Y'); mysql> FLUSH PRIVILEGES; El primer comando INSERT añade registros en la tabla user que permiten al usuario USER1 conectarse desde el equipo local con la contraseña dada, pero no otorga privilegios globales (todos los privilegios se inicializan al valor por defecto 'N'). El segundo comandos INSERT añaden registros en la tabla db que otorgan privilegios a USER1 para la base de dato mi_base. Como siempre, cuando modifique las tablas de permisos directamente, debe decirle al servidor que las recargue con FLUSHPRIVILEGES para que los cambios en los permisos tengan efecto.

c) PHPMyAdmin Al ingresar a PHPMyADMIN, ubicar el enlace PRIVILEGIOS que es donde se pueden administrar las cuentas de usuario en Mysql. Ver figura 1.

Figura 1. Entono PHPMyAdmin.

Page 9: cuentas_usuario.pdf

Página 9 de 13

Al dar click en el enlace PRIVILEGIOS, aparece una ventana donde se visualizan los usuarios creados agrupados alfabéticamente (solo aparece el ROOT) y las opciones para agregar nuevo usuario y eliminar usuarios. Ver figura 2.

Figura 2. Visualización usuarios

Para visualizar los privilegios de un usuario determinado o para modificarlos, simplemente se va a la opción EDITAR

PRIVILEGIOS (ver figura 2). Aparecen todos los privilegios que se le pueden otorgar o denegar a un usuario y para hacerlos solamente se activa/desactiva la casilla de verificación que acompaña a cada privilegio. Ver figura 3.

Figura 3. Privilegios de usuario.

Editar privilegios

Page 10: cuentas_usuario.pdf

Página 10 de 13

4. ASIGNAR CONTRASEÑAS Una parte del proceso de instalación de MySQL es configurar la base de datos mysql, que contiene las tablas de permisos: Las distribuciones para Windows contienen tablas de permisos preinicializadas que se instalan automáticamente. Las tablas de permisos definen las cuentas de usuario MySQL iniciales y sus permisos de acceso. Estas cuentas tienen la siguiente configuración: Se crean dos cuentas con el nombre de usuario root. Son cuentas de superusuario que pueden realizar cualquier tarea. Inicialmente las cuentas root no tienen contraseñas, de forma que cualquier persona puede conectarse al servidor MySQL como root sin una contraseña y recibirá todos los privilegios. En Windows, una cuenta root sirve para conectarse desde el ordenador local (localhost) y la otra permite conectarse desde cualquier ordenador. Se crean dos cuentas de usuario anónimo, cada una con un nombre de usuario vacío. Los usuarios anónimos no tienen contraseña, de modo que cualquier persona puede usarlos para conectarse al servidor MySQL. En Windows, una cuenta anónima es para conexiones desde el ordenador local. Tiene todos los privilegios, exactamente como la cuenta root. La otra sirve para conectarse desde cualquier ordenador y tiene todos los permisos sobre la base de datos test u otras cuyo nombre comience con test. Como se advierte, ninguna de las cuentas iniciales tiene contraseña. Esto significa que la instalación de MySQL estará desprotegida hasta que: Se eliminen las cuentas anónimas o se les establezca contraseñas. Para asignar contraseña al root hacemos lo siguiente: Para verificar los usuarios que hay en la tabla USER: mysql>SELECT Host, User FROM mysql.user; Asignamos la contraseña: mysql>set password for ‘root’@’localhost’ = PASSWORD(‘contraseña_nueva'); Otra forma es : mysql>UPDATE mysql.user SET Password = PASSWORD('contraseña_nueva’') WHERE User = 'root'; mysql>FLUSH PRIVILEGES; Luego de actualizar las contraseñas directamente en la tabla user empleando UPDATE, se le debe indicar al servidor que relea las tablas de privilegios con FLUSH PRIVILEGES. De otro modo, los cambios no tendrán efecto hasta que se reinicie el servidor.

Page 11: cuentas_usuario.pdf

Página 11 de 13

5. ELIMINAR CUENTAS DE USUARIO. El comando DROP USER borra una o más cuentas MySQL . Para usarlo, debe tener el permiso global CREATE USER o el permiso DELETE para la base de datos mysql . Cada cuenta se nombra usando el mismo formato que para GRANT o REVOKE; por ejemplo, 'usuario1'@'localhost'. Las partes de usuario y equipo del nombre de cuenta se corresponden a las columnas User y Host del registro de la tabla user para la cuenta. DROP USER como está en MySQL 5.0.0 y 5.0.1 borra sólo cuentas que no tienen permisos. En estas versiones MySQL sólo sirve para borrar cada registro de cuenta de la tabla user . Para borrar una cuenta MySQL completamente (incluyendo todos sus permisos), debe usar el siguiente procedimiento, realizando estos pasos en el orden mostrado: 1. Use SHOW GRANTS para determinar los permisos que tiene la cuenta. 2. Use REVOKE para revocar los permisos mostrados por SHOW GRANTS. Esto borra registros para la cuenta de todas las tablas de permisos excepto la tabla user , y revoca cualquier permiso global listado en la tabla user. 3. Borre la cuenta usando DROP USER para borrar el registro de la tabla user . DROP USER no cierra automáticamente ninguna sesión de usuario. En lugar de ello, en el evento que un usuario con una sesión abierta se elimina, el comando no tiene efecto hasta que se cierra la sesión de usuario. Una vez se ha cerrado, el usuario se borra, y el próximo intento de logueo del usuario fallará. En el siguiente ejemplo se va eliminar un usuario llamado USER1 que tiene como contraseña PASSWORD y los privilegios SELECT,INSERT,UPDATE. 1. Verificamos los permisos: mysql>show grants for ‘user1’@’localhost’; 2. Revocamos los permisos: mysql>revoke select, insert, update on *.* from ‘user1’@’localhost’; 3. Borramos el usuario: mysql>drop user ‘user1’@’localhost’;

Page 12: cuentas_usuario.pdf

Página 12 de 13

6. LIMITAR RECURSOS DE CUENTAS Una forma de limitar los recursos de los servidores MySQL es asignar a la variable de sistema max_user_connections un valor distinto de cero. Sin embargo, este método es estrictamente global, y no está permitido para la administración de cuentas individuales. Además, limita sólo el número de conexiones simultáneas hechas usando una sola cuenta, y no lo que un cliente puede hacer una vez conectado. Ambos tipos de control son interesantes para muchos administradores de MySQL, particularmente aquellos que trabajan en ISPs (Proveedores de Servicio de Internet). En MySQL 5.0, puede limitar los siguientes recursos de servidor para cuentas individuales: � El número de consultas que una cuenta puede realizar por hora � El número de actualizaciones que una cuenta puede hacer por hora � El número de veces que una cuenta puede conectar con el servidor por hora Cualquier comando que un cliente puede realizar cuenta en el límite de consultas. Sólo los comandos que modifiquen la base de datos o las tablas cuentan en el límite de actualizaciones. Desde MySQL 5.0.3, es posible limitar el número de conexiones simultáneas al servidor por cuenta. Una cuenta en este contexto es un registro en la tabla user. Cada cuenta se identifica unívocamente por los valores de las columnas User y Host. Como prerrequisito para usar esta característica, la tabla user en la base de datos mysql debe contener las columnas relacionadas con el recurso. Los límites de recursos se guardan en las columnas max_questions max_updates, max_connections max_user_connections. Para cambiar el límite de recursos con un comando GRANT use la cláusula WITH que nombra cada recurso a ser limitado y un contador por hora indicando el valor límite. Por ejemplo, para crear una nueva cuenta que pueda acceder a la base de datos mi_base, pero sólo de forma limitada, utilice este comando: mysql> GRANT ALL ON customer.* TO 'usuarioN'@'localhost' -> IDENTIFIED BY 'password' -> WITH MAX_QUERIES_PER_HOUR 20 -> MAX_UPDATES_PER_HOUR 10 -> MAX_CONNECTIONS_PER_HOUR 5 -> MAX_USER_CONNECTIONS 2; No todos los tipos de límites necesitan nombrarse en la cláusula WITH, pero los nombrados pueden presentarse en cualquier orden. El valor para cada límite por hora debe ser un entero representando el contador por hora. Si el comando GRANT no tiene cláusula WITH, los límites se inicializan con el valor por defecto de cero (o sea, sin límite). Para MAX_USER_CONNECTIONS, el límite es un entero indicando el máximo número de conexiones simultáneas que la cuenta puede hacer en cualquier momento. Si el límite asignado es el valor por defecto de cero, la variable de sistema max_user_connections determina el número de conexiones simultáneas para la cuenta. Para inicializar o cambiar los límites de una cuenta existente, use un comando GRANT USAGE a nivel global. Por Ejemplo, si queremos cambiar el límite de consultas para USER1 a 100 escribimos lo siguiente: mysql> GRANT USAGE ON *.* TO user1@'localhost' -> WITH MAX_QUERIES_PER_HOUR 100;

Page 13: cuentas_usuario.pdf

Página 13 de 13

Este comando deja los permisos existentes de la cuenta inalterados y modifica sólo los valores cuyo límite se especifica. Para eliminar un límite existente, ponga su valor a cero. Por ejemplo, para eliminar el límite de cuantas veces por hora puede conectar USER1 , escribimos lo siguiente: mysql> GRANT USAGE ON *.* TO user1@'localhost' -> WITH MAX_CONNECTIONS_PER_HOUR 0; El conteo del uso de recursos toma lugar cuando una cuenta tiene un límite distinto a cero para el uso de cualquier recurso. Mientras el servidor está en ejecución, cuenta el número de veces que cada cuenta usa los recursos. Si una cuenta llega a su límite en el número de conexiones en la última hora, se rechazan cualquier intento de conexión mientras dure la hora. De forma similar, si la cuenta llega a su límite de consultas o actualizaciones, consultas o actualizaciones adicionales se rechazan mientras dure la hora. En cualquier caso, se muestra el mensaje de error apropiado. El conteo de recursos se hace por cuenta, no por cliente. Por ejemplo, si una cuenta tiene un límite de 50 consultas, no puede incrementar el límite a 100 haciendo dos conexiones simultáneas al servidor. Las consultas de ambas conexiones se cuentan juntas. Todos los contadores empiezan a cero cuando el servidor arranca; los contadores no se guardan al reiniciar.