Al crear una cuenta en la consola de ApsaraDB RDS, puede otorgarle permisos sobre bases de datos completas. Para restringir una cuenta a tablas, vistas o campos específicos, ejecute sentencias SQL directamente contra la instancia y aplique así una autorización detallada.
Requisitos previos
Antes de empezar, asegúrese de contar con:
Una cuenta con privilegios. Para obtener instrucciones, consulte Create an account.
Funcionamiento
La autorización detallada en MySQL utiliza privilegios por niveles. Cada nivel es independiente, por lo que una autorización completa generalmente requiere varias sentencias GRANT.
|
Nivel |
Sintaxis |
Tipos de privilegios compatibles |
|
Global |
|
|
|
Tabla |
|
|
|
Vista |
|
Solo |
|
Columna |
|
|
Las cuentas creadas mediante este procedimiento no pueden ver sus bases de datos autorizadas en la consola de ApsaraDB RDS. Para habilitar la visibilidad de una base de datos en la consola, utilice un nombre de tabla comodín ( * ) en lugar de un nombre de tabla específico al otorgar permisos de tabla.
Otorgar permisos de tabla
Utilice una cuenta con privilegios para connect to the RDS instance y luego ejecute las siguientes sentencias SQL.
Paso 1: Crear una cuenta.
CREATE USER `<username>`@`%` IDENTIFIED BY '<password>';
Paso 2: Otorgar permisos globales.
GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '<username>'@'%';
Paso 3: Otorgar permisos completos sobre una tabla específica.
GRANT ALL PRIVILEGES ON `<database>`.`<table>` TO '<username>'@'%';
Reemplace<table>por*para otorgar acceso a todas las tablas de la base de datos. Esto también permite que la cuenta vea la base de datos en la consola de ApsaraDB RDS.
Paso 4: Otorgar permisos de solo lectura sobre las tablas del sistema mysql de uso común.
GRANT SELECT ON `mysql`.`help_topic` TO '<username>'@'%';
GRANT SELECT ON `mysql`.`func` TO '<username>'@'%';
GRANT SELECT ON `mysql`.`time_zone` TO '<username>'@'%';
GRANT SELECT ON `mysql`.`slow_log` TO '<username>'@'%';
GRANT SELECT ON `mysql`.`proc` TO '<username>'@'%';
GRANT SELECT ON `mysql`.`general_log` TO '<username>'@'%';
-- Grant permissions on other system tables based on your requirements.
Ejemplos
Autorizar una cuenta para gestionar una tabla
Cree la cuenta test01 con acceso completo a la tabla test100 en la base de datos rds001.
CREATE USER `test01`@`%` IDENTIFIED BY 'passwd';
GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test01'@'%';
GRANT ALL PRIVILEGES ON `rds001`.`test100` TO 'test01'@'%';
GRANT SELECT ON `mysql`.`help_topic` TO 'test01'@'%';
GRANT SELECT ON `mysql`.`func` TO 'test01'@'%';
Autorizar una cuenta para gestionar varias tablas
Cree la cuenta test02 con acceso completo a las tablas test100, test200 y test300 en la base de datos rds001.
CREATE USER `test02`@`%` IDENTIFIED BY 'passwd';
GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test02'@'%';
GRANT ALL PRIVILEGES ON `rds001`.`test100` TO 'test02'@'%';
GRANT ALL PRIVILEGES ON `rds001`.`test200` TO 'test02'@'%';
GRANT ALL PRIVILEGES ON `rds001`.`test300` TO 'test02'@'%';
GRANT SELECT ON `mysql`.`help_topic` TO 'test02'@'%';
GRANT SELECT ON `mysql`.`func` TO 'test02'@'%';
Otorgar permisos de vista
SELECT es el único tipo de privilegio que se puede otorgar a nivel de vista.
GRANT SELECT ON <database>.<view> TO <username>;
Ejemplos
Autorizar una cuenta para consultar una vista
GRANT SELECT ON rds001.view_test1 TO test01;
Autorizar una cuenta para consultar varias vistas
GRANT SELECT ON rds001.view_test1 TO test01;
GRANT SELECT ON rds001.view_test2 TO test01;
Otorgar permisos de campo
Los permisos a nivel de columna restringen el acceso a campos específicos dentro de una tabla. Cada tipo de privilegio debe ir seguido del nombre de la columna entre paréntesis.
GRANT UPDATE (<field>) ON TABLE <table> TO <username>; -- Authorize updates to a field.
GRANT SELECT (<field>) ON TABLE <table> TO <username>; -- Authorize queries on a field.
Ejemplos
Autorizar una cuenta para actualizar un campo
GRANT UPDATE (testid) ON TABLE testtable TO test01;
Autorizar una cuenta para actualizar varios campos
GRANT UPDATE (test_id) ON TABLE testtable TO test01;
GRANT UPDATE (test_name) ON TABLE testtable TO test01;
Alternativa: usar Data Management (DMS)
Ejecute las mismas sentencias SQL en Data Management (DMS) en lugar de utilizar un cliente o la CLI.
Preguntas frecuentes
Recibo el error "Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation" al ejecutar las sentencias SQL. ¿Qué debo hacer?
La cuenta que utilizó carece del privilegio CREATE USER. Utilice la cuenta con privilegios para ejecutar las sentencias, u otorgue primero el privilegio a su cuenta actual:
GRANT CREATE USER ON *.* TO 'your_user'@'host';
FLUSH PRIVILEGES;