Ta strona została przetłumaczona maszynowo. Przeczytaj oryginał angielski. English

Rozszerzenie języka SQL: CREATE/ALTER/CREATE_OR_ALTER/DROP USER

Implementuje możliwość zarządzania użytkownikami ze zwykłego połączenia z bazą danych.

Autor:

Alex Peshkoff [email protected]

Składnia jest następująca:

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

gdzie OPCJE to lista następujących opcji:

- PASSWORD ‘hasło’

- FIRSTNAME ‘imię’

- MIDDLENAME ‘drugie imię’

- LASTNAME ’nazwisko'

- ACTIVE

- INACTIVE

- USING PLUGIN nazwa

a każdy TAG może mieć jedną z dwóch form:

nazwa = ‘wartość tekstowa’

lub:

DROP nazwa

gdzie NAZWA jest dowolnym prawidłowym identyfikatorem SQL.

Opis:

Umożliwia dodawanie, modyfikowanie i usuwanie użytkowników w bazie bezpieczeństwa za pomocą języka SQL.

Firebird od wersji 3.0 obsługuje wiele baz bezpieczeństwa. Narzędzie gsec oraz API usług

nie obsługują tego i ich użycie do zarządzania użytkownikami jest przestarzałe.

Klauzule CREATE i DROP są dostępne tylko dla SYSDBA (lub innego użytkownika z nadaną rolą RDB$ADMIN w bazie bezpieczeństwa). Zwykły użytkownik może zmienić własne hasło, dane osobowe i tagi. Próba modyfikacji

innego użytkownika zakończy się niepowodzeniem. Nie powiedzie się również próba dezaktywacji lub aktywacji własnego konta. Aby uniknąć wpisywania swojej nazwy za każdym razem, dostępna jest uproszczona forma ALTER CURRENT USER.

Co najmniej jedna z klauzul PASSWORD, FIRSTNAME, MIDDLENAME, LASTNAME, ACTIVE, INACTIVE lub TAGS musi być obecna w instrukcji ALTER USER. Należy również zauważyć, że klauzula PASSWORD jest wymagana przy tworzeniu nowego użytkownika.

Klauzula PASSWORD jest wystarczająco opisowa. Klauzule FIRSTNAME, MIDDLENAME i LASTNAME również, ale mogą być także używane do przechowywania dowolnych krótkich informacji o użytkowniku. Klauzule INACTIVE/ACTIVE służą do wyłączenia możliwości logowania użytkownika na serwer bez usuwania go z listy oraz do przywrócenia tej możliwości. Klauzula USING PLUGIN umożliwia pracę z użytkownikami nie tylko przy użyciu domyślnego pluginu zarządzania (pierwszego wymienionego w parametrze UserManager w firebird.conf), ale także z innymi. Narzędzie gsec oraz API usług nie obsługują wielu pluginów zarządzania użytkownikami - zawsze używany jest domyślny.

TAGS to lista atrybutów zdefiniowanych przez użytkownika końcowego. Długość wartości nie powinna przekraczać 255 bajtów.

Przypisanie nazwie jakiejś wartości ustawia nowy lub modyfikuje istniejący tag. Aby usunąć tag, użyj opcji DROP.

Ustawienie listy tagów dla użytkownika zachowuje wcześniej ustawione tagi, jeśli nie zostały obecnie wymienione.

Uwaga - UID/GID, wprowadzane przez przestarzałe narzędzie gsec, są traktowane jako tagi w interfejsie SQL.

Aby uzyskać dostęp do listy użytkowników, należy wybrać dane z tabel wirtualnych SEC$USERS i SEC$USER_ATTRIBUTES.

Przykłady (zakładając UserManager=Srp,Legacy_UserManager w firebird.conf):

Ogólne:

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;

Praca z tagami:

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

Wyświetlanie listy użytkowników:

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

Uwaga!

Ta funkcja w dużym stopniu zależy od pluginu zarządzania użytkownikami. Należy wziąć pod uwagę, że niektóre opcje są ignorowane podczas korzystania z przestarzałego pluginu zarządzania użytkownikami.