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 sistemamysql
. También incluye las instruccionesCREATE USER
yGRANT
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, utilicemysqldump
.
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
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
o role_name
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 activemysql>
SELECT CURRENT_ROLE();+--------------------------------------------------+ | CURRENT_ROLE() | +--------------------------------------------------+ | `CUSTOM_ROLE`@`%`,`rds_superuser_role`@`%` | +--------------------------------------------------+