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
FILEpuede 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 sentenciaSELECTpara transferir sus contenidos a la máquina cliente. - El privilegio
GRANTpermite a los usuarios otorgar sus mismos privilegios a otros usuarios. Dos usuarios con diferentes privilegios y con el privilegioGRANTpueden combinar sus privilegios. - El privilegio
ALTERpuede ser utilizado inadecuadamente para sabotear el sistema de privilegios mediante el renombrado de tablas. - El privilegio
SHUTDOWNpuede utilizarse inadecuadamente para denegar el servicio a otros usuarios de manera total, cerrando el servidor. - El privilegio
PROCESSpuede utilizarse para ver el texto de las consultas que se estén ejecutando actualmente, incluyendo consultas que establecen o modifican passwords. - El privilegio
SUPERpuede utilizarse para cerrar la conexión a otros clientes o cambiar como el servidor funciona. - Los privilegios otorgados para la propia base de datos
mysqlpueden 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 columnaPasswordde la tablauserpuede 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