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 bajo ciertas circunstancias indicadas en
Sección 5.6.7, “Cuándo tienen efecto los camios de privilegios”. Las decisiones de control
de acceso se basan en la copia en memoria de las tablas grant.
Los nombres utilizados en las sentencias
GRANT
y REVOKE
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. Más
información sobre el significado de cada privilegio se puede
encontrar en Sección 13.5.1.3, “Sintaxis de GRANT
y REVOKE
”.
Privilegio | Columna | Contexto |
CREATE |
Create_priv |
bases de datos, tablas, o índices |
DROP |
Drop_priv |
bases de datos o tablas |
GRANT OPTION |
Grant_priv |
bases de datos, tablas, o procedimientos almacenados |
REFERENCES |
References_priv |
bases de datos o tables |
ALTER |
Alter_priv |
tablas |
DELETE |
Delete_priv |
tablas |
INDEX |
Index_priv |
tablas |
INSERT |
Insert_priv |
tablas |
SELECT |
Select_priv |
tablas |
UPDATE |
Update_priv |
tablas |
CREATE VIEW |
Create_view_priv |
vistas |
SHOW VIEW |
Show_view_priv |
vistas |
ALTER ROUTINE |
Alter_routine_priv |
procedimientos almacenados |
CREATE ROUTINE |
Create_routine_priv |
procedimientos almacenados |
EXECUTE |
Execute_priv |
procedimientos almacenados |
FILE |
File_priv |
acceso a archivos en la máquina del servidor |
CREATE TEMPORARY TABLES |
Create_tmp_table_priv |
administración del servidor |
LOCK TABLES |
Lock_tables_priv |
administración del servidor |
CREATE USER |
Create_user_priv |
administración del servidor |
PROCESS |
Process_priv |
administración del servidor |
RELOAD |
Reload_priv |
administración del servidor |
REPLICATION CLIENT |
Repl_client_priv |
administración del servidor |
REPLICATION SLAVE |
Repl_slave_priv |
administración del servidor |
SHOW DATABASES |
Show_db_priv |
administración del servidor |
SHUTDOWN |
Shutdown_priv |
administración del servidor |
SUPER |
Super_priv |
administración del servidor |
CREATE VIEW
y SHOW VIEW
fueron añadidos en MySQL 5.0.1. CREATE USER
,
CREATE ROUTINE
, y ALTER
ROUTINE
fueron añaidos 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 versión más antigua de MySQL que
no los tiene, debe actualizar sus tablas grant utilizando el
script mysql_fix_privilege_tables
proporcionado con la distribución MySQL. Consulte
Sección 2.10.2, “Aumentar la versión de las tablas de privilegios”.
Para crear o modificar procedimientos almacenados cuando el
registro binario está activado, debe también tener el
privilegio SUPER
, tal y como se explica en
Sección 19.3, “Registro binario de procedimientos almacenados y disparadores”.
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
sólo 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, podría 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 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
. Un usuario que tiene el privilegio
FILE
puede leer cualquier archivo de la
máquina 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
también
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 de mysqladmin permite ejecutar cada privilegio administrativo.
Privilegio | Comandos permitidos a los poseedores del privilegio Holders |
RELOAD |
flush-hosts , flush-logs ,
flush-privileges ,
flush-status ,
flush-tables ,
flush-threads ,
refresh , reload
|
SHUTDOWN |
shutdown |
PROCESS |
processlist |
SUPER |
kill |
El comando reload
comunica al servidor que
debe releer las tablas grant a memoria.
flush-privileges
es un sinónimo de
reload
. El comando reload
cierra y vuelve a abrir los archivos de registro y vuelca todas
las tablas. Los otros comandos
flush-
realizan
funciones similares a xxx
refresh
, pero son más
específicas y pueden ser preferibles en algunos casos. Por
ejemplo, si quiere tan solo volcar los archivos de registro,
flush-logs
es mejor opción que
refresh
.
El comando shutdown
apaga el servidor. Este
comando puede ejecutarse únicamente desde
mysqladmin. No hay sentencia SQL equivalente.
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 comando
kill
mata los subprocesos del servidor.
Siempre puede mostrar información sobre sus propios
subprocesos, o matarlos, pero necesita el privilegio
PROCESS
para ver subprocesos iniciados por
otros usuarios, y el privilegio SUPER
para
matarlos. Consulte Sección 13.5.5.3, “Sintaxis de KILL
”.
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
.
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 opción --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 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.
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 privlegio 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.
Hay algunas cosas que no se pueden hacer con el sistema de privilegios de MySQL:
No se puede especificar explícitamente 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.
É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.