Tra i compiti del DBA, vi รจ quello di creare e amministrare le utenze del database. Sarร lui a decidere quali privilegi concedergli, ovvero le operazioni che essi potranno compiere sul database ad essi associato.
Abbiamo giร avuto modo di vedere come si crea unโutenza tramite le funzionalitร offerte dal pannello di amministrazione. Ora vedremo come fare altrettanto tramite comandi SQL.
CREATE USER
Il comando CREATE USER, la cui sintassi รจ la seguente:
CREATE USER <nome_utente> IDENTIFIED BY <password>
consente di creare un utente allโinterno del database. Chiaramente, per creare un utente abbiamo bisogno di unโutenza dotata degli opportuni diritti o privilegi. Lโutenza sys รจ dotata di tutti i privilegi necessari, pertanto sarร quella che useremo, cosรฌ come abbiamo fatto finora. Se ancora non lโabbiamo fatto, colleghiamoci dunque con tale utenza e andiamo nella sezione relativa ai comandi SQL. Se scriviamo:
CREATE USER my_user IDENTIFIED BY orcl;
Otterremo la creazione di un utente di nome โmy_userโ identificato dalla password โorclโ.
ALTER USER
Il comando appena visto possiede una serie di attributi opzionali, sui quali non ci soffermeremo per questioni di tempo, che possono essere impostati per definire meglio le caratteristiche dellโutenza che si va a creare. Tutti questi attributi possono essere comunque definiti/modificati successivamente con il comando ALTER USER. Supponiamo, ad esempio, di voler modificare la password dellโutenza appena creata; per farlo scriveremo:
ALTER USER my_user IDENTIFIED BY oracle;
Gestire i privilegi
Abbiamo visto sin qui la sintassi di base per la creazione e la modifica di unโutenza. Proviamo ora a collegarci al database tramite la nostra nuova utenza. Fatto ciรฒ, proviamo ad interrogare la nostra tabella "Anagrafica". In questo caso, nella nostra query, il nome tabella dovrร essere preceduto da un prefisso (nel nostro caso โSys.โ) che serve a specificare il creator della tabella visto che non coincide con lโattuale utenza. Come avremo avuto modo di verificare, abbiamo ottenuto un errore che ci segnala che la tabella รจ inesistente. Chiaramente, essendo sicuri che la tabella esiste, visto che lโabbiamo utilizzata finora, il problema deve essere un altro!
Il problema infatti, a dispetto del messaggio dโerrore, non ha nulla a che fare con la tabella, bensรฌ con lโutenza, e, in maniera specifica, con i privilegi ad essa associati. Concedere un privilegio ad un utenza signifca abilitarla ad effettuare quel tipo di operazione specifica.
GRANT
Supponiamo di voler concedere allโutenza โmy_userโ il diritto di effettuare delle query (precisamente delle SELECT) sulla tabella "Anagrafica". Per farlo faremo ricorso al comando GRANT. Pertanto, colleghiamoci con lโutenza โsysโ e, nella sezione โComandi SQLโ scriviamo:
GRANT SELECT ON Anagrafica TO my_user;
Ora, lโutenza โmy_userโ puรฒ effettuare liberamente delle select su Anagrafica. Torniamo a collegarci con tale utenza e scriviamo la nostra query, ricordandoci di usare il creator della tabella come prefisso. Per intenderci, se scriviamo:
SELECT * FROM Sys.Anagrafica;
Non otterremo piรน lโerrore visto in precedenza ma i records della tabella.
Per dare qualche dettaglio in piรน, possiamo dire che esistono sostanzialmente due tipologie di privilegi:
- Privilegi di Sistema
- Privilegi di Oggetto
I primi (privilegi di sistema) consentono di effettuare operazioni sul sistema, ovvero creare tabelle, procedureโฆ I secondi (privilegi di oggetto) consentono, invece, di effettuare operazioni su un oggetto, ovvero di effettuare select su tabelle, modifiche in tabella, eseguire procedureโฆ
REVOKE
Sino ad ora abbiamo visto come attribuire privilegi, ora vediamo come revocarli. Il comando che ci consente di revocare i privilegi รจ il comando REVOKE. Supponiamo di voler revocare il privilegio appena concesso allโutente โmy_userโ. Per farlo scriveremo:
REVOKE SELECT ON Anagrafica FROM my_user;
da questo momento, lโutente โmy_userโ non potrร piรน effettuare select sulla tabella indicata.