16
13 Lenguaje SQL Usuarios y privilegios ^ Hasta ahora hemos usado sólo el usuario 'root', que es el administrador, y que dispone de todos los privilegios disponibles en MySQL. Sin embargo, normalmente no será una buena práctica dejar que todos los usuario con acceso al servidor tengan todos los privilegios. Para conservar la integridad de los datos y de las estructuras será conveniente que sólo algunos usuarios puedan realizar determinadas tareas, y que otras, que requieren mayor conocimiento sobre las estructuras de bases de datos y tablas, sólo puedan realizarse por un número limitado y controlado de usuarios. Los conceptos de usuarios y privilegios están íntimamente relacionados. No se pueden crear usuarios sin asignarle al mismo tiempo privilegios. De hecho, la necesidad de crear usuarios está ligada a la necesidad de limitar las acciones que tales usuarios pueden llevar a cabo. MySQL permite definir diferentes usuarios, y además, asignar a cada uno determinados privilegios en distintos niveles o categorías de ellos. Niveles de 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 más alto de privilegio, en el sentido de que su ámbito es el más general. De base de datos: se refieren a bases de datos individuales, y por extensión, 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. Aún no hemos visto nada sobre este tema, pero en MySQL se pueden almacenar procedimietos consistentes en varias consultas SQL. Crear usuarios ^ Aunque en la versión 5.0.2 de MySQL existe una sentencia para crear usuarios, CREATE USER , en versiones anteriores se usa exclusivamente la sentenciaGRANT para crearlos.

13 Lenguaje SQL Usuarios y privilegios.docx

Embed Size (px)

Citation preview

Page 1: 13 Lenguaje SQL Usuarios y privilegios.docx

13 Lenguaje SQL Usuarios y privilegios^

Hasta ahora hemos usado sólo el usuario 'root', que es el administrador, y que dispone de todos los privilegios disponibles en MySQL.

Sin embargo, normalmente no será una buena práctica dejar que todos los usuario con acceso al servidor tengan todos los privilegios. Para conservar la integridad de los datos y de las estructuras será conveniente que sólo algunos usuarios puedan realizar determinadas tareas, y que otras, que requieren mayor conocimiento sobre las estructuras de bases de datos y tablas, sólo puedan realizarse por un número limitado y controlado de usuarios.

Los conceptos de usuarios y privilegios están íntimamente relacionados. No se pueden crear usuarios sin asignarle al mismo tiempo privilegios. De hecho, la necesidad de crear usuarios está ligada a la necesidad de limitar las acciones que tales usuarios pueden llevar a cabo.

MySQL permite definir diferentes usuarios, y además, asignar a cada uno determinados privilegios en distintos niveles o categorías de ellos.

Niveles de 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 más alto de privilegio, en el sentido de que su ámbito es el más general.De base de datos: se refieren a bases de datos individuales, y por extensión, 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. Aún no hemos visto nada sobre este tema, pero en MySQL se pueden almacenar procedimietos consistentes en varias consultas SQL.

Crear usuarios^

Aunque en la versión 5.0.2 de MySQL existe una sentencia para crear usuarios, CREATE USER, en versiones anteriores se usa exclusivamente la sentenciaGRANT para crearlos.En general es preferible usar GRANT, ya que si se crea un usuario mediante CREATE USER, posteriormente hay que usar una sentencia GRANT para concederle privilegios.Usando GRANT podemos crear un usuario y al mismo tiempo concederle también los privilegios que tendrá. La sintaxis simplificada que usaremos paraGRANT, sin preocuparnos de temas de cifrados seguros que dejaremos ese tema para capítulos avanzados, es:

GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ...

ON

TO user [IDENTIFIED BY [PASSWORD] 'password']

Page 2: 13 Lenguaje SQL Usuarios y privilegios.docx

[, user [IDENTIFIED BY [PASSWORD] 'password']] ...

La primera parte priv_type [(column_list)] permite definir el tipo de privilegio concedido para determinadas columnas. La segunda ON {tbl_name | * | *.* | db_name.*}, permite conceder privilegios en niveles globales, de base de datos o de tablas.

Para crear un usuario sin privilegios usaremos la sentencia:

mysql> GRANT USAGE ON *.* TO anonimo IDENTIFIED BY 'clave';

Query OK, 0 rows affected (0.02 sec)

Hay que tener en cuenta que la constraseña se debe introducir entre comillas de forma obligatoria.

Un usuario 'anonimo' podrá abrir una sesión MySQL mediante una orden:

C:\mysql -h localhost -u anonimo -p

Pero no podrá hacer mucho más, ya que no tiene privilegios. No tendrá, por ejemplo, oportunidad de hacer selecciones de datos, de crear bases de datos o tablas, insertar datos, etc.

Conceder privilegios^

Para que un usuario pueda hacer algo más que consultar algunas variables del sistema debe tener algún privilegio. Lo más simple es conceder el privilegio para seleccionar datos de una tabla concreta. Esto se haría así:

La misma sentencia GRANT se usa para añadir privilegios a un usuario existente.

mysql> GRANT SELECT ON prueba.gente TO anonimo;

Query OK, 0 rows affected (0.02 sec)

Esta sentencia concede al usuario 'anonimo' el privilegio de ejecutar sentencias SELECT sobre la tabla 'gente' de la base de datos 'prueba'.

Un usuario que abra una sesión y se identifique como 'anonimo' podrá ejecutar estas sentencias:

mysql> SHOW DATABASES;

+----------+

| Database |

+----------+

| prueba |

+----------+

1 row in set (0.01 sec)

Page 3: 13 Lenguaje SQL Usuarios y privilegios.docx

mysql> USE prueba;

Database changed

mysql> SHOW TABLES;

+------------------+

| Tables_in_prueba |

+------------------+

| gente |

+------------------+

1 row in set (0.00 sec)

mysql> SELECT * FROM gente;

+----------+------------+

| nombre | fecha |

+----------+------------+

| Fulano | 1985-04-12 |

| Mengano | 1978-06-15 |

| Tulano | 2001-12-02 |

| Pegano | 1993-02-10 |

| Pimplano | 1978-06-15 |

| Frutano | 1985-04-12 |

+----------+------------+

6 rows in set (0.05 sec)

mysql>

Como se ve, para este usuario sólo existe la base de datos 'prueba' y dentro de esta, la tabla 'gente'. Además, podrá hacer consultas sobre esa tabla, pero no podrá añadir ni modificar datos, ni por supuesto, crear o destruir tablas ni bases de datos.

Para conceder privilegios globales se usa ON *.*, para indicar que los privilegios se conceden en todas las tablas de todas las bases de datos.Para conceder privilegios en bases de datos se usa ON nombre_db.*, indicando que los privilegios se conceden sobre todas las tablas de la base de datos 'nombre_db'.Usando ON nombre_db.nombre_tabla, concedemos privilegios de nivel de tabla para la tabla y base de datos especificada.En cuanto a los privilegios de columna, para concederlos se usa la sintaxis tipo_privilegio (lista_de_columnas), [tipo_privilegio (lista_de_columnas)].

Otros privilegios que se pueden conceder son:

ALL: para conceder todos los privilegios. CREATE: permite crear nuevas tablas.

Page 4: 13 Lenguaje SQL Usuarios y privilegios.docx

DELETE: permite usar la sentencia DELETE. DROP: permite borrar tablas. INSERT: permite insertar datos en tablas. UPDATE: permite usar la sentencia UPDATE.

Para ver una lista de todos los privilegios existentes consultar la sintaxis de la sentencia GRANT.

Se pueden conceder varios privilegios en una única sentencia. Por ejemplo:

mysql> GRANT SELECT, UPDATE ON prueba.gente TO anonimo IDENTIFIED BY 'clave';

Query OK, 0 rows affected (0.22 sec)

mysql>

Un detalle importante es que para crear usuarios se debe tener el privilegio GRANT OPTION, y que sólo se pueden conceder privilegios que se posean.

Revocar privilegios^

Para revocar privilegios se usa la sentencia REVOKE.

REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ...

ON

FROM user [, user] ...

La sintaxis es similar a la de GRANT, por ejemplo, para revocar el privilegio SELECT de nuestro usuario 'anonimo', usaremos la sentencia:

mysql> REVOKE SELECT ON prueba.gente FROM anonimo;

Query OK, 0 rows affected (0.05 sec)

Mostrar los privilegios de un usuario^

Podemos ver qué privilegios se han concedido a un usuario mediante la sentencia SHOW GRANTS. La salida de esta sentencia es una lista de sentenciasGRANT que se deben ejecutar para conceder los privilegios que tiene el usuario. Por ejemplo:

mysql> SHOW GRANTS FOR anonimo;

+--------------------------------------------------------------------+

| Grants for anonimo@% |

+--------------------------------------------------------------------+

| GRANT USAGE ON *.* TO 'anonimo'@'%' IDENTIFIED BY PASSWORD '*5...' |

| GRANT SELECT ON `prueba`.`gente` TO 'anonimo'@'%' |

+--------------------------------------------------------------------+

2 rows in set (0.00 sec)

Page 5: 13 Lenguaje SQL Usuarios y privilegios.docx

mysql>

Nombres de usuarios y contraseñas^

Como podemos ver por la salida de la sentencia SHOW GRANTS, el nombre de usuario no se limita a un nombre simple, sino que tiene dos partes. La primera consiste en un nombre de usuario, en nuestro ejemplo 'anonimo'. La segunda parte, que aparece separada de la primera por el carácter '@' es un nombre de máquina (host). Este nombre puede ser bien el de una máquina, por ejemplo, 'localhost' para referirse al ordenador local, o cualquier otro nombre, o bien una ip.La parte de la máquina es opcional, y si como en nuestro caso, no se pone, el usuario podrá conectarse desde cualquier máquina. La salida de SHOW GRANTS lo indica usando el comodín '%' para el nombre de la máquina.

Si creamos un usuario para una máquina o conjunto de máquinas determinado, ese usuario no podrá conectar desde otras máquinas. Por ejemplo:

mysql> GRANT USAGE ON * TO anonimo@localhost IDENTIFIED BY 'clave';

Query OK, 0 rows affected (0.00 sec)

Un usuario que se identifique como 'anonimo' sólo podrá entrar desde el mismo ordenador donde se está ejecutando el servidor.

En este otro ejemplo:

mysql> GRANT USAGE ON * TO [email protected] IDENTIFIED BY 'clave';

Query OK, 0 rows affected (0.00 sec)

El usuario 'anonimo' sólo puede conectarse desde un ordenador cuyo IP sea '10.28.56.15'.

Aunque asignar una constraseña es opcional, por motivos de seguridad es recomendable asignar siempre una.

La contraseña se puede escribir entre comillas simples cuando se crea un usuario, o se puede usar la salida de la función PASSWORD() de forma literal, para evitar enviar la clave en texto legible.Si al añadir privilegios se usa una clave diferente en la cláusula IDENTIFIED BY, sencillamente se sustituye la contraseña por la nueva.

Borrar usuarios^

Para eliminar usuarios se usa la sentencia DROP USER.

No se puede eliminar un usuario que tenga privilegios, por ejemplo:

mysql> DROP USER anonimo;

Page 6: 13 Lenguaje SQL Usuarios y privilegios.docx

ERROR 1268 (HY000): Can't drop one or more of the requested users

mysql>

Para eliminar el usuario primero hay que revocar todos sus privilegios:

mysql> SHOW GRANTS FOR anonimo;

+--------------------------------------------------------------------+

| Grants for anonimo@% |

+--------------------------------------------------------------------+

| GRANT USAGE ON *.* TO 'anonimo'@'%' IDENTIFIED BY PASSWORD '*5...' |

| GRANT SELECT ON `prueba`.`gente` TO 'anonimo'@'%' |

+--------------------------------------------------------------------+

2 rows in set (0.00 sec)

mysql> REVOKE SELECT ON prueba.gente FROM anonimo;

Query OK, 0 rows affected (0.00 sec)

mysql> DROP USER anonimo;

Query OK, 0 rows affected (0.00 sec)

mysql>

Crear un usuario de base de datos (Administración de datos)Escritorio » Geoprocesamiento » Referencia de la herramienta » Caja de herramientas Administración de datos

ResumenLa herramienta Crear un usuario de base de datos crea un usuario de base de datos con privilegios suficientes para crear datos en la base de datos.

Uso Esta herramienta solo se puede utilizar con Oracle, Microsoft SQL Server o PostgreSQL.

(No compatible con Windows Azure SQL Database.) Para Oracle y SQL Server, si un inicio de sesión del sistema operativo ya existe, la

herramienta Crear un usuario de base de datos puede agregar ese inicio de sesión como un usuario a la base de datos especificada.

Los usuarios creados en la base de datos tiene los siguientes privilegios:

DBMS Privilegios

Page 7: 13 Lenguaje SQL Usuarios y privilegios.docx

Oracle CREATE SESSIONCREATE SEQUENCECREATE TRIGGERCREATE VIEWCREATE TABLESELECCIONAR EN DBA_ROLES

PostgreSQL

USAGE en el esquema sde si el usuario se crea en una geodatabase o una base de datos que tiene instalado el tipo ST_GeometrySELECT, INSERT, UPDATE y DELETE en la tabla public.geometry_columns y SELECT en la tabla public.spatial_ref_sys si tiene instalado el tipo de geometría de PostGIS

SQL Server CREATE TABLECREATE PROCEDURECREATE VIEWDEFINICIÓN DE LA VISTA

Si el inicio de sesión no existe en la instancia de SQL Server o el cluster de base de datos de PostgreSQL, la herramienta Crear un usuario de base de datosagrega el inicio de sesión, crea un usuario en la base de datos especificada para la base de datos de entrada y crea un esquema para el usuario en la base de datos. La base de datos especificada se establece como la base de datos predeterminada del usuario en SQL Server.

Si el inicio de sesión ya existe en la instancia de SQL Server, la herramienta Crear un usuario de base de datos agrega el usuario de la base de datos que especifique para la base de datos de entrada y crea un esquema de geocodificación. El usuario de la base de datos predeterminada no se modifica en SQL Server.

Si el inicio de sesión ya existe en el cluster de la base de datos PostgreSQL, la herramienta Crear un usuario de base de datos crea un esquema de geocodificación en la base de datos que especifique para la base de datos de entrada.

No puede crear un usuario llamado sde con esta herramienta. El usuario sde es un usuario administrador de la geodatabase y requiere más privilegios de los que otorga la herramienta Crear un usuario de base de datos.

SintaxisCreateDatabaseUser_management (input_database, {user_authentication_type}, user_name, {user_password}, {role}, {tablespace_name})

Parámetro Explicación

input_databaseEspecifique el archivo de conexión a una base de datos o geodatabase corporativa en Oracle, PostgreSQL o SQL Server. Asegúrese de que el archivo de conexión se conecta a la base de datos como un usuario administrador de base de datos. Al conectarse a Oracle, debe hacerlo como el usuario del sistema.

user_authentication_type

(Opcional)

Utilice esta opción sólo si existe un inicio de sesión del sistema operativo para el que desea crear un usuario de base de datos. Está habilitada solamente para bases de datos de Oracle y SQL Server.

DB —Crear un usuario autenticado de la base de datos. Esta es la opción predeterminada. Si el DBMS no está configurado para permitir la autenticación de la base de datos, no utilice esta opción.

OSA —Crear un usuario autenticado del sistema operativo. El inicio de sesión correspondiente ya debe existir. Si el DBMS no está configurado para permitir la autenticación del sistema operativo, no utilice esta opción.

user_nameEscriba un nombre para el nuevo usuario de la base de datos.

Si elige crear un usuario de base de datos para un inicio de sesión de sistema operativo, el nombre de usuario debe coincidir con el nombre de inicio de sesión.

user_passwordEscriba una contraseña para el nuevo usuario. Se implementará la política de contraseña de la base de datos subyacente.

Si elige crear un usuario de base de datos para el inicio de sesión de un sistema operativo, no se requerirán entradas.

Page 8: 13 Lenguaje SQL Usuarios y privilegios.docx

(Opcional)

role

(Opcional)

Si desea agregar el nuevo usuario a un rol de base de datos existente, escriba el nombre del rol.

tablespace_name

(Opcional)

Cuando cree un usuario en una base de datos de Oracle, escriba el nombre del espacio de tabla que se va a utilizar como el espacio de tabla predeterminado para el usuario. Puede especificar un espacio de tabla preconfigurado o, si el espacio de tabla no existe, se creará en la ubicación de almacenamiento predeterminada de Oracle con el tamaño establecido en 400 MB. Si no se especifica, el espacio de tabla predeterminado del usuario se establece en el espacio de tabla predeterminado de Oracle.

Ejemplo de códigoEjemplo 1 de CreateUser

Crea un usuario de base de datos en Oracle y crea un espacio de tabla predeterminado para el usuario

#Import arcpy module

import arcpy

CreateDatabaseUser_management("C:\Documents and Settings\user1\Application Data\

ESRI\ArcCatalog\oracledb1.sde", "DB", "map", "Pam987", "sdetbs")

Ejemplo 2 de CreateUser

Crea un espacio de trabajo de entrada y el usuario de base de datos en PostgreSQL

#Import arcpy module

import arcpy

CreateDatabaseConnection_management("Database Connections", "pgconn.sde",

"POSTGRESQL", myserver, mypgdb, "DATABASE_AUTH", "ela", "3L@pwd", "SAVE_USERNAME")

CreateDatabaseUser_management("C:\Documents and Settings\u5\Application Data\ESRI\

ArcCatalog\pgconn.sde", "DB", "dataowner", "N0look")

Ejemplo 3 de CreateUser

Crea un usuario de base de datos asignado a un inicio de sesión del sistema operativo en SQL Server

#Import arcpy module

import arcpy

CreateDatabaseUser_management("C:\Documents and Settings\u5\Application Data\ESRI\

ArcCatalog\connection_ssi.sde", "OSA", "mynet\vorhoos

Page 9: 13 Lenguaje SQL Usuarios y privilegios.docx

5.7.2. Añadir nuevas cuentas de usuario a MySQL

Puede crear cuentas MySQL de dos formas:

Usando comandos GRANT

Manipulando las tablas de permisos MySQL directamente

El método preferido es usar comandos GRANT , ya que son más concisos y menos propenso a

errores. . GRANTestá disponible desde MySQL 3.22.11; su sintaxis se describe

en Sección   13.5.1.3, “Sintaxis de   GRANT   y   REVOKE ” .

Otra opción para crear cuentas es usar uno de los diversos programas proporcionados por

terceras partes que ofrecen capacidades para administradores de MySQL. phpMyAdmin es

una de ellos.

Los siguientes ejemplos muestran cómo usar el programa cliente mysql para añadir nuevos

usuarios. Estos ejemplos asumen que los permisos se inicializan según las pautas descritas

en Sección   2.9.3, “Hacer seguras las cuentas iniciales de MySQL” . Esto significa que para

realizar cambios, debe conectar al servidor MySQL como el usuario root , y la

cuenta root debe tener el privilegio INSERT para la base de datos mysql y el permiso

administrativo RELOAD.

En primer lugar, use el programa mysql para conectar al servidor como el usuario root :

shell> mysql --user=root mysql

Si ha asignado una contraseña a la cuenta root, necesitará la opción --password o -p para

este comandomysql y también para los mostrados a continuación en esta sección.

Tras la conexión al servidor como root, puede añadir nuevas cuentas. El siguiente comando

usa GRANT para inicializar nuevas cuentas:

Page 10: 13 Lenguaje SQL Usuarios y privilegios.docx

mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'

-> IDENTIFIED BY 'some_pass' WITH GRANT OPTION;

mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'

-> IDENTIFIED BY 'some_pass' WITH GRANT OPTION;

mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';

mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost';

Las cuentas creadas con estos comandos GRANT tienen las siguientes propiedades:

Dos de las cuentas tienen un nombre de usuario de monty y una contraseña

de some_pass. Ambas cuentas son cuentas de superusuario con plenos permisos para

hacer cualquier cosa. Una cuenta ('monty'@'localhost') puede usarse sólo cuando se

conecte desde el equipo local. La otra ('monty'@'%') puede usarse para conectarse

desde cualquier otro equipo. Note que es necesario tener ambas cuentas para

que monty sea capaz de conectarse desde cualquier sitio como monty. Sin la

cuenta localhost, la cuenta anónima para localhostcreada

por mysql_install_db tendría precedencia cuando monty conecte desde el equipo local.

Como resultado,monty se trataría como un usuario anónimo. La razón para ello es que el

usuario anónimo tiene un valor más específico en la columna Host que la

cuenta 'monty'@'%' y por lo tanto toma precedencia en la ordenación de la tabla user.

(La ordenación de la tabla user se discute en Sección   5.6.5, “Control de acceso, nivel 1:

Comprobación de la conexión”.)

Una cuenta tiene un nombre de usuario de admin 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 admin 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.

Una cuenta tiene un nombre de usuario de dummy 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 privilegio. Tiene el efecto de

inicializar todos los privilegios globales a 'N'. Se asume que se otorgarán privilegios

específicos posteriormente.

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:

shell> mysql --user=root mysql

mysql> INSERT INTO user

Page 11: 13 Lenguaje SQL Usuarios y privilegios.docx

-> VALUES('localhost','monty',PASSWORD('some_pass'),

-> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

mysql> INSERT INTO user

-> VALUES('%','monty',PASSWORD('some_pass'),

-> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

mysql> INSERT INTO user SET Host='localhost',User='admin',

-> Reload_priv='Y', Process_priv='Y';

mysql> INSERT INTO user (Host,User,Password)

-> VALUES('localhost','dummy','');

mysql> FLUSH PRIVILEGES;

La razón de usar FLUSH PRIVILEGES al crear cuantas 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. ConGRANT, FLUSH PRIVILEGES no es necesario.

La razón para usar la función PASSWORD() con INSERT es cifrar las contraseñas. El

comando GRANT cifra la contraseña, así que PASSWORD() no es necesario.

El valor 'Y' activa permisos para las cuentas. Para la cuenta admin , puede emplear la

sintaxis más clara extendida INSERT usando SET.

En el comando INSERT para la cuenta dummy account, sólo las columnas Host, User,

y Password en el registro de la tabla user tienen valores asignados. Ninguna de las columnas

de permisos se asignan explícitamente, así que MySQL les asigna a todas el valor por defecto

de 'N'. Esto es equivalente al funcionamiento de GRANT USAGE.

Para inicializar una cuenta de super usuario, sólo es necesario crear una entrada en la

tabla user con las columnas de permisos inicializadas a 'Y'. Los privilegios de la

tabla user son globales, así que no se necesitan registros en ninguna de las otras tablas de

permisos.

Los siguientes ejemplos crean tres cuentas y les dan acceso a bases de datos específicas.

Cada una de ellas tiene un nombre de usuario custom y contraseña obscure.

Para crear las cuentas con GRANT, use los siguientes comandos:

shell> mysql --user=root mysql

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP

-> ON bankaccount.*

-> TO 'custom'@'localhost'

-> IDENTIFIED BY 'obscure';

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP

-> ON expenses.*

-> TO 'custom'@'whitehouse.gov'

-> IDENTIFIED BY 'obscure';

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP

Page 12: 13 Lenguaje SQL Usuarios y privilegios.docx

-> ON customer.*

-> TO 'custom'@'server.domain'

-> IDENTIFIED BY 'obscure';

Las tres cuentas pueden usarse de la siguiente manera:

La primera cuenta puede acceder a la base de datos bankaccount, pero sólo desde el

equipo local.

La segunda cuenta puede acceder la base de datos expenses, pero sólo desde el

equipo whitehouse.gov.

La tercera cuenta puede acceder la base de datos customer, pero sólo desde el

equipo server.domain.

Para inicializar las cuentas custom sin usar GRANT, use los comandos INSERT como se

explica para modificar las tablas de permisos directamente:shell> mysql --user=root mysql

mysql> INSERT INTO user (Host,User,Password)

-> VALUES('localhost','custom',PASSWORD('obscure'));

mysql> INSERT INTO user (Host,User,Password)

-> VALUES('whitehouse.gov','custom',PASSWORD('obscure'));

mysql> INSERT INTO user (Host,User,Password)

-> VALUES('server.domain','custom',PASSWORD('obscure'));

mysql> INSERT INTO db

-> (Host,Db,User,Select_priv,Insert_priv,

-> Update_priv,Delete_priv,Create_priv,Drop_priv)

-> VALUES('localhost','bankaccount','custom',

-> 'Y','Y','Y','Y','Y','Y');

mysql> INSERT INTO db

-> (Host,Db,User,Select_priv,Insert_priv,

-> Update_priv,Delete_priv,Create_priv,Drop_priv)

-> VALUES('whitehouse.gov','expenses','custom',

-> 'Y','Y','Y','Y','Y','Y');

mysql> INSERT INTO db

-> (Host,Db,User,Select_priv,Insert_priv,

-> Update_priv,Delete_priv,Create_priv,Drop_priv)

-> VALUES('server.domain','customer','custom',

-> 'Y','Y','Y','Y','Y','Y');

mysql> FLUSH PRIVILEGES;

Los primeros tres comandos INSERT añaden registros en la tabla user que permiten al

usuario custom conectar desde los equipos con la contraseña dada, pero no otorga privilegios

blobales (todos los privilegios se inicializan al valor por defecto 'N'). Los siguientes tres

comandos INSERT añaden registros en la tabla db que otorgan privilegios a custom para las

Page 13: 13 Lenguaje SQL Usuarios y privilegios.docx

bases de datos bankaccount, expenses, y customer, pero sólo cuando se accede desde los

equipos apropiados. Como siempre, cuando modifique las tablas de permisos directamente,

debe decirle al servidor que las recargue con FLUSH PRIVILEGES para que los cambios en

los permisos tengan efecto.

Si quiere dar a un usuario específico acceso desde todas las máquinas dentro de un dominio

dado (por ejemplo,mydomain.com), puede realizar un comando GRANT que use el carácter

comodín '%' en la parte del equipo del nombre de cuenta:

mysql> GRANT ...

-> ON *.*

-> TO 'myname'@'%.mydomain.com'

-> IDENTIFIED BY 'mypass';

Para hacer lo mismo modificando las tablas de permisos directamente, haga lo siguiente:

mysql> INSERT INTO user (Host,User,Password,...)

-> VALUES('%.mydomain.com','myname',PASSWORD('mypass'),...);

mysql> FLUSH PRIVILEGES;

Trabajo de la materia competencia

http://www.youtube.com/watch?v=DjDooUig3_M

http://www.youtube.com/watch?v=wePYSTOaEnY