viernes, 4 de abril de 2014

Privilegios de los que provee MySQL




La información sobre los privilegios de las cuentas está almacenada en las tablas userdbhosttables_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.
PrivilegioColumnaContexto
CREATECreate_privbases de datos, tablas, o índices
DROPDrop_privbases de datos o tablas
GRANT OPTIONGrant_privbases de datos, tablas, o procedimientos almacenados
REFERENCESReferences_privbases de datos o tables
ALTERAlter_privtablas
DELETEDelete_privtablas
INDEXIndex_privtablas
INSERTInsert_privtablas
SELECTSelect_privtablas
UPDATEUpdate_privtablas
CREATE VIEWCreate_view_privvistas
SHOW VIEWShow_view_privvistas
ALTER ROUTINEAlter_routine_privprocedimientos almacenados
CREATE ROUTINECreate_routine_privprocedimientos almacenados
EXECUTEExecute_privprocedimientos almacenados
FILEFile_privacceso a archivos en la máquina del servidor
CREATE TEMPORARY TABLESCreate_tmp_table_privadministración del servidor
LOCK TABLESLock_tables_privadministración del servidor
CREATE USERCreate_user_privadministración del servidor
PROCESSProcess_privadministración del servidor
RELOADReload_privadministración del servidor
REPLICATION CLIENTRepl_client_privadministración del servidor
REPLICATION SLAVERepl_slave_privadministración del servidor
SHOW DATABASESShow_db_privadministración del servidor
SHUTDOWNShutdown_privadministración del servidor
SUPERSuper_privadministración del servidor
CREATE VIEW y SHOW VIEW fueron añadidos en MySQL 5.0.1. CREATE USERCREATE 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 SELECTINSERTUPDATE, 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.
PrivilegioComandos permitidos a los poseedores del privilegio Holders
RELOADflush-hostsflush-logsflush-privilegesflush-statusflush-tables,flush-threadsrefreshreload
SHUTDOWNshutdown
PROCESSprocesslist
SUPERkill
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 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 columnaPassword 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.
Fuente:enlace

No hay comentarios:

Publicar un comentario

Entradas populares