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 enSecció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 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 máquina del servidor utilizando las sentenciasLOAD 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 demysqladmin 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-xxx
realizan funciones similares a 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 sentenciasCREATE 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 sentenciaSELECT
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 privilegioGRANT
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 columnaPassword
de la tablauser
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.
Fuente:enlace
No hay comentarios:
Publicar un comentario