Tabla del sistema de privilegios | Una comprensión completa de la biblioteca del sistema mysql (1)

Anteriormente, presentamos por completo las bibliotecas del sistema performance_schema  , sys e information_schema . A partir de hoy, abriremos la serie "Comprensión completa de la biblioteca del sistema mysql". Esta es también la última biblioteca del sistema en MySQL. " ¿Realmente usas el comando de ayuda de MySQL? "De hecho, la tabla de información de ayuda de la biblioteca del sistema mysql se ha introducido en el artículo. En la siguiente serie de artículos, presentaremos de manera integral la biblioteca del sistema mysql. A continuación, síganos para comenzar el viaje de aprendizaje de la biblioteca del sistema mysql.

La tabla del sistema de autoridad de acceso de MySQL contiene las siguientes tablas:

  • usuario: contiene cuentas de usuario y permisos globales y otras listas sin permisos (columna de opciones de configuración de seguridad y opciones de control de recursos)

  • db: tabla de permisos de nivel de base de datos

  • tables_priv: tabla de privilegios a nivel de tabla

  • columnas_priv: tabla de permisos a nivel de columna

  • procs_priv: procedimiento almacenado y tabla de privilegios de funciones

  • proxies_priv: tabla de privilegios de usuario proxy

PD:

  • Para cambiar el contenido de la tabla de permisos, se recomienda utilizar declaraciones de administración de cuentas (como: CREAR USUARIO, GRANT, REVOKE, etc.) para modificar indirectamente la tabla de permisos. No se recomienda usar declaraciones DML para modificar la tabla de permisos, de lo contrario, será bajo su propio riesgo

  • El siguiente contenido está organizado principalmente para la versión MySQL 5.7

1 、 usuario

Esta tabla proporciona información de autoridad global de consulta. La información de contraseña de la cuenta en esta tabla determina si el usuario puede conectarse durante la fase de autenticación 1 (presentaremos el contenido relacionado con la fase de autenticación en el próximo número). Para la conexión a través de la fase de autenticación de contraseña de cuenta, Si pasa la verificación de permisos en la tabla de usuarios al mismo tiempo, significa que el usuario tiene permisos globales, y la información de permisos registrada en la tabla representa si el usuario tiene los permisos globales correspondientes para todas las bases de datos en la instancia.

  • Nota: Si algún permiso aparece como Y en la tabla de usuarios, se considera que tiene permisos globales, por lo que el usuario puede consultar una lista de todos los nombres de bases de datos cuando usa mostrar bases de datos o usar la tabla de esquemas de information_schema para consultar

El siguiente es el contenido de la información almacenada en la tabla.

root@localhost : mysql 12:51:40> select * from mysql.user limit 1\G;
*************************** 1. row ***************************
              Host: %
              User: qfsys
       Select_priv: Y
       Insert_priv: N
       Update_priv: N
       Delete_priv: N
       Create_priv: N
         Drop_priv: N
       Reload_priv: Y
     Shutdown_priv: Y
      Process_priv: Y
         File_priv: Y
        Grant_priv: N
   References_priv: N
        Index_priv: N
        Alter_priv: N
      Show_db_priv: N
        Super_priv: Y
 Create_tmp_table_priv: N
  Lock_tables_priv: Y
      Execute_priv: N
   Repl_slave_priv: Y
  Repl_client_priv: Y
  Create_view_priv: N
    Show_view_priv: N
   Create_routine_priv: N
Alter_routine_priv: N
  Create_user_priv: N
        Event_priv: N
      Trigger_priv: N
Create_tablespace_priv: N
          ssl_type: 
        ssl_cipher: 
       x509_issuer: 
      x509_subject: 
     max_questions: 0
       max_updates: 0
   max_connections: 0
  max_user_connections: 0
            plugin: mysql_native_password
 authentication_string: *3B3D7D2FD587C29C730F36CD52B4BA8CCF4C744F
  password_expired: N
 password_last_changed: 2017-07-01 14:37:32
 password_lifetime: NULL
    account_locked: N
1 row in set (0.00 sec)

Significado del campo de la tabla:

  • Las dos columnas de host y usuario se denominan oficialmente columnas de alcance. Se puede entender que estos dos campos constituyen el alcance del cliente al que se le permite acceder y el alcance de los recursos de la base de datos a los que el cliente puede acceder (no hay un campo db como la tabla db para limitar el alcance de la biblioteca, Puede entenderse como toda la base de datos de toda la instancia) 
    * host: representa el host desde el que los usuarios pueden acceder a la base de datos, se pueden utilizar comodines y DNS
    * usuario: nombre de usuario

  • Columna de permisos: de Select_priv a Create_tablespace_priv y las columnas intermedias, oficialmente llamadas columna de permisos, cada columna corresponde a un permiso específico, Y representa permiso y N representa ningún permiso

  • Las siguientes son oficialmente llamadas columnas de seguridad, que están relacionadas con la comunicación segura y encriptada entre el cliente y el servidor 
    * ssl_type: Si el usuario está configurado para usar una conexión ssl encriptada, este campo registra el tipo de certificado de encriptación usado por el usuario 
    * ssl_cipher: indica La lista de contraseñas que pueden usarse en el protocolo de enlace de conexión SSL 
    * x509_issuer: campos relacionados con el certificado x509 
    * x509_subject: campos relacionados con el certificado x509 
    * plugin: el nombre del complemento de autenticación de contraseña usado por el usuario 
    * authentication_string: cadena encriptada md5 que representa la contraseña del usuario 
    * password_expired: Indica si la contraseña del usuario ha caducado, Y try significa que la contraseña del usuario caducará, N significa que la contraseña del usuario nunca caducará 
    * password_last_changed: indica la última hora de modificación de la contraseña del usuario, si este campo utiliza el complemento de autenticación MySQL incorporado (mysql_native_password o sha256_password) El campo no está vacío. Si se usa un complemento de autenticación externo, el campo está vacío. Cuando se usa el complemento de autenticación integrado de MySQL, el valor inicial de este campo es CREAR USUARIO, ALTERAR USUARIO, ESTABLECER CONTRASEÑA, GRANT ejecución de la declaración para crear un usuario o modificar Tiempo de 
    contraseña * password_lifetime: Si el campo password_expired es Y, este campo registra el número de días que la contraseña restante del usuario no ha expirado. Suponiendo que el valor de este campo es N, significa que el usuario debe cambiar la contraseña cada N días. Si el usuario no especifica el valor por separado, en su lugar se utiliza el valor de la variable del sistema global default_password_lifetime. Cuando el valor del campo es NULL y la variable del sistema global default_password_lifetime es 0 o el valor del campo es 0, significa que la contraseña del usuario nunca caducará. 
    * account_locked: representa si el estado actual del usuario está bloqueado o activo

  • Las siguientes columnas se denominan oficialmente columnas de control de recursos, que se utilizan para restringir el acceso de los usuarios a los recursos 
    * max_questions: representa el número máximo de consultas simultáneas por hora para todos los usuarios * max_updates: representa el número máximo de 
    actualizaciones simultáneas por hora para todos los usuarios 
    * max_connections: representa todos los usuarios por hora El número máximo de conexiones simultáneas 
    * max_user_connections: representa el número máximo de conexiones simultáneas por hora del usuario en esta fila

2 、 db

Esta tabla proporciona información de autoridad de objetos a nivel de base de datos de consultas. La información de autoridad registrada en esta tabla representa si los usuarios pueden usar estos permisos para acceder a todos los objetos (tablas o procedimientos almacenados) en los que las bases de datos

El siguiente es el contenido de la información almacenada en la tabla.

root@localhost : mysql 12:53:28> select * from db limit 1\G;
*************************** 1. row ***************************
             Host: localhost
               Db: performance_schema
             User: mysql.session
      Select_priv: Y
      Insert_priv: N
      Update_priv: N
      Delete_priv: N
      Create_priv: N
        Drop_priv: N
       Grant_priv: N
  References_priv: N
       Index_priv: N
       Alter_priv: N
Create_tmp_table_priv: N
 Lock_tables_priv: N
 Create_view_priv: N
   Show_view_priv: N
  Create_routine_priv: N
   Alter_routine_priv: N
     Execute_priv: N
       Event_priv: N
     Trigger_priv: N
1 row in set (0.00 sec)

Significado del campo de la tabla:

  • Las tres columnas de host, db y user se denominan oficialmente columnas de rango. Se puede entender que estos dos campos constituyen el rango de clientes a los que se les permite acceder y el rango de recursos de la base de datos a los que pueden acceder los clientes. 
    * Host: tiene el mismo significado que el campo host de la tabla de usuarios 
    * db: representa a qué rango de nivel de biblioteca pertenece el registro de permisos de 
    usuario * usuario: tiene el mismo significado que el campo de usuario de la tabla de usuarios

  • xxx_priv: Tiene el mismo significado que el campo xxx_priv de la tabla de usuarios. Cada campo corresponde al permiso correspondiente. Y representa permiso y N representa ningún permiso. 
    * En comparación con la tabla de usuarios, Reload_priv, Shutdown_priv, Process_priv, File_priv, Show_db_priv, Super_priv, Repl_slave_priv, Repl_client_priv, Create_user_priv, Create_tablespace_priv y otros campos, lo que significa que los permisos correspondientes a estos campos son de alcance global y no distinguen entre niveles de tabla de biblioteca

3 、 tables_priv

Esta tabla proporciona información de permisos a nivel de tabla de consulta, similar a la tabla db, pero con más granularidad. La información de permisos registrada en la tabla tables_priv representa si el usuario puede usar estos permisos para acceder a todas las columnas de una tabla

El siguiente es el contenido de la información almacenada en la tabla.

root@localhost : mysql 12:54:14> select * from tables_priv;
+-----------+--------+---------------+------------+----------------+---------------------+----------------------------------------------------------------------------------------------+----------------------+
| Host      | Db     | User          | Table_name | Grantor        | Timestamp           | Table_priv                                                                                   | Column_priv          |
+-----------+--------+---------------+------------+----------------+---------------------+----------------------------------------------------------------------------------------------+----------------------+
| localhost | sys    | mysql.sys     | sys_config | root@localhost | 2017-07-01 14:31:32 | Select                                                                                       |                      |
| localhost | mysql  | mysql.session | user       | root@localhost | 2017-12-11 23:41:19 | Select                                                                                       |                      |
| %         | sbtest | xx            | sbtest1    | root@localhost | 0000-00-00 00:00:00 |                                                                                              | Select,Insert,Update |
| %         | sbtest | test_table    | sbtest1    | root@localhost | 0000-00-00 00:00:00 | Select,Insert,Update,Delete,Create,Drop,References,Index,Alter,Create View,Show view,Trigger |                      |
+-----------+--------+---------------+------------+----------------+---------------------+----------------------------------------------------------------------------------------------+----------------------+
4 rows in set (0.00 sec)

Significado del campo de la tabla:

  • Las cuatro columnas de host, db, user y Table_name se denominan oficialmente columnas de rango. Se puede entender que estos dos campos constituyen el rango de clientes a los que se les permite acceder y el rango de recursos de objetos de tabla a los que pueden acceder los clientes.

  • Table_priv y Column_priv se denominan oficialmente columnas de permisos, que corresponden a los permisos de nivel de tabla y los permisos de nivel de columna. Debe tenerse en cuenta que estas dos columnas de permisos son diferentes de las tablas de usuario y db. Estas dos columnas son tipos de conjuntos y registran el nivel de tabla y el nivel de columna. Una colección de permisos en lugar de corresponder a un permiso específico. Table_priv corresponde al nivel de tabla 'Seleccionar', 'Insertar', 'Actualizar', 'Eliminar', 'Crear', 'Soltar', 'Otorgar', 'Referencias', 'Índice', 'Modificar', 'Crear vista' , 'Mostrar vista', permiso de 'Activador', Column_priv corresponde al permiso de nivel de columna 'Seleccionar', 'Insertar', 'Actualizar', 'Referencias'

  • Otros campos: 
    * Otorgante: en nombre de quién otorgó los permisos de usuario registrados en la tabla, es decir, el valor de usuario devuelto por la función current_user (formulario de cuenta) cuando se otorgan los permisos de usuario en la tabla 
    * Marca de tiempo: Representa la cuenta otorgada por Otorgante Marca de tiempo del permiso

 

4 、 columnas_priv

Esta tabla proporciona información de permisos a nivel de columna de consulta, similar a la tabla db, pero con más granularidad. La información de permisos registrada en la tabla columnas_priv representa que los usuarios pueden usar estos permisos para acceder a las columnas especificadas de una tabla.

El siguiente es el contenido de la información almacenada en la tabla.

root@localhost : mysql 12:55:13> select * from columns_priv;
+------+--------+------+------------+-------------+---------------------+----------------------+
| Host | Db     | User | Table_name | Column_name | Timestamp           | Column_priv          |
+------+--------+------+------------+-------------+---------------------+----------------------+
| %    | sbtest | xx   | sbtest1    | id          | 0000-00-00 00:00:00 | Select,Insert,Update |
+------+--------+------+------------+-------------+---------------------+----------------------+
1 row in set (0.00 sec)

Significado del campo de la tabla:

  • Las cinco columnas de host, db, user, Table_name y Column_name se denominan oficialmente columnas de rango. Se puede entender que estos dos campos constituyen el rango de clientes permitidos y el rango de recursos de objetos de columna a los que los clientes pueden acceder.

  • Column_priv se denomina oficialmente columna de permisos, que tiene el mismo significado que la columna Column_priv en la tabla tables_priv. También es una colección, que corresponde a los permisos de nivel de columna 'Seleccionar', 'Insertar', 'Actualizar' y 'Referencias'

  • Otros campos 
    * Marca de tiempo: tiene el mismo significado que la columna Marca de tiempo en la tabla tables_priv

5 、 procs_priv

Esta tabla proporciona información de permisos para consultar procedimientos almacenados. La información de permisos registrada en la tabla representa si los usuarios pueden usar estos permisos para acceder a los procedimientos almacenados especificados (procedimientos y funciones almacenados)

Significado del campo de la tabla:

  • Las cinco columnas de host, db, user, Routine_name y Routine_type se denominan oficialmente columnas de rango. Se puede entender que estos dos campos constituyen el alcance del cliente al que se permite acceder y los recursos del objeto de almacenamiento a los que puede acceder el cliente.

  • Proc_priv se denomina oficialmente columna de permisos. Esta columna de permisos también es un tipo de colección, que representa los permisos 'Ejecutar', 'Alterar rutina' y 'Otorgar' del procedimiento almacenado

  • Otras columnas: 
    * Marca de tiempo: el mismo significado que el campo Marca de tiempo en la tabla tables_priv
    * Otorgante  : el mismo significado que el campo Otorgante en la tabla tables_priv

PD: Los datos de permisos de la tabla están vacíos y no se ha encontrado ningún método para llenar la tabla con datos.

6 、 proxies_priv

Esta tabla proporciona información de autoridad de usuario de proxy de consulta. La información de autoridad registrada en esta tabla representa qué usuarios puede actuar el usuario como agente y si el usuario puede otorgar la autoridad de PROXY a otros usuarios

  • Si un usuario necesita otorgar su permiso PROXY a otras cuentas, entonces debe tener una fila de información de permiso en la tabla y el campo With_grant debe ser 1.

El siguiente es el contenido de la información almacenada en la tabla.

root@localhost : mysql 12:58:16> select * from proxies_priv;
+-----------+------+--------------+--------------+------------+----------------------+---------------------+
| Host      | User | Proxied_host | Proxied_user | With_grant | Grantor              | Timestamp           |
+-----------+------+--------------+--------------+------------+----------------------+---------------------+
| localhost | root |              |              |          1 | boot@connecting host | 0000-00-00 00:00:00 |
+-----------+------+--------------+--------------+------------+----------------------+---------------------+
1 row in set (0.00 sec)

Significado del campo de la tabla:

  • Los campos de host y usuario tienen el mismo significado que otras tablas de permisos anteriores

  • Proxied_host y Proxied_user representan la cuenta a la que se le otorgan permisos de proxy (cadenas de usuario y host correspondientes)

  • Otras columnas tienen el mismo significado que tables_priv

Nota: Algunos campos de la tabla de permisos tienen restricciones de almacenamiento de longitud, como se indica a continuación:

  • Host, Proxied_host: 60 caracteres de longitud

  • Usuario, Proxied_user: la longitud está limitada a 32 caracteres

  • Contraseña: 41 caracteres de longitud

  • Db: la longitud está limitada a 64 caracteres

  • Table_name: la longitud está limitada a 64 caracteres

  • Column_name: la longitud está limitada a 64 caracteres

  • Routine_name: la longitud está limitada a 64 caracteres

El contenido de este número se presenta aquí, y el enlace de referencia para el contenido de este número es el siguiente:

  • https://dev.mysql.com/doc/refman/5.7/en/grant-tables.html

| Sobre el autor

Luo Xiaobo · Experto en tecnología de base de datos ScaleFlux

Uno de los autores de "A Thousand Golden Recipes-MySQL Performance Optimization Pyramid Rule", "Data Ecology: MySQL Replication Technology and Production Practice".

Familiarizado con la arquitectura MySQL, bueno en el ajuste general de bases de datos, me gusta especializarse en tecnología de código abierto y interesado en la promoción de la tecnología de código abierto, ha compartido muchos temas de bases de datos públicas en línea y fuera de línea, y ha publicado casi 100 artículos de investigación relacionados con bases de datos.

Se acabó el texto completo.

Disfruta MySQL :)

La clase "MySQL Core Optimization" de Teacher Ye se ha actualizado a MySQL 8.0, escanee el código para comenzar el viaje de la práctica de MySQL 8.0

Supongo que te gusta

Origin blog.csdn.net/n88Lpo/article/details/110507410
Recomendado
Clasificación