Управління користувачами у Firebird 3.0
Розширення мови SQL: CREATE/ALTER/CREATE_OR_ALTER/DROP USER
Реалізує можливість керування користувачами зі звичайного підключення до бази даних.
Автор:
Alex Peshkoff [email protected]
Синтаксис:
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 ];
де OPTIONS - це список наступних опцій:
- PASSWORD ‘пароль’
- FIRSTNAME ‘ім’я’
- MIDDLENAME ‘по батькові’
- LASTNAME ‘прізвище’
- ACTIVE
- INACTIVE
- USING PLUGIN name
і кожен TAG може мати одну з двох форм:
name = ‘рядкове значення’
або:
DROP name
де NAME - будь-який допустимий ідентифікатор SQL.
Опис:
Це дає можливість додавати, змінювати та видаляти користувачів у базі даних безпеки за допомогою мови SQL.
Firebird, починаючи з версії 3.0, підтримує кілька баз даних безпеки. Утиліта gsec та сервісний API
не підтримують цю функцію, і їх використання для керування користувачами є застарілим.
Пункти CREATE та DROP доступні лише для SYSDBA (або іншого користувача, якому надано роль RDB$ADMIN у базі даних безпеки). Звичайний користувач може ALTER (змінювати) власний пароль, повні імена та теги. Спроба змінити
іншого користувача завершиться невдачею. Також завершиться невдачею спроба зробити себе неактивним або активним. Щоб уникнути введення свого імені щоразу, існує спрощена форма ALTER CURRENT USER.
Принаймні один із пунктів PASSWORD, FIRSTNAME, MIDDLENAME, LASTNAME, ACTIVE, INACTIVE або TAGS має бути присутнім у виразі ALTER USER. Також зверніть увагу, що пункт PASSWORD є обов’язковим під час створення нового користувача.
Пункт PASSWORD є достатньо зрозумілим. Пункти FIRSTNAME, MIDDLENAME та LASTNAME також, але їх можна використовувати для зберігання будь-якої короткої інформації про користувача. Пункти INACTIVE/ACTIVE використовуються для вимкнення входу користувача на сервер без видалення його зі списку та для відновлення цієї можливості. Пункт USING PLUGIN дає можливість працювати з користувачами не лише за допомогою плагіна керування за замовчуванням (першого, вказаного в параметрі UserManager у firebird.conf), але й з іншими. Утиліта gsec та сервісний API не підтримують кілька плагінів керування користувачами - завжди використовується плагін за замовчуванням.
TAGS - це список атрибутів, визначених кінцевим користувачем. Довжина значення не повинна перевищувати 255 байтів.
Присвоєння імені певного значення встановлює новий або змінює існуючий тег. Щоб видалити тег, використовуйте опцію DROP.
Встановлення списку тегів для користувача зберігає раніше встановлені теги, якщо вони не згадуються поточно.
Зверніть увагу - UID/GID, введені застарілою утилітою gsec, розглядаються як теги в інтерфейсі SQL.
Щоб отримати доступ до списку користувачів, виберіть дані з віртуальних таблиць SEC$USERS та SEC$USER_ATTRIBUTES.
Приклади (припустимо, UserManager=Srp,Legacy_UserManager у firebird.conf):
Загальні:
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;
Робота з тегами:
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
Відображення списку користувачів:
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
Зверніть увагу!
Ця функція значною мірою залежить від плагіна керування користувачами. Враховуйте, що деякі опції ігноруються під час використання застарілого плагіна керування користувачами.