Questa pagina è stata tradotta automaticamente. Leggi l'originale in inglese. English

Estensione del linguaggio SQL: CREATE/ALTER/CREATE_OR_ALTER/DROP USER

Implementa la capacità di gestire gli utenti da una normale connessione al database.

Autore:

Alex Peshkoff [email protected]

La sintassi è:

CREATE USER nome [ opzioni ] [ TAGS ( tag [, tag [, tag ...]] ) ] ALTER USER nome [ SET ] [ opzioni ] [ TAGS ( tag [, tag [, tag ...]] ) ] ALTER CURRENT USER [ SET ] [ opzioni ] [ TAGS ( tag [, tag [, tag ...]] ) ] CREATE OR ALTER USER nome [ SET ] [ opzioni ] [ TAGS ( tag [, tag [, tag ...]] ) ] DROP USER nome [ USING PLUGIN nome ];

dove OPZIONI è un elenco delle seguenti opzioni:

- PASSWORD ‘password’

- FIRSTNAME ’nome'

- MIDDLENAME ‘secondo nome’

- LASTNAME ‘cognome’

- ACTIVE

- INACTIVE

- USING PLUGIN nome

e ogni TAG può avere una delle due forme:

nome = ‘valore stringa’

oppure:

DROP nome

dove NOME è un qualsiasi identificatore SQL valido.

Descrizione:

Rende possibile aggiungere, modificare ed eliminare utenti nel database di sicurezza utilizzando il linguaggio SQL.

Firebird dalla versione 3.0 supporta più database di sicurezza. L’utilità gsec e le API dei servizi

non lo supportano e il loro utilizzo per la gestione degli utenti è deprecato.

Le clausole CREATE e DROP sono disponibili solo per SYSDBA (o un altro utente a cui è stato concesso il ruolo RDB$ADMIN nel database di sicurezza). Un utente normale può ALTERare la propria password, i nomi estesi e i tag. Il tentativo di modificare

un altro utente fallirà. Fallirà anche il tentativo di renderti inattivo o attivo. Per evitare di digitare il proprio nome ogni volta, è disponibile la forma semplificata ALTER CURRENT USER.

Almeno una delle clausole PASSWORD, FIRSTNAME, MIDDLENAME, LASTNAME, ACTIVE, INACTIVE o TAGS deve essere presente nell’istruzione ALTER USER. Inoltre, si noti che la clausola PASSWORD è obbligatoria quando si crea un nuovo utente.

La clausola PASSWORD è abbastanza autoesplicativa. Anche le clausole FIRSTNAME, MIDDLENAME e LASTNAME lo sono, ma possono essere utilizzate anche per memorizzare brevi informazioni su un utente. Le clausole INACTIVE/ACTIVE vengono utilizzate per disabilitare l’accesso dell’utente al server senza rimuoverlo dall’elenco e per ripristinare tale capacità. La clausola USING PLUGIN rende possibile lavorare con utenti non solo con il plugin di gestione predefinito (il primo elencato nel parametro UserManager in firebird.conf) ma anche con altri. L’utilità gsec e le API dei servizi non supportano più plugin di gestione utenti: viene sempre utilizzato quello predefinito.

TAGS è un elenco di attributi definiti dall’utente finale. La lunghezza del valore non deve superare i 255 byte.

Assegnare un valore a un nome imposta un nuovo tag o modifica uno esistente. Per rimuovere il tag, utilizzare l’opzione DROP.

L’impostazione di un elenco di tag per l’utente mantiene i tag impostati in precedenza se non vengono menzionati al momento.

Nota: UID/GID, inseriti tramite gsec deprecato, vengono trattati come tag nell’interfaccia SQL.

Per accedere all’elenco degli utenti, selezionare dalle tabelle virtuali SEC$USERS e SEC$USER_ATTRIBUTES.

Esempi (supponendo UserManager=Srp,Legacy_UserManager in firebird.conf):

Generico:

CREATE USER alex PASSWORD 'test'; ALTER USER alex SET FIRSTNAME 'Alex' LASTNAME 'Peshkoff'; CREATE OR ALTER USER alex SET PASSWORD 'IdQfA'; DROP USER alex; ALTER CURRENT USER SET PASSWORD 'SomethingLongEnough' USING PLUGIN srp;

Lavorare con i tag:

ALTER USER alex SET TAGS (a='a', b='b'); NAME VALUE ================ ============================== A a B b ALTER USER alex SET TAGS (b='x', c='d'); NAME VALUE ================ ============================== A a B x C d ALTER USER alex SET TAGS (drop a, c='sample'); NAME VALUE ================ ============================== B x C sample

Visualizzazione dell’elenco degli utenti:

SELECT CAST(U.SEC$USER_NAME AS CHAR(20)) LOGIN, CAST(A.SEC$KEY AS CHAR(10)) TAG, CAST(A.SEC$VALUE AS CHAR(20)) "VALUE", U.SEC$PLUGIN "PLUGIN" FROM SEC$USERS U LEFT JOIN SEC$USER_ATTRIBUTES A ON U.SEC$USER_NAME = A.SEC$USER_NAME AND U.SEC$PLUGIN = A.SEC$PLUGIN;

LOGIN TAG VALUE PLUGIN

==================== ========== ==================== =============================== SYSDBA <null> <null> Srp ALEX B x Srp ALEX C sample Srp SYSDBA <null> <null> Legacy_UserManager

Attenzione!

Questa funzionalità dipende fortemente dal plugin di gestione utenti. Tieni presente che alcune opzioni vengono ignorate quando si utilizza il plugin di gestione utenti legacy.