GNU/Linux >> Tutoriales Linux >  >> Linux

Comprender los privilegios de MySQL

La función principal del sistema de autorización de MySQL es asociar un usuario autenticado con privilegios en una base de datos, como SELECCIONAR, INSERTAR, ACTUALIZAR y ELIMINAR. La funcionalidad del sistema de autorización incluye la capacidad de tener usuarios anónimos y habilitar funciones específicas como CARGAR DATOS EN ARCHIVO y varias operaciones administrativas. Esta autorización garantiza que los usuarios solo puedan realizar las operaciones para las que se les hayan otorgado los privilegios apropiados.

Determinación de los privilegios de usuario apropiados

Puede otorgar varios tipos de privilegios a una cuenta de MySQL en diferentes niveles:globalmente o para bases de datos, tablas o columnas particulares. Por ejemplo, puede dar a un usuario la capacidad de seleccionar de cualquier tabla en cualquier base de datos concediéndole el privilegio SELECT a nivel global.

Puede dar a una cuenta control total sobre una base de datos específica sin tener ningún permiso en otras bases de datos. Luego, la cuenta puede crear la base de datos, crear tablas y otros objetos de la base de datos, seleccionar de las tablas y agregar, eliminar o actualizar nuevos registros.

Concesión de privilegios administrativos

Los siguientes privilegios globales se aplican a los usuarios administrativos:

  • ARCHIVO :permite a los usuarios indicar al servidor MySQL que lea y escriba archivos en el sistema de archivos del host del servidor.
  • PROCESO :permite a los usuarios usar la declaración SHOW PROCESSLIST para ver todas las declaraciones que están ejecutando los clientes.
  • SÚPER :permite a los usuarios eliminar otras conexiones de clientes o cambiar la configuración de tiempo de ejecución del servidor.
  • TODOS :Otorga todos los privilegios excepto la capacidad de otorgar privilegios a otros usuarios.

El SÚPER El privilegio administrativo brinda a los usuarios la capacidad de realizar tareas adicionales, incluida la configuración de variables globales y la terminación de conexiones de clientes. También hay algunos especificadores de privilegios especiales:

– Use TODOS y TODOS LOS PRIVILEGIOS para otorgar todos los privilegios excepto la capacidad de otorgar privilegios a otras cuentas. Use CONCEDER TODOS... CON LA OPCIÓN DE CONCEDER para otorgar todos los privilegios, incluida la capacidad de otorgar privilegios a otras cuentas.
– Use USO para otorgar la capacidad de conectarse al servidor. Este privilegio crea un registro en la tabla de usuarios para la cuenta, pero sin privilegios. Luego, la cuenta se puede usar para acceder al servidor con fines limitados, como emitir declaraciones SHOW VARIABLES o SHOW STATUS. La cuenta no se puede usar para acceder al contenido de la base de datos, como tablas, aunque dichos privilegios se pueden otorgar en un momento posterior.

Otros privilegios administrativos incluyen CREAR USUARIO , CREAR TABLAS TEMPORALES , MOSTRAR BASES DE DATOS , BLOQUEAR TABLAS , RECARGAR y APAGAR . Los privilegios administrativos, incluidos los de la diapositiva, se pueden usar para comprometer la seguridad, acceder a datos privilegiados o realizar ataques de denegación de servicio en un servidor. Otorgue privilegios administrativos con moderación, ya que los usuarios maliciosos o descuidados pueden abusar de ellos.

Declaración GRANT

La declaración GRANT crea una nueva cuenta o modifica una cuenta existente.

GRANT sintaxis:

 GRANT SELECT ON world_innodb.* TO 'kari'@'localhost' IDENTIFIED BY 'Abc123';

En la sintaxis/ejemplo anterior, la declaración otorga el privilegio SELECT para todas las tablas en la base de datos world_innodb a un usuario llamado kari, quien debe conectarse desde el host local y usar una contraseña de Abc123.

Cláusulas de la declaración:
1. Privilegios a otorgar
2. Nivel de privilegio:

  • Global:*.*
  • Base de datos:[db_name].*
  • Tabla:[nombre_bd].[nombre_tabla]
  • Rutina almacenada:[db_name].[routine_name]

3. Cuenta a la que le está otorgando el privilegio.
4. Una contraseña opcional.

Las cláusulas de la instrucción GRANT tienen los siguientes efectos:

  • CONCESIÓN palabra clave:especifica uno o más nombres de privilegios que indican qué privilegios está otorgando. Los nombres de privilegios no distinguen entre mayúsculas y minúsculas. Para enumerar varios privilegios, sepárelos con comas.
  • ENCENDIDO cláusula:especifica el nivel de los privilegios que está otorgando.
  • PARA Cláusula:especifica la cuenta a la que se otorgan los privilegios. Si la cuenta aún no existe, la declaración la crea.
  • IDENTIFICADO POR cláusula:(Opcional) Asigna la contraseña especificada a la cuenta. Si la cuenta ya existe, la contraseña reemplaza a la anterior.

Omitir la cláusula IDENTIFIED BY tiene el siguiente efecto:

  • Si la cuenta en la cláusula TO existe, su contraseña permanece sin cambios.
  • Si la cuenta en la cláusula TO no existe, se crea con una contraseña en blanco.

Como medida de seguridad, habilite el NO_AUTO_CREATE_USER Modo SQL para evitar que la declaración GRANT cree nuevas cuentas cuando no especifica una cláusula IDENTIFIED BY.

Mostrar privilegios GRANT

SHOW GRANTS muestra las declaraciones que recrean los privilegios para el usuario especificado. Muestra privilegios solo para la cuenta exacta especificada en la declaración. El siguiente ejemplo muestra privilegios solo para [email protected], no para kari@%.

 SHOW GRANTS;
SHOW GRANTS FOR CURRENT_USER();

También puede especificar un nombre de cuenta para mostrar subvenciones para:

 mysql>SHOW GRANTS FOR
'kari'@'myhost.example.com'; 
+----------------------------------------------------------------+ 
| Grants for [email protected]                             | 
+----------------------------------------------------------------+ 
| GRANT FILE ON *.* TO 'kari'@'myhost.example.com'               | 
| GRANT SELECT ON `world_innodb`.* TO 'kari'@'myhost.example.com‘| 
| IDENTIFIED BY PASSWORD                                         | 
| '*E74858DB86EBA20BC33D0AECAE8A8108C56B17FA'                    | 
+----------------------------------------------------------------+

El resultado que se muestra arriba consta de dos sentencias GRANT. Sus cláusulas ON muestran privilegios a nivel global y de base de datos, respectivamente. Si la cuenta tiene una contraseña, SHOW GRANTS muestra una cláusula IDENTIFIED BY PASSWORD al final de la instrucción GRANT; esta cláusula enumera los privilegios globales de la cuenta. La palabra CONTRASEÑA después de IDENTIFICADO POR indica que el valor de la contraseña que se muestra es el valor cifrado almacenado en la tabla de usuarios, no la contraseña real. Debido a que la contraseña se almacena mediante cifrado unidireccional, MySQL no tiene forma de mostrar la contraseña sin cifrar.

Si la cuenta puede otorgar algunos o todos sus privilegios a otras cuentas, la salida muestra CON OPCIÓN DE CONCESIÓN al final de cada declaración de CONCESIÓN a la que se aplica.

Restricciones de privilegios de usuario

No puede denegar explícitamente el acceso a un usuario específico. No puede asociar una contraseña con un objeto específico, como una base de datos, una tabla o una rutina.

Tablas de subvenciones

El servidor MySQL lee las tablas de concesión de la base de datos mysql en la memoria al inicio y basa todas las decisiones de control de acceso en esas tablas. Las tablas corresponden a niveles de privilegio:

Nivel de privilegio/ Tabla Contenidos y Privilegios
usuario Contiene un registro para cada cuenta conocida por el servidor
bd Privilegios específicos de la base de datos
tablas_priv Privilegios específicos de tabla
columnas_priv Privilegios específicos de columna
procs_priv Privilegios de funciones y procedimientos almacenados

El usuario La tabla contiene un registro para cada cuenta conocida por el servidor, así como sus privilegios globales. También indica otra información sobre la cuenta, como:

  • Cualquier límite de recursos al que esté sujeto
  • Si las conexiones de clientes que utilizan la cuenta deben realizarse a través de una conexión segura mediante SSL

Cada cuenta debe tener un registro de tabla de usuario; el servidor determina si acepta o rechaza cada intento de conexión leyendo el contenido de esa tabla. Cada cuenta también tiene registros en las otras tablas de concesión si tiene privilegios en un nivel diferente al global.

Uso de tablas de concesión

El servidor determina si un cliente puede conectarse en función de las columnas Host, Usuario y Contraseña de la tabla de usuarios. Para conectarse con éxito, MySQL debe hacer coincidir un registro en la tabla de usuarios con el host desde el que se conecta el cliente, el nombre de usuario proporcionado por el cliente y la contraseña que figura en el registro coincidente.

Después de que un cliente se conecta, MySQL verifica los privilegios de acceso para cada declaración haciendo coincidir la identidad de la cuenta con las columnas Host y User de las tablas de privilegios.

  • Los privilegios en cada fila de la tabla de usuarios se aplican globalmente a la cuenta identificada por sus columnas Anfitrión y Usuario.
  • Los privilegios en los registros coincidentes de las tablas db, tables_priv, column_priv y procs_priv se aplican al nivel identificado por el nombre de la tabla de privilegios específica.

Por ejemplo, los privilegios en un registro de tabla db se aplican a la base de datos nombrada en el registro, pero no a otras bases de datos. El proceso de instalación de MySQL crea las tablas de concesión.

  • Las tablas de concesión utilizan el motor de almacenamiento MyISAM.
  • Se garantiza que MyISAM estará disponible.

Efectuar cambios de privilegios

El servidor lee las tablas de concesión en la memoria durante su secuencia de inicio y utiliza las copias en memoria para verificar el acceso del cliente. El servidor actualiza sus copias en memoria de las tablas de concesión bajo las siguientes condiciones:

  • Usted modifica una cuenta de usuario emitiendo una declaración de administración de cuenta como CREAR USUARIO, OTORGAR, REVOCAR o ESTABLECER CONTRASEÑA.
  • Recarga las tablas explícitamente emitiendo una instrucción FLUSH PRIVILEGES o ejecutando un comando mysqladmin flush-privileges o mysqladmin reload.

Evite realizar cambios directamente en las tablas de concesión por los siguientes motivos:

  • La sintaxis de los extractos de administración de cuentas está diseñada para ser clara y sencilla.
  • Si comete un error en un extracto de administración de cuenta, el extracto falla y no cambia ninguna configuración.
  • Si comete un error al cambiar las tablas de concesión directamente, puede bloquear a todos los usuarios fuera del sistema.

Cuándo se aplican los cambios

  • Los cambios en los privilegios globales y las contraseñas se aplican solo a las conexiones posteriores de esa cuenta.
  • Los cambios en los privilegios a nivel de la base de datos se aplican después de la siguiente instrucción USE db_name del cliente.
  • Los cambios en los privilegios de tabla y rutina se aplican de inmediato.

Revocación de privilegios de cuenta

Use la instrucción REVOKE para revocar privilegios de instrucción SQL específicos:

REVOKE DELETE, INSERT, UPDATE ON world_innodb.* FROM 'Amon'@'localhost';

Utilice la instrucción REVOKE para revocar los privilegios de una cuenta. Puede optar por revocar los privilegios por varios motivos, como una reducción en el acceso requerido de un usuario. La sintaxis de la declaración REVOKE tiene las siguientes cláusulas:

  • REVOCAR palabra clave:especifica la lista de privilegios que se revocarán.
  • ENCENDIDO cláusula:indica el nivel en el que se revocarán los privilegios.
  • DESDE cláusula:especifica el nombre de la cuenta.

En el ejemplo que se muestra arriba, suponga que Amon tiene privilegios SELECCIONAR, ELIMINAR, INSERTAR y ACTUALIZAR en la base de datos world_innodb, pero desea cambiar la cuenta para que solo tenga acceso SELECCIONAR. El primer ejemplo revoca los privilegios que le permiten realizar cambios.

Para revocar el privilegio de otorgar privilegios a otros usuarios:

REVOKE GRANT OPTION ON world_innodb.* FROM 'Jan'@'localhost';

El ejemplo anterior revoca la capacidad de Jan de otorgar a otros usuarios cualquier privilegio que tenga para la base de datos world_innodb, al revocar el privilegio GRANT OPTION de su cuenta.

Para revocar todos los privilegios, incluido el otorgamiento de privilegios a otros:

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'Sasha'@'localhost';

El ejemplo anterior revoca todos los privilegios de la cuenta de Sasha (en cualquier nivel), al revocar TODOS LOS PRIVILEGIOS y GRANT OPTION de su cuenta.

Nota :Use la instrucción SHOW GRANTS antes de emitir REVOKE para determinar qué privilegios revocar y luego nuevamente para confirmar el resultado.


Linux
  1. Instalar MariaDB o MySQL en Linux

  2. Cómo agregar un nuevo usuario de MySQL y otorgar privilegios de acceso

  3. Comprender YAML para Ansible

  4. Programador de eventos MySQL

  5. Copia de seguridad MySQL 1.1

Cómo quitar o eliminar una cuenta de usuario de MySQL

Comprender los permisos de archivos de Linux

Cómo verificar los privilegios de usuario de MySQL en Linux

Comprender los procesos en Linux

¿Cómo establecer privilegios limitados para una cuenta de revendedor en WHM?

¿Qué es MySQL vs MariaDB vs Percona?