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 semplicemente nome_tabelle per indicare una tabella che si trova nel database corrente. La parola chiave TABLE è 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 semplicemente FUNCTION 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 semplicemente PROCEDURE 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.

PrivilegioSpiegazione
CREATE USERCreare utenti con l'istruzione CREATE USER o crearli implicitamente con GRANT.
FILE
GRANT OPTIONAssegnare privilegi globali. Si possono garantire solo i permessi di cui si dispone.
PROCESS
RELOAD
REPLICATION CLIENT
REPLICATION SLAVE
SHOW DATABASESElencare 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.
SHUTDOWNArrestare 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.

PrivilegioSpiegazione
CREATECreare 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 TABLESCreare tabelle temporanee con CREATE TEMPORARY TABLE.
DROPEliminare 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 OPTIONAssegnare privilegi a livello di database. E' possibile assegnare solo i permessi di cui si dispone.
LOCK TABLES

Privilegi di tabella

PrivilegioSpiegazione
ALTERModificare la struttura di una tabella esistente con l'istruzione ALTER TABLE.
CREATECreare una tabella con l'istruzione CREATE TABLE. E' possibile assegnare il permesso CREATE a tabelle che non esistono.
CREATE VIEWCreare una vista con l'istruzione CREATE_VIEW.
DELETEEliminare righe da una tabella con l'istruzione DELETE.
DROPEliminare una tabella con l'istruzione DROP TABLE o una vista con l'istruzione DROP VIEW.
GRANT OPTIONAssegnare privilegi a livello di tabella.E' possibile assegnare solo i permessi di cui si dispone.
INDEXCreare 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.
INSERTInserire 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
SELECTLeggere 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 VIEWLeggere l'istruzione CREATE VIEW che serve a ricreare una vista, utilizzando l'istruzione SHOW CREATE VIEW.
TRIGGER
UPDATEModificare 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';
PrivilegioSpiegazione
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

PrivilegioDescrizione
ALTER ROUTINEModificare le caratteristiche di una Stored Function utilizzando l'istruzione ALTER FUNCTION.
EXECUTEUsare una Stored Function. Occorrono i privilegi SELECT per ognuna delle tabelle o colonne che la funzione tenta di leggere.
GRANT OPTIONAssegnare i privilegi di funzione. E' possibile assegnare solo i privilegi di cui si dispone.

Privilegi di procedura

PrivilegioSpiegazione
ALTER ROUTINEModifica le caratteristiche di una Stored Procedure utilizzando l'istruzione ALTER PROCEDURE.
EXECUTEEsegue 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 OPTIONAssegnare i privilegi di procedura. E' possibile assegnare solo i privilegi di cui si dispone.

Commenti

Sto caricando i commenti......
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.