You are on page 1of 3

22/4/2018 MySQL :: MySQL 5.0 Reference Manual :: 5.6.

6 Control de acceso, nivel 2: comprobación de solicitudes

Skip navigation links

The world's most popular open source database


Search
Developer Zone
Login |Downloads
Register
Documentation

MySQL Manual
MySQL Workbench
Expert Guides
Topic Guides
MySQL Cluster
Other Docs
MySQL Uni
About
Archives

MySQL 5.0 Reference Manual :: 5 Administración de bases de datos :: 5.6 El sistema de privilegios de acceso de
MySQL :: 5.6.6 Control de acceso, nivel 2: comprobación de solicitudes
« 5.6.5 Control de acceso, nivel 1:
Comprobación de la conexión
5.6.6. Control de acceso, nivel 2: 5.6.7 Cuándo tienen efecto los camios de
privilegios »
comprobación de solicitudes
Section Navigation [Toggle]

Una vez establecida una conexión, el servidor entra en el estado 2 del 5.6 El sistema de privilegios de
control de acceso. Por cada petición que viene en la conexión, el acceso de MySQL
servidor determina que operación realizar, y entonces comprueba si 5.6.1 Qué hace el sistema de
tiene suficientes privilegios para hacerlo. Aquí es donde las columnas privilegios
de privilegios de las tablas grant entran en juego. Esots privilegios
5.6.2 Cómo funciona el sistema
puede venir de cualquiera de las tablas user, db, host,
de privilegios
tables_priv, o columns_priv.(Puede encontrar útil consultar
5.6.3 Privilegios de los que
Sección 5.6.2, “Cómo funciona el sistema de privilegios”, que enumera provee MySQL
las columnas presentes en cada una de las tablas grant.)
5.6.4 Conectarse al servidor
La tabla user otorga privilegios que se asignan de manera global, y MySQL
que se aplican sin importar sobre qué base de datos trabajamos. Por 5.6.5 Control de acceso, nivel 1:
ejemplo, si la tabla user le otorga el privilegio DELETE, usted podrá Comprobación de la conexión
borrar registros de cualquier tabla en cualquier base de datos en todo 5.6.6 Control de acceso, nivel 2:
el servidor. En otras palabras, los privilegios de la tabla user son comprobación de solicitudes
privilegios de superusuario. Es aconsejable otorgar privilegios en la 5.6.7 Cuándo tienen efecto los
tabla user sólo a superusuarios tales como administradores de base camios de privilegios
de datos. Para otros usuarios, debería dejar los privilegios de la tabla 5.6.8 Causas de errores Access
user con el valor 'N' y otorgar los privilegios únicamente a niveles denied
más específicos. Puede otorgar privilegios para bases de datos, tablas 5.6.9 Hashing de contraseñas
o columnas particulares. en MySQL 4.1

Las tablas db y host otorgan privilegios específicos para una base de


datos. Los valores en las columnas de estas tablas pueden tener los siguientes formatos:

Los caracteres comodín '%' y '_' pueden utilizarse en las columnas Db de cualquiera de las tablas. Estos
tienen el mismo significado que en las operaciones de reconocimiento de patrones efectuadas con el
operador LIKE. Si quiere utilizar cualquiera de estos caracteres literales al otorgar privilegios, debe
incluirlos en una secuencia de escape con una barra invertida. Por ejemplo, para incluir el carácter '_'
como parte del nombre de una base de datos, especifíquelo como '\_' en la sentencia GRANT.

Un valor de '%' en la columna Host de la tabla db significa ``cualquier host.'' Un valor vacío en la
columna Host de la tabla db significa ``consulta la tabla host para más información'' (un proceso que se
describe más adelante en esta sección).

http://download.nust.na/pub6/mysql/doc/refman/5.0/es/request-access.html 1/3
22/4/2018 MySQL :: MySQL 5.0 Reference Manual :: 5.6.6 Control de acceso, nivel 2: comprobación de solicitudes

Un valor de '%' o en blanco en la columna Host de la tabla host significa ``cualquier host.''

Un valor de '%' o en blanco de la columna Db en cualquiera de las dos tablas, significa ``cualquier base
de datos.''

Un valor en blanco de la columna User en cualquiera de las tablas concuerda con el usuario anónimo.

El servidor lee y ordena las tablas db y host al mismo tiempo que lee la tabla user. El servidor ordena la tabla
db basándose en el rango de las columnas Host, Db y User, y ordena la tabla host basándose en el rango de
las columnas Host y Db. Igual que con la tabla user, la ordenación coloca los valores menos específicos en
última posición, y cuando el servidor busca correspondencias, utiliza la primera que encuentra.

Las tablas tables_priv y columns_priv otorgan privilegios específicos para tablas y columnas
respectivamente. Los valores en las columnas de rango de estas tablas pueden tener los siguientes formatos:

Los caracteres comodín '%' y '_' pueden ser utilizados en la columna Host de cualquiera de las tablas.
Estos comodines tienen el mismo significado que en las operaciones de búsqueda de patrones
realizadas con el operador LIKE.

Un valor de '%' o vacío en la columna Host de cualquiera de las tablas significa ``cualquier host.''

Las columnas Db, Table_name y Column_name no pueden contener caracteres comodín ni estar en
blanco en ninguna de las tablas.

El servidor ordena las tablas tables_priv y columns_priv basándose en las columnas Host, Db, y User.
Esto es similar a la ordenación de la tabla db, pero más simple, porque únicamente la columna Host puede
contener comodines.

El proceso de verificación de peticiones se describe aquí. (Si usted está familirizado con el código fuente de
control de acceso, se dará cuenta de que la descripción aquí contenida difiere ligeramente de el algoritmo
utilizado en el código. La descripción es equivalente a lo que el código hace realmente; solo difiere para hacer
la explicación más simple.)

Para peticiones que requieran privilegios de administrador, como SHUTDOWN o RELOAD, el servidor comprueba
únicamente el registro de la tabla user porque es la única tabla que especifica los privilegios administrativos. El
acceso se otorga si el registro permita la operación demandada, y es denegado en caso contrario. Por ejemplo,
si usted quisiera ejecutar mysqladmin shutdown, pero su registro de la tabla user no le otorga el privilegio
SHUTDOWN, el servidor deniega el acceso sin ni siquiera codnsultar las tablas db o host. (No contienen ninguna
columna Shutdown_priv, así que no hay necesidad de hacerlo.)

Para peticiones sobre bases de datos (INSERT, UPDATE, etc.), el servidor primero comprueba los privilegios
globales del usuario (superuser) mirando el registro de la tabla user. Si el registro permite la operación
demandada, se otorga el acceso. Si los privilegios globales de la tabla user son insuficientes, el servidor
determina los privilegios específicos sobre la base de datos comprobando las tablas db y host:

1. El servidor busca en la tabla db una concordancia en las columnas Host, Db y User. Las columnas Host
y User se hacen concordar con el nombre de host y de usuario MySQL. La columna Db se hace
concordar con la base de datos a la que el usuario quiere acceder. Si no hay ningún registro para Host y
User, se deniega el acceso.

2. Si hay un registro que concuerda en el registro de la tabla db y su columna Host no está vacía, ese
registro define los privilegios específicos del usuario en la base de datos.

3. Si la columna Host del registro concordante de la tabla db se encuentra vacía, significa que la tabla
hosts enumera qué hosts pueden tener acceso a la base de datos. En este caso, una comprobación
más se realiza en la tabla host para encontrar una concordancia en las columnas Host y Db. Si ningún
registro de la tabla host concuerda, se deniega el acceso. Si hay una concordancia, los privilegios
específicios sobre la base de datos del usuario son calculados como la intersección (¡no unión!) de los
privilegios en los registros de las tablas db y host; es decir, los privilegios que tienen valor 'Y' en ambos
registros. (De esta manera puede otorgar privilegios en el registro de la tabla db y entonces restringir
selectivamente host a host utilizando los registros de la tabla hosts.)

Tras determinar los privilegios específicos de la base de datos otorgados por los registros de las tablas db y
host, el servidor los añade a los privilegios globales otorgados por la tabla user. Si el resultado permite la
operación demandada, se otorga el acceso. En caso contrario, el servidor comprueba sucesivamente la tabla

http://download.nust.na/pub6/mysql/doc/refman/5.0/es/request-access.html 2/3
22/4/2018 MySQL :: MySQL 5.0 Reference Manual :: 5.6.6 Control de acceso, nivel 2: comprobación de solicitudes

del usuario y los privilegios de las columnas en las tablas tables_priv y columns_priv, los añade a los
privilegios del usuario, y permite o deniega el acceso basándose en el resultado.

Expresado en términos booleanos, la descripción precedente de como se calculan los privilegios de un usuario,
se puede resumir en:

privilegios globales
O (privilegios de base de datos Y privilegios de host)
O privilegios de tabla
O privilegios de columna

Puede no ser evidente por qué, si los privilegios globales del registro en la tabla user no han sido inicialmente
suficientes para la operación demandada, el servidor añado estos privilegios a los de base de datos, tabla y
columna más tarde. La razón es que una petición puede requerir más de un tipo de privilegio. Por ejemplo, si
usted ejecuta una sentencia INSERT INTO ... SELECT, necesita tanto el privilegio INSERT como el privilegio
SELECT. Sus privilegios podrían estar configurados de manera que la tabla user otorgue un privilegio, y la tabla
db otorgue el otro. En este caso, necesita ambos privilegios para realizar la sentencia, pero el servidor no
puede saberlo desde cada una de las tablas únicamente; los privilegios otorgados por los registros de ambas
tablas deben ser combinados.

La tabla host no es afectada por sentencias GRANT o REVOKE, así que en la mayoría de las instalaciones
MySQL queda sin utilizar. Si usted la modifica directamente, puede utilizarla para algunos propósitos
específicos, como mantener una lista de servidores seguros. Por ejemplo, en TcX, la tabla host contiene una
lista de todas las máquinas en la red local. Éstas tienen otorgados todos los privilegios.

También puede utilizar la tabla host para indicar hosts que no son seguros. Supongamos que tiene una
máquina public.su.dominio que está situada en un lugar público que no considera seguro. Puede permitir el
acceso a todos los hosts de su red excepto a esa máquina utilizando registros de la tabla host como este:

+--------------------+----+-
| Host | Db | ...
+--------------------+----+-
| public.your.domain | % | ... (all privileges set to 'N')
| %.your.domain | % | ... (all privileges set to 'Y')
+--------------------+----+-

Nauturalmente, usted debe siempre comprobar sus entradas en las tablas grant (por ejemplo, utilizando SHOW
GRANTS o mysqlaccess) para estar seguro de que sus privilegios de acceso son realmente los que piensa que
son.

Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de
referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como
la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en
dirigirse a mysql-es@vespito.com.

Top / Previous / Next / Up / Table of Contents


© 2010, Oracle Corporation and/or its affiliates

http://download.nust.na/pub6/mysql/doc/refman/5.0/es/request-access.html 3/3

You might also like