Эта страница переведена машинным переводом. Читайте английский оригинал. English

SQL Language Extension: 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 ‘password’

- FIRSTNAME ‘firstname’

- MIDDLENAME ‘middlename’

- LASTNAME ’lastname'

- ACTIVE

- INACTIVE

- USING PLUGIN name

и каждый TAG может иметь одну из двух форм:

name = ‘string value’

или:

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

Внимание!

Эта функция сильно зависит от плагина управления пользователями. Учтите, что некоторые опции игнорируются при использовании устаревшего плагина управления пользователями.