Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Privilegio basato sui ruoli per RDS per MySQL
A partire da RDS per MySQL versione 8.0.36, non è più possibile modificare le tabelle direttamente nel database mysql. In particolare, non puoi creare utenti del database eseguendo operazioni DML (Data Manipulation Language) sulle tabelle grant. Si utilizzano invece istruzioni di gestione degli account MySQL come CREATE
USER, GRANT e REVOKE per concedere privilegi basati sui ruoli agli utenti. Inoltre, nel database mysql, non è possibile creare altri tipi di oggetti come le stored procedure. È comunque possibile interrogare le tabelle di mysql. Se utilizzi la replica del log binario, le modifiche apportate direttamente alle tabelle mysql sull’istanza database di origine non vengono replicate nel cluster di destinazione.
In alcuni casi, l'applicazione potrebbe utilizzare scorciatoie per creare utenti o altri oggetti inserendoli nelle tabelle di mysql. In tal caso, modifica il codice dell'applicazione per utilizzare le istruzioni corrispondenti come CREATE
USER.
Per esportare i metadati per gli utenti del database durante la migrazione da un database MySQL esterno, utilizza uno dei metodi riportati di seguito:
Utilizza l’utilità di dump delle istanze di MySQL Shell con un filtro per escludere utenti, ruoli e concessioni. L’esempio seguente mostra la sintassi dei comandi da utilizzare. Assicurati che
outputUrlsia vuoto.mysqlsh user@host -- util.dumpInstance(outputUrl,{excludeSchemas:['mysql'],users: true})Per ulteriori informazioni, consulta Instance Dump Utility, Schema Dump Utility, and Table Dump Utility
nel manuale di riferimento di MySQL. -
Usa l’utilità client
mysqlpump. Questo esempio include tutte le tabelle ad eccezione di quelle nel database di sistemamysql. Include anche istruzioniCREATE USEReGRANTper riprodurre tutti gli utenti MySQL nel database migrato.mysqlpump --exclude-databases=mysql --usersL’utilità client
mysqlpumpnon è più disponibile con MySQL 8.4. Utilizza invecemysqldump.
Per semplificare la gestione delle autorizzazioni per molti utenti o applicazioni, è possibile utilizzare l'istruzione CREATE ROLE per creare un ruolo con una serie di autorizzazioni. Puoi quindi utilizzare le istruzioni GRANT e SET ROLE e la funzione current_role per assegnare ruoli a utenti o applicazioni, cambiare il ruolo corrente e verificare quali ruoli sono in vigore. Per ulteriori informazioni sul sistema di autorizzazione basato sui ruoli in MySQL 8.0, consultare Utilizzo di ruoli
Importante
Si consiglia di non utilizzare l'utente master direttamente nelle applicazioni. Rispetta piuttosto la best practice di utilizzare un utente del database creato con i privilegi minimi richiesti per l'applicazione.
A partire dalla versione 8.0.36, RDS per MySQL include un ruolo speciale che ha tutti i seguenti privilegi. Il ruolo è denominato rds_superuser_role. L’utente amministrativo principale per ciascuna istanza database ha già concesso questo ruolo. Il ruolo rds_superuser_role include i seguenti privilegi per tutti gli oggetti del database:
-
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 definizione del ruolo include anche la WITH GRANT OPTION in modo che un utente amministrativo possa concedere tale ruolo ad altri utenti. In particolare, l’amministratore deve concedere tutti i privilegi necessari per eseguire la replica del log binario con il cluster MySQL come destinazione.
Suggerimento
Per visualizzare i dettagli completi delle autorizzazioni, usare la seguente istruzione.
SHOW GRANTS FOR rds_superuser_role@'%';
Quando concedi l’accesso utilizzando i ruoli in RDS per MySQL versione 8.0.36 e successive, attivi anche il ruolo utilizzando l’istruzione SET ROLE
o role_nameSET ROLE ALL. L'esempio seguente mostra come. Sostituire il nome del ruolo appropriato per CUSTOM_ROLE.
# Grant role to usermysql>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`@`%` | +--------------------------------------------------+