Ho un utente, a cui desidero concedere tutte le autorizzazioni di lettura su uno schema db.
Un modo è questo:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
C'è un modo per raggruppare tutte le operazioni di lettura in concessione?
Ho un utente, a cui desidero concedere tutte le autorizzazioni di lettura su uno schema db.
Un modo è questo:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
C'è un modo per raggruppare tutte le operazioni di lettura in concessione?
Risposte:
Se esiste un singolo privilegio che sta per TUTTE le operazioni di LETTURA sul database.
Dipende da come definisci "tutto letto".
"Leggere" da tabelle e viste è il SELECT
privilegio. Se questo è ciò che intendi con "tutto letto", allora sì:
GRANT SELECT ON *.* TO 'username'@'host_or_wildcard' IDENTIFIED BY 'password';
Tuttavia, sembra che tu intenda la capacità di "vedere" tutto, di "guardare ma non toccare". Quindi, ecco gli altri tipi di lettura che mi vengono in mente:
"Leggere" la definizione delle viste è il SHOW VIEW
privilegio.
"Leggere" l'elenco delle query attualmente in esecuzione da altri utenti è il PROCESS
privilegio.
"Leggere" lo stato di replica corrente è il REPLICATION CLIENT
privilegio.
Tieni presente che alcune o tutte queste informazioni potrebbero esporre più informazioni di quelle che intendi esporre, a seconda della natura dell'utente in questione.
Se questa è la lettura che vuoi fare, puoi combinare uno qualsiasi di questi (o qualsiasi altro dei privilegi disponibili ) in una singola GRANT
dichiarazione.
GRANT SELECT, SHOW VIEW, PROCESS, REPLICATION CLIENT ON *.* TO ...
Tuttavia, non esiste un singolo privilegio che conceda un sottoinsieme di altri privilegi, che è quello che sembra che tu stia chiedendo.
Se stai facendo le cose manualmente e stai cercando un modo più semplice per farlo senza dover ricordare l'esatta concessione che di solito concedi per una certa classe di utenti, puoi cercare la dichiarazione per rigenerare le concessioni di un utente comparabile e cambiarla intorno per creare un nuovo utente con privilegi simili:
mysql> SHOW GRANTS FOR 'not_leet'@'localhost';
+------------------------------------------------------------------------------------------------------------------------------------+
| Grants for not_leet@localhost |
+------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, REPLICATION CLIENT ON *.* TO 'not_leet'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' |
+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
La modifica di "not_leet" e "localhost" in modo che corrispondano al nuovo utente che desideri aggiungere, insieme alla password, risulterà in un riutilizzabile GRANT
un'istruzione per creare un nuovo utente.
Ovviamente, se si desidera che una singola operazione configuri e conceda il set limitato di privilegi agli utenti, e magari rimuova eventuali privilegi immeritati, è possibile creare una procedura memorizzata che incapsula tutto ciò che si desidera fare. All'interno del corpo della procedura, dovresti costruire il fileGRANT
istruzione con SQL dinamico e / o manipolare direttamente le tabelle di concessione stesse.
In questa recente domanda sugli amministratori di database , il poster voleva la possibilità per un utente non privilegiato di modificare altri utenti, il che ovviamente non è qualcosa che può essere fatto normalmente - un utente che può modificare altri utenti lo è, praticamente per definizione, non un utente senza privilegi, tuttavia, le stored procedure hanno fornito una buona soluzione in quel caso, perché funzionano con il contesto di sicurezza del loro DEFINER
utente, consentendo a chiunque abbia EXECUTE
privilegi sulla procedura di assumere temporaneamente privilegi intensificati per consentire loro di fare le cose specifiche procedura completa.
GRANT SELECT ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password';
Questo creerà un utente con SELECT
privilegi per tutti i database, comprese le viste.
Diverse autorizzazioni che puoi concedere a un utente sono
ALL PRIVILEGES- This would allow a MySQL user all access to a designated database (or if no database is selected, across the system)
CREATE- allows them to create new tables or databases
DROP- allows them to them to delete tables or databases
DELETE- allows them to delete rows from tables
INSERT- allows them to insert rows into tables
SELECT- allows them to use the Select command to read through databases
UPDATE- allow them to update table rows
GRANT OPTION- allows them to grant or remove other users' privileges
Per fornire un'autorizzazione a un utente specifico, puoi utilizzare questo framework:
GRANT [type of permission] ON [database name].[table name] TO ‘[username]’@'localhost’;
Ho trovato questo articolo molto utile
Una guida passo passo che ho trovato qui .
Per creare un account utente di database di sola lettura per MySQL
Al prompt di UNIX, eseguire il programma della riga di comando MySQL e accedere come amministratore digitando il seguente comando:
mysql -u root -p
Digita la password per l'account root. Al prompt di mysql, eseguire una delle seguenti operazioni:
Per concedere all'utente l'accesso al database da qualsiasi host, digita il seguente comando:
grant select on database_name.* to 'read-only_user_name'@'%' identified by 'password';
Se il collector verrà installato sullo stesso host del database, digita il seguente comando:
grant select on database_name.* to 'read-only_user_name' identified by 'password';
Questo comando fornisce all'utente l'accesso in sola lettura al database solo dall'host locale. Se conosci il nome host o l'indirizzo IP dell'host su cui verrà installato il collector, digita il seguente comando:
grant select on database_name.* to 'read-only_user_name'@'host_name or IP_address' identified by 'password';
Il nome host deve essere risolvibile da DNS o dal file host locale. Al prompt di mysql, digita il seguente comando:
flush privileges;
genere quit
.
Di seguito è riportato un elenco di comandi di esempio e messaggi di conferma:
mysql> grant select on dbname.* to 'readonlyuser'@'%' identified
by 'pogo$23';
Query OK, 0 rows affected (0.11 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Anche l'utente ha ottenuto una risposta e @Michael - sqlbot ha coperto molto bene i punti nel suo post, ma manca un punto, quindi provo solo a coprirlo.
Se desideri fornire il permesso di lettura a un utente semplice (non di tipo amministratore):
GRANT SELECT, EXECUTE ON DB_NAME.* TO 'user'@'localhost' IDENTIFIED BY 'PASSWORD';
Nota: qui è richiesto EXECUTE, in modo che l'utente possa leggere i dati se è presente una procedura memorizzata che produce un report (ha poche istruzioni select).
Sostituisci localhost con un IP specifico da cui l'utente si connetterà al DB.
Ulteriori autorizzazioni di lettura sono:
Nota per MySQL 8 è diverso
Devi farlo in due passaggi:
CREATE USER 'readonly_user'@'localhost' IDENTIFIED BY 'some_strong_password';
GRANT SELECT, SHOW VIEW ON *.* TO 'readonly_user'@'localhost';
flush privileges;
Se si desidera che la vista venga letta solo dopo aver concesso l'autorizzazione di lettura, è possibile utilizzare l'ALGORITMO = TEMPTABLE nella definizione della vista DDL.
SHOW VIEW
, noSHOW_VIEW
, ma non è necessario concederlo a un utente a meno che non si desideri che sia in grado di accedere alleSHOW CREATE VIEW
viste ... possono selezionare dalle viste con l'unicoSELECT
privilegio. Cosa intendi per "raggruppa tutte le operazioni di lettura in concessione"?