Modelo de privilegios basado en roles de RDS para MySQL - Amazon Relational Database Service

Modelo de privilegios basado en roles de RDS para MySQL

A partir de RDS para MySQL versión 8.0.36, no se pueden modificar las tablas de base de datos de mysql directamente. En concreto, no puede crear usuarios de bases de datos realizando operaciones de lenguaje de manipulación de datos (DML) en las tablas grant. En su lugar, se utilizan instrucciones de administración de cuentas de MySQL como CREATE USER, GRANT y REVOKE para conceder privilegios basados en roles a los usuarios. Tampoco puede crear otros tipos de objetos, como procedimientos almacenados en la base de datos mysql. Aún puede consultar las tablas de mysql. Si utiliza la replicación de registros binarios, los cambios realizados directamente en las tablas mysql de la instancia de base de datos de origen no se replican en el clúster de destino.

En algunos casos, la aplicación puede utilizar accesos directos para crear usuarios u otros objetos insertándolos en las tablas de mysql. Si es así, cambie el código de la aplicación para utilizar las declaraciones correspondientes, como CREATE USER.

Para exportar metadatos para usuarios de bases de datos durante la migración desde una base de datos MySQL externa, utilice uno de los siguientes métodos:

  • Utilice la utilidad de volcado de instancias del intérprete de comandos de MySQL con un filtro para excluir usuarios, roles y concesiones. En el siguiente ejemplo, se muestra la sintaxis de comandos que se utilizarán. Asegúrese de que outputUrl esté vacío.

    mysqlsh user@host -- util.dumpInstance(outputUrl,{excludeSchemas:['mysql'],users: true})

    Para obtener más información, consulte Instance Dump Utility, Schema Dump Utility, and Table Dump Utility en el Manual de referencia de MySQL.

  • Utilice la utilidad de cliente de mysqlpump. Este ejemplo incluye todas las tablas, excepto las tablas de la base de datos del sistema mysql. También incluye las instrucciones CREATE USER y GRANT para reproducir todos los usuarios de MySQL de la base de datos migrada.

    mysqlpump --exclude-databases=mysql --users

    La utilidad de cliente mysqlpump ya no está disponible con MySQL 8.4. En su lugar, utilice mysqldump.

Para simplificar la administración de permisos para muchos usuarios o aplicaciones, puede utilizar la instrucción CREATE ROLE para crear un rol que tenga un conjunto de permisos. A continuación, puede utilizar las instrucciones GRANT y SET ROLE y la función current_role para asignar roles a usuarios o aplicaciones, cambiar el rol actual y verificar qué roles están en vigor. Para obtener más información sobre el sistema de permisos basado en roles de MySQL 8.0, consulte Uso de roles en el Manual de referencia de MySQL.

importante

Le recomendamos encarecidamente que no utilice el usuario maestro directamente en sus aplicaciones. En lugar de ello, es mejor ceñirse a la práctica recomendada de utilizar un usuario de base de datos creado con los privilegios mínimos necesarios para su aplicación.

A partir de la versión 8.0.36, RDS para MySQ incluye un rol especial que tiene todos los siguientes privilegios. El rol se denomina rds_superuser_role. El usuario administrativo principal de cada instancia de base de datos ya tiene asignado este rol. El rol rds_superuser_role incluye los siguientes privilegios para todos los objetos de base de datos:

  • ALTER

  • APPLICATION_PASSWORD_ADMIN

  • ALTER ROUTINE

  • CREATE

  • CREATE ROLE

  • CREATE ROUTINE

  • CREATE TEMPORARY TABLES

  • CREATE USER

  • CREATE VIEW

  • DELETE

  • DROP

  • DROP ROLE

  • EVENT

  • EXECUTE

  • INDEX

  • INSERT

  • LOCK TABLES

  • PROCESS

  • REFERENCES

  • RELOAD

  • REPLICATION CLIENT

  • REPLICATION SLAVE

  • ROLE_ADMIN

  • SET_USER_ID

  • SELECT

  • SHOW DATABASES

  • SHOW VIEW

  • TRIGGER

  • UPDATE

  • XA_RECOVER_ADMIN

La definición de rol también incluye WITH GRANT OPTION para que un usuario administrativo pueda conceder ese rol a otros usuarios. En particular, el administrador debe conceder los privilegios necesarios para realizar la replicación de registros binarios con el clúster de MySQL como destino.

sugerencia

Para ver todos los detalles de los permisos, utilice la siguiente instrucción.

SHOW GRANTS FOR rds_superuser_role@'%';

Cuando concede acceso mediante roles en RDS para MySQL versión 8.0.36 y posteriores, también activa el rol mediante la instrucción SET ROLE role_name o SET ROLE ALL. El siguiente ejemplo muestra cómo. Sustituya el nombre de rol apropiado por CUSTOM_ROLE.

# Grant role to user mysql> GRANT CUSTOM_ROLE TO 'user'@'domain-or-ip-address' # Check the current roles for your user. In this case, the CUSTOM_ROLE role has not been activated. # Only the rds_superuser_role is currently in effect. mysql> SELECT CURRENT_ROLE(); +--------------------------+ | CURRENT_ROLE() | +--------------------------+ | `rds_superuser_role`@`%` | +--------------------------+ 1 row in set (0.00 sec) # Activate all roles associated with this user using SET ROLE. # You can activate specific roles or all roles. # In this case, the user only has 2 roles, so we specify ALL. mysql> SET ROLE ALL; Query OK, 0 rows affected (0.00 sec) # Verify role is now active mysql> SELECT CURRENT_ROLE(); +--------------------------------------------------+ | CURRENT_ROLE() | +--------------------------------------------------+ | `CUSTOM_ROLE`@`%`,`rds_superuser_role`@`%` | +--------------------------------------------------+