FirebirdSQL logo

В данном разделе описываются операторы создания, модификации и удаления учётных записей пользователей Firebird средствами операторов SQL.Такая возможность предоставлена следующим пользователям:

  • SYSDBA;

  • Любому пользователю, имеющему права на роль RDB$ADMIN в базе данных пользователей и права на ту же роль для базы данных в активном подключении. Пользователь должен подключаться к базе данных с ролью RDB$ADMIN или получить её права, если роль назначена в качестве роли по умолчанию;

  • Любому пользователю с ролью, которой назначена системная привилегия USER_MANAGEMENT в базе данных безопасности. Пользователь должен подключаться к базе данных с этой ролью или получить её права, если роль назначена в качестве роли по умолчанию;

  • При включенном флаге AUTO ADMIN MAPPING в базе данных пользователей (security4.fdb или той, что установлена для вашей базы данных в файле databases.conf) — любой администратор операционной системы Windows (при условии использования сервером доверенной авторизации — trusted authentication) без указания роли. При этом не важно, включен или выключен флаг AUTO ADMIN MAPPING в самой базе данных.

Непривилегированные пользователи могут использовать только оператор ALTER USER для изменения собственной учётной записи.

CREATE USER

Назначение

Создание учётной записи пользователя Firebird.

Доступно в

DSQL

Синтаксис
CREATE USER username
  PASSWORD 'password'
  [<user_option> [<user_option> ...]]
  [TAGS ( <tag> [, <tag>  ...] )]

<user_option> ::=
    FIRSTNAME 'firstname'
  | MIDDLENAME 'middlename'
  | LASTNAME 'lastname'
  | {ACTIVE | INACTIVE}
  | USING PLUGIN pluginname
  | GRANT ADMIN ROLE

<tag> ::=
  tagname = 'string_value'
Table 1. Параметры оператора CREATE USER
Параметр Описание

username

Имя пользователя.Максимальная длина 63 символов.

[password

Пароль пользователя.Чувствительно к регистру.

firstname

Вспомогательная информация: имя пользователя.Максимальная длина 32 символа.

middlename

Вспомогательная информация: "второе имя" (отчество, "имя отца") пользователя.Максимальная длина 32 символа.

lastname

Вспомогательная информация: фамилия пользователя.Максимальная длина 32 символа.

pluginname

Имя плагина управления пользователями, в котором необходимо создать нового пользователя.

tagname

Имя пользовательского атрибута.Максимальная длина 63 символа.Имя атрибута должно подчиняться правилам наименования SQL идентификаторов.

string_value

Значение пользовательского атрибута.Максимальная длина 255 символов.

Оператор CREATE USER создаёт учётную запись пользователя Firebird.Пользователь должен отсутствовать в текущей базе данных безопасности Firebird иначе будет выдано соответствующее сообщение об ошибке.

Important

Начиная с Firebird 3.0 имена пользователей подчиняются общему правилу наименования идентификаторов объектов метаданных.Таким образом, пользователь с именем "Alex" и с именем "ALEX" будут разными пользователями.

CREATE USER ALEX PASSWORD 'bz23ds';

-- этот пользователь такой же как и первый
CREATE USER Alex PASSWORD 'bz23ds';

-- этот пользователь такой же как и первый
CREATE USER "ALEX" PASSWORD 'bz23ds';

-- а это уже другой пользователь
CREATE USER "Alex" PASSWORD 'bz23ds';

Предложение PASSWORD задаёт пароль пользователя.Максимальная длина пароля зависит от того какой плагин управления пользователями задействован (параметр UserManager).Для плагина SRP эффективная длина пароля ограничена 20 байтами *. Плагин Legacy_UserManager максимальная длина пароля равна 8 байт.

Note
*Почему эффективная длина пароля ограничена 20 символами?

На длину пароля нет ограничения в 20 байт и он может быть использован.Хеши различных паролей, длина которых более 20 байт, тоже различны.Предел эффективности наступает из-за ограниченной длины хеша в SHA1 равном 20 байт или 160 бит.Рано или поздно найдётся более короткий пароль с тем же хешем с помощью атаки Brute Force.Именно поэтому часто говорят, что эффективная длина пароля для алгоритма SHA1 составляет 20 байт.

Необязательные предложения FIRSTNAME, MIDDLENAME и LASTNAME задают дополнительные атрибуты пользователя, такие как имя пользователя (имя человека), отчество и фамилия соответственно.

Если при создании учётной записи будет указан атрибут INACTIVE, то пользователь будет создан в “неактивном состоянии”, т.е.подключиться с его учётной записью будет невозможно.При указании атрибута ACTIVE пользователь будет создан в активном состоянии.По умолчанию пользователь создаётся активным.Данная возможность доступна только при использовании Srp в качестве менеджера пользователей.

Если указана опция GRANT ADMIN ROLE, то новая учётная запись пользователя создаётся с правами роли RDB$ADMIN в текущей базе данных безопасности.Это позволяет вновь созданному пользователю управлять учётными записями пользователей, но не даёт ему специальных полномочий в обычных базах данных.

Необязательное предложение USING PLUGIN позволяет явно указывать какой плагин управления пользователями будет использован.По умолчанию используется тот плагин, который был указан первым в списке параметра UserManager в файле конфигурации firebird.conf.Допустимыми являются только значения, перечисленные в параметре UserManager.

Important
Важно

Учтите что одноименные пользователи, созданные с помощью разных плагинов управления пользователями — это разные пользователи.Поэтому пользователя созданного с помощью одного плагина управления пользователями можно удалить или изменить, указав только тот же самый плагин.

Кроме того вы можете задать неограниченное количество пользовательских атрибутов с помощью необязательного предложения TAGS.Данная возможность доступна только при использовании Srp в качестве менеджера пользователей.

docnext count = 13

Кто может создать пользователя

  • SYSDBA и другие пользователи являющиеся администраторами в базе данных безопасности (с ролью RDB$ADMIN);

  • Пользователи вошедшие с ролью или получившие её привилегии (роль назначена по умолчанию), которой назначена системная привилегия USER_MANAGEMENT.

Примеры CREATE USER

Example 1. Создание пользователя
CREATE USER bigshot PASSWORD 'buckshot';
Example 2. Создание пользователя с помощью плагина управления пользователями Legacy_UserManager
CREATE USER godzilla PASSWORD 'robot'
USING PLUGIN Legacy_UserManager;
Example 3. Создание пользователя с пользовательскими атрибутами.
CREATE USER john PASSWORD 'fYe_3Ksw'
FIRSTNAME 'John'
LASTNAME 'Doe'
TAGS (BIRTHYEAR = '1970', CITY = 'New York');
Example 4. Создание пользователя в неактивном состоянии.
CREATE USER john PASSWORD 'fYe_3Ksw'
FIRSTNAME 'John'
LASTNAME 'Doe'
INACTIVE;
Example 5. Создание пользователя с возможностью управления пользователями
CREATE USER superuser PASSWORD 'kMn8Kjh'
GRANT ADMIN ROLE;

ALTER USER

Назначение:

Изменение учётной записи пользователя Firebird.

Доступно в:

DSQL.

Синтаксис:
ALTER {USER username | CURRENT USER}
  [SET] [<user_option> [<user_option> ...]]
  [USING PLUGIN pluginname]
  [{GRANT | REVOKE} ADMIN ROLE]
  [TAGS ( <tag> [, <tag>  ...] )]

<user_option> ::=
    PASSWORD 'password'
  | FIRSTNAME 'firstname'
  | MIDDLENAME 'middlename'
  | LASTNAME 'lastname'
  | {ACTIVE | INACTIVE}

<tag> ::=
    tagname = 'string_value'
  | DROP tagname

Описание параметров оператора смотри в [fblangref-security-user-create].

Оператор ALTER USER изменяет данные учётной записи пользователя.В операторе ALTER USER должно присутствовать хотя бы одно из необязательных предложений.

Необязательное предложение PASSWORD задаёт новый пароль пользователя.

Необязательные предложения FIRSTNAME, MIDDLENAME и LASTNAME позволяют изменить дополнительные атрибуты пользователя, такие как имя пользователя (имя человека), отчество и фамилия соответственно.

Атрибут INACTIVE позволяет сделать учётную запись неактивной.Это удобно когда необходимо временно отключить учётную запись без её удаления.Атрибут ACTIVE позволяет вернуть неактивную учётную запись в активное состояние.Данная возможность доступна только при использовании Srp в качестве менеджера пользователей.

Необязательное предложение TAGS позволяет задать, изменить или удалить пользовательские атрибуты.Если в списке атрибутов, атрибута с заданным именем не было, то он будет добавлен, иначе его значение будет изменено.Атрибуты не указанные в списке не будут изменены.Для удаления пользовательского атрибута перед его именем в списке атрибутов необходимо указать ключевое слово DROP.Данная возможность доступна только при использовании Srp в качестве менеджера пользователей.

Предложение GRANT ADMIN ROLE предоставляет указанному пользователю привилегии роли RDB$ADMIN в текущей базе данных безопасности.Это позволяет указанному пользователю управлять учётными записями пользователей, но не даёт ему специальных полномочий в обычных базах данных.

Предложение REVOKE ADMIN ROLE отбирает у указанного пользователя привилегии роли RDB$ADMIN в текущей базе данных безопасности.Это запрещает указанному пользователю управлять учётными записями пользователей.

Необязательное предложение USING PLUGIN позволяет явно указывать какой плагин управления пользователями будет использован.По умолчанию используется тот плагин, который был указан первым в списке параметра UserManager в файле конфигурации firebird.conf.Допустимыми являются только значения, перечисленные в параметре UserManager.

Important
Важно:

Учтите что одноименные пользователи, созданные с помощью разных плагинов управления пользователями — это разные пользователи.Поэтому пользователя созданного с помощью одного плагина управления пользователями можно удалить или изменить, указав только тот же самый плагин.

Если требуется изменить свою учётную запись, то вместо указания имени текущего пользователя можно использовать ключевое слово CURRENT USER.

Кто может модифицировать учётную пользователя?

Модифицировать чужую учётную запись могут:

  • SYSDBA и другие пользователи являющиеся администраторами в базе данных безопасности (с ролью RDB$ADMIN);

  • Пользователи вошедшие с ролью или получившие её привилегии (роль назначена по умолчанию), которой назначена системная привилегия USER_MANAGEMENT.

Свои собственные учётные записи могут изменять любые пользователи, однако это не относится к опциям {GRANT | REVOKE} ADMIN ROLE и атрибуту ACTIVE/INACTIVE для изменения которых необходимы административные привилегии.

Примеры ALTER USER

Example 1. Изменение пользователя и выдача ему привилегии управления пользователями.
ALTER USER bobby PASSWORD '67-UiT_G8'
GRANT ADMIN ROLE;
Example 2. Изменение пароля пользователя, созданного с помощью плагина управления пользователями Legacy_UserManager.
ALTER USER godzilla PASSWORD 'robot12'
USING PLUGIN Legacy_UserManager;
Example 3. Изменение дополнительных атрибутов своей учётной записи.
ALTER CURRENT USER
FIRSTNAME 'No_Jack'
LASTNAME 'Kennedy';
Example 4. Отключение учётной записи пользователя.
ALTER USER dan INACTIVE;
Example 5. Отбор привилегии управления пользователями у пользователя.
ALTER USER dumbbell
REVOKE ADMIN ROLE;
Example 6. Изменение пользовательских атрибутов своей учётной записи.
ALTER CURRENT USER
TAGS (BIRTHYEAR = '1971', DROP CITY);

Атрибуту BIRTHDAY будет установлено новое значение, а атрибут CITY будет удалён.

CREATE OR ALTER USER

Назначение

Создание или изменение учётной записи пользователя Firebird.

Доступно в

DSQL

Синтаксис
ALTER USER _username_
  [SET] [<user_option> [<user_option> ...]]
  [USING PLUGIN _pluginname_]
  [{GRANT | REVOKE} ADMIN ROLE]
  [TAGS ( <tag> [, <tag>  ...] )]

<user_option> ::=
    PASSWORD '_password_'
  | FIRSTNAME '_firstname_'
  | MIDDLENAME '_middlename_'
  | LASTNAME '_lastname_'
  | {ACTIVE | INACTIVE}

<tag> ::=
    _tagname_ = '_string_value_'
  | DROP _tagname_

Описание параметров оператора смотри в [fblangref-security-user-create].

Оператор CREATE OR ALTER USER создаёт новую или изменяет учётную запись.Если пользователя не существует, то он будет создан с использованием предложения CREATE USER.Если он уже существует, то он будет изменён, при этом существующие привилегии сохраняются.

Примеры CREATE OR ALTER USER

Example 1. Создание или изменение пользователя.
CREATE OR ALTER USER john
PASSWORD 'fYe_3Ksw'
FIRSTNAME 'John'
LASTNAME 'Doe'
INACTIVE;

DROP USER

Назначение

Удаление учётной записи пользователя Firebird

Доступно в

DSQL

Синтаксис
DROP USER username
  [USING PLUGIN pluginname]
Table 1. Параметры оператора DROP USER
Параметр Описание

username

Имя пользователя.

pluginname

Имя плагина управления пользователями, в котором был создан данный пользователь.

Оператор DROP USER удаляет учётную запись пользователя Firebird.

Необязательное предложение USING PLUGIN позволяет явно указывать какой плагин управления пользователями будет использован.По умолчанию используется тот плагин, который был указан первым в списке параметра UserManager в файле конфигурации firebird.conf.Допустимыми являются только значения, перечисленные в параметре UserManager.

Important

Учтите что одноименные пользователи, созданные с помощью разных плагинов управления пользователями — это разные пользователи.Поэтому пользователя созданного с помощью одного плагина управления пользователями можно удалить или изменить, указав только тот же самый плагин.

Кто может удалить учётную запись пользователя?

  • SYSDBA и другие пользователи являющиеся администраторами в базе данных безопасности (с ролью RDB$ADMIN);

  • Пользователи вошедшие с ролью или получившие её привилегии (роль назначена по умолчанию), которой назначена системная привилегия USER_MANAGEMENT.

Примеры DROP USER

Example 1. Удаление пользователя.
DROP USER bobby;
Example 2. Удаление пользователя, созданного с помощью плагина управления пользователями Legacy_UserManager.
DROP USER Godzilla USING PLUGIN Legacy_UserManager;

RECREATE USER

Назначение

Создание новой учётной записи пользователя Firebird или пересоздание существующей.

Доступно в

DSQL

Синтаксис
RECREATE USER username
  PASSWORD 'password'
  [<user_option> [<user_option> ...]]
  [TAGS ( <tag> [, <tag>  ...] )]

<user_option> ::=
    FIRSTNAME 'firstname'
  | MIDDLENAME 'middlename'
  | LASTNAME 'lastname'
  | {ACTIVE | INACTIVE}
  | USING PLUGIN pluginname
  | GRANT ADMIN ROLE

<tag> ::=
  tagname = 'string_value'

Описание параметров оператора смотри в [fblangref-security-user-create].

Оператор RECREATE USER создаёт нового или пересоздаёт существующего пользователя.Если пользователь с таким именем уже существует, то оператор RECREATE TABLE удалить его и создаст нового.Существующие привилегии при этом будут сохранены.

Примеры RECREATE USER

Example 1. Создание или пересоздание пользователя.
RECREATE USER john PASSWORD 'fYe_3Ksw'
FIRSTNAME 'John'
LASTNAME 'Doe'
INACTIVE;

Получение списка пользователей

Для получения списка пользователей и их атрибутов вы можете воспользоваться виртуальными таблицами SEC$USERS и SEC$USER_ATTRIBUTES.

Example 1. Отображение списка пользователей и их атрибутов
SELECT
  CAST(U.SEC$USER_NAME AS CHAR(20)) AS LOGIN,
  CAST(A.SEC$KEY AS CHAR(10)) AS TAG,
  CAST(A.SEC$VALUE AS CHAR(20)) AS "VALUE",
  U.SEC$PLUGIN AS "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
Подробное описание виртуальных таблиц безопасности смотри в:

SEC$USERS, SEC$USER_ATTRIBUTES.