GRANT
Sintassi
GRANT tipo_priv [(lista_colonne)] [, tipo_priv [(lista_colonne)]] ... ON [tipo_oggetto] livello_priv TO utente [IDENTIFIED BY [PASSWORD] 'password'] [, utente [IDENTIFIED BY [PASSWORD] 'password']] ... [REQUIRE {NONE | opzione_ssl [[AND] opzione_ssl] ...}] [WITH opzione_with [opzione_ssl] ...] tipo_oggetto: TABLE | FUNCTION | PROCEDURE livello_priv: * | *.* | nome_db.* | nome_db.nome_tabella | nome_tabella | nome_db.nome_tabella opzione_with: GRANT OPTION | MAX_QUERIES_PER_HOUR num | MAX_UPDATES_PER_HOUR num | MAX_CONNECTIONS_PER_HOUR num | MAX_USER_CONNECTIONS num opzione_ssl : SSL | X509 | CIPHER 'cipher' | ISSUER 'issuer' | SUBJECT 'subject'
Spiegazione
L'istruzione GRANT
permette di creare account di MariaDB e assegnare ad essi dei privilegi. Per usare GRANT
occorre possedere il privilegio GRANT OPTION
, oltre ai permessi che si desidera assegnare.
L'argomento utente e la clausola IDENTIFIED BY
sono gli stessi usati in CREATE USER
. Se l'account non esiste ancora verrà creato implicitamente. Per creare un utente implicitamente con GRANT
occorre avere i privilegi che sono necessari per CREATE USER
. Se l'account esiste già e si specifica la clausola IDENTIFIED BY
, la sua password verrà modificata. Per cambiare una password con GRANT
occorre avere i privilegi necessari per eseguire SET PASSWORD
.
Con l'istruzione REVOKE
si possono revocare i permessi assegnati con GRANT
.
Con l'istruzione SHOW GRANTS
si possono conoscere i privilegi associati a un account.
Livelli di privilegi
I privilegi possono essere assegnati globalmente, per un intero database, per una tabella o routine, o per le singole colonne di una tabella. Alcuni permessi possono essere impostati solo a certi livelli.
- I Privilegi Globali si assegnano specificando
*.*
come livello_priv. Essi comprendono i privilegi necessari per amministrare i database e gestire gli account degli utenti, e i privilegi su tutte le tabelle, funzioni e procedure. - I Privilegi di Database si assegnano specificando
nome_db.*
come livello_priv, o semplicemente*
, che identifica il database corrente. Essi comprendono i privilegi per creare tabelle e funzioni, e i privilegi su tutte le tabelle, funzioni e procedure che fanno parte del database. - I Privilegi di Tabella si assegnano specificando
nome_db.nome_tabella
come livello_priv, o semplicementenome_tabelle
per indicare una tabella che si trova nel database corrente. La parola chiaveTABLE
è opzionale. Questi permessi comprendono la possibilità di leggere e modificare dati nella tabella. Alcuni privilegi di tabella possono essere associati a singole colonne. - I Privilegi di Colonna si assegnano specificando una tabella come livello_priv e indicando una lista di colonne dopo il tipo di privilegio. Essi permettono di controllare esattamente quali colonne di una tabella possano essere lette e modificate dagli utenti.
- I Privilegi di Funzione si assegnano specificando
FUNCTION nome_db.nome_routine
come livello_priv, o semplicementeFUNCTION nome_routine
per indicare una funzione che si trova nel database corrente. - I Privilegi di Procedura si assegnano specificando
PROCEDURE nome_db.nome_routine
come livello_priv, o semplicementePROCEDURE nome_routine
per indicare una procedura che si trova nel database corrente.
Il privilegio USAGE
Il privilegio USAGE
non garantisce alcun permesso reale. L'istruzione SHOW GRANTS
mostra un privilegio globale USAGE
per ogni utente appena creato. E' possibile utilizzare USAGE
con l'istruzione GRANT
per modificare opzioni come GRANT OPTION
e MAX_USER_CONNECTIONS
senza modificare i privilegi dell'account.
Il privilegio ALL PRIVILEGES
Il privilegio ALL PRIVILEGES
assegna tutti i privilegi esistenti. Questo avviene solo per il livello di privilegi specificato. Ad esempio, assegnare tutti i privilegi su una tabella non implica l'assegnazione di permessi su un certo database o globalmente.
L'uso di ALL PRIVILEGES
non implica l'assegnazione del privilegio speciale GRANT OPTION
.
E' possibile specificare ALL
come abbreviazione di ALL PRIVILEGES
.
Il privilegio GRANT OPTION
Usando la clausola WITH GRANT OPTION
si fornisce agli utenti la possibilità di assegnare i permessi ad altri utenti per il livello di privilegi specificato. Gli utenti che hanno il privilegio GRANT OPTION
potranno assegnare solo i permessi di cui essi stessi dispongono. Non possono inoltre garantire i privilegi ad un livello più alto di quello per il quale hanno ricevuto il privilegio GRANT OPTION
privilege.
Il privilegio GRANT OPTION
non può essere associato a singole colonne. Se si usa WITH GRANT OPTION
specificando alcuni privilegi di colonna, il privilegio GRANT OPTION
viene associato all'intera tabella.
Usare la claudola WITH GRANT OPTION
equivale a specificare GRANT OPTION
elencandolo tra gli altri permessi.
Privilegi globali
La seguente tabella elenca i privilegi che vengono assegnati a livello globale. E' anche possibile assegnarli a livello di database, tabella e funzione. Quando sono assegnati globalmente, si applicano a tutti i database, tabelle e funzioni, compresi quelli che verranno creati in futuro.
Per impostare un permesso globale si specifica *.*
come livello_priv.
Privilegio | Spiegazione |
---|---|
CREATE USER | Creare utenti con l'istruzione CREATE USER o crearli implicitamente con GRANT . |
FILE | |
GRANT OPTION | Assegnare privilegi globali. Si possono garantire solo i permessi di cui si dispone. |
PROCESS | |
RELOAD | |
REPLICATION CLIENT | |
REPLICATION SLAVE | |
SHOW DATABASES | Elencare tutti i database tramite l'istruzione SHOW DATABASES . E' possibile eseguire SHOW DATABASES anche senza il permesso SHOW DATABASES , ma si ottengono solo i database sui quali si ha un qualche permesso. |
SHUTDOWN | Arrestare il server con il comando mysqladmin shutdown. |
SUPER |
Privilegi di database
La seguente tabella elenca i privilegi che si assegnano a livello di database. Anche i database a livello di tabella o di funzione possono essere assegnati a livello di database. I permessi di tabella o di funzione, se associati a un database, si applicano a tutte le tabelle e le funzioni in esso contenute, comprese quelle che verranno create in futuro.
Per assegnare un privilegio per un database, si specifica nome_db.*
come livello_priv, o semplicemente *
per indicare il database corrente.
Privilegio | Spiegazione |
---|---|
CREATE | Creare un database con l'istruzione CREATE DATABASE , se il permesso è associato a un database. E' possibile associare il privilegio CREATE a database che non esistono. Il permesso riguarda tutte le tabelle contenute nel database. |
CREATE ROUTINE | |
CREATE TEMPORARY TABLES | Creare tabelle temporanee con CREATE TEMPORARY TABLE . |
DROP | Eliminare un database usando l'istruzione DROP DATABASE , se il permesso è associato a un database. Il privilegio viene associato anche a tutte le tabelle presenti nel database. |
EVENT | |
GRANT OPTION | Assegnare privilegi a livello di database. E' possibile assegnare solo i permessi di cui si dispone. |
LOCK TABLES |
Privilegi di tabella
Privilegio | Spiegazione |
---|---|
ALTER | Modificare la struttura di una tabella esistente con l'istruzione ALTER TABLE . |
CREATE | Creare una tabella con l'istruzione CREATE TABLE . E' possibile assegnare il permesso CREATE a tabelle che non esistono. |
CREATE VIEW | Creare una vista con l'istruzione CREATE_VIEW . |
DELETE | Eliminare righe da una tabella con l'istruzione DELETE . |
DROP | Eliminare una tabella con l'istruzione DROP TABLE o una vista con l'istruzione DROP VIEW . |
GRANT OPTION | Assegnare privilegi a livello di tabella.E' possibile assegnare solo i permessi di cui si dispone. |
INDEX | Creare un indice su una tabella con l'istruzione CREATE INDEX . E' comunque possibile creare indici anche senza il permesso INDEX , utilizzando l'istruzione CREATE TABLE se si ha il permesso CREATE , e con l'istruzione ALTER TABLE se si ha il permesso ALTER . |
INSERT | Inserire righe in una tabella con l'istruzione INSERT . Il permesso INSERT può essere impostato anche su singole colonne: si veda Privilegi di Colonna sotto per i dettagli. |
REFERENCES | |
SELECT | Leggere dati da una tabella con l'istruzione SELECT . Il permesso SELECT può anche essere associato a singole colonne: si veda Privilegi di Colonna sotto per i dettagli. |
SHOW VIEW | Leggere l'istruzione CREATE VIEW che serve a ricreare una vista, utilizzando l'istruzione SHOW CREATE VIEW . |
TRIGGER | |
UPDATE | Modificare le righe esistenti in una tabella con l'istruzione UPDATE . L'istruzione UPDATE solitamente ha una clausola WHERE che serve a modificare solo alcune righe. Occorre disporre del permesso SELECT sulla tabella o sulle colonne interessate per poter usare la clausola WHERE . Il privilegio UPDATE può anche essere associato a singole colonne: si veda Privilegi di Colonna sotto per i dettagli. |
Privilegi di colonna
Alcuni privilegi di tabella possono essere associati a singole colonne. Per assegnare i privilegi di colonna, si specifica esplicitamente la tabella e si elencano i nomi delle colonne dopo il tipo di privilegio. Per esempio, l'istruzione seguente permette all'utente di leggere i nomi e le posizioni degli impiegati, ma non altre informazioni contenute nella stessa tabella, come i salari:
GRANT SELECT (nome, posizione) on Impiegati to 'jeffrey'@'localhost';
Privilegio | Spiegazione |
---|---|
INSERT (lista_colonne) | Aggiungere riche specificando i valori delle colonne associate al privilegio, usando l'istruzione INSERT . Se si ha il permesso INSERT soltanto a livello di colonna, occorre specificare quali colonne si desidera valorizzare. Tutte le altre verranno impostate ai loro valori predefiniti, oppure a NULL . |
REFERENCES (lista_colonne) | |
SELECT (lista_colonne) | Leggere i valori delle colonne usando l'istruzione SELECT . Non è possibile leggere colonne per le quali non si ha il privilegio SELECT , nemmeno con le clausole WHERE , ON , GROUP BY e ORDER BY . |
UPDATE (lista_colonne) | Modificare i valori delle singole colonne in righe già esistenti, con l'istruzione UPDATE . Le istruzioni UPDATE di solito hanno una clausola WHERE che serve ad aggiornare solo alcune righe. Occorre disporre del permesso SELECT sulla tabella o sulle colonne interessate per poter usare la clausola WHERE . |
Privilegi di funzione
Privilegio | Descrizione |
---|---|
ALTER ROUTINE | Modificare le caratteristiche di una Stored Function utilizzando l'istruzione ALTER FUNCTION . |
EXECUTE | Usare una Stored Function. Occorrono i privilegi SELECT per ognuna delle tabelle o colonne che la funzione tenta di leggere. |
GRANT OPTION | Assegnare i privilegi di funzione. E' possibile assegnare solo i privilegi di cui si dispone. |
Privilegi di procedura
Privilegio | Spiegazione |
---|---|
ALTER ROUTINE | Modifica le caratteristiche di una Stored Procedure utilizzando l'istruzione ALTER PROCEDURE . |
EXECUTE | Esegue una Stored Procedure tramite l'istruzione CALL . Il permesso di invocare una procedura potrebbe consentire a un utente di effettuare operazioni che diversamente non potrebbe eseguire, come inserire righe in una tabella sulla quale non ha i permessi necessari. |
GRANT OPTION | Assegnare i privilegi di procedura. E' possibile assegnare solo i privilegi di cui si dispone. |