FirebirdSQL logo

С введением поддержки множества баз данных безопасности в Firebird появились новые проблемы, которые не могли произойти с единой глобальной базой данных безопасности.Кластеры баз данных, использующие одну и ту же базу данных безопасности, были эффективно разделены.Отображения предоставляют средства для достижения той же эффективности, когда существует множество баз данных, использующих свои собственные базу данных безопасности.В некоторых случаях требуется управление для ограничения взаимодействия между такими кластерами.Например:

  • когда EXECUTE STATEMENT ON EXTERNAL DATA SOURCE требует обмена данными между кластерами;

  • когда общесерверный SYSDBA доступ к базам данных необходим от других кластеров, использующих службы;

  • аналогичные проблемы существовали в Firebird 2.1 и 2.5 под Windows, из-за поддержки доверительной аутентификации: существовало два отдельных списка пользователей — один в базе данных безопасности, а другой в Windows, в тех случаях когда было необходимо связать их. Примером может служить получение роли, предоставленной группе Windows, автоматически назначаемой членам этой группы.

Единым решением для всех этих случаев является создание правил отображения информации о пользователе, входящего в систему, на внутренние объекты безопасности — CURRENT_USER и CURRENT_ROLE.

Note

В Firebird имеется одно встроенное глобальное правило, действующее по умолчанию: пользователи прошедшие проверку в базе данных безопасности всегда отображается в любую базу данных один к одному.Это безопасное правило: для базы данных безопасности не имеет смысла не доверять себе.

CREATE MAPPING

Назначение

Создание отображения объекта безопасности.

Доступно в

DSQL

Синтаксис
CREATE [GLOBAL] MAPPING name
  USING {
      PLUGIN plugin_name [IN database]
    | ANY PLUGIN [IN database | SERVERWIDE]
    | MAPPING [IN database]
    | '*' [IN database] }
  FROM { ANY type | type from_name }
  TO { USER | ROLE } [to_name]
Table 1. Параметры оператора CREATE MAPPING
Параметр Описание

name

Имя отображения.Может содержать до 63 символов.

plugin_name

Имя плагина аутентификации.

database

Имя базы данных, в которой прошла аутентификация.

type

Тип объекта, который будет отображён.

from_name

Имя объекта, который будет отображён.

to_name

Имя объекта (пользователи или роли) на которое будет произведено отображение.

Оператор CREATE MAPPING создаёт отображение объектов безопасности (пользователей, групп, ролей) одного или нескольких плагинов аутентификации на внутренние объекты безопасности – CURRENT_USER и CURRENT_ROLE.Имя отображения должно быть уникальным среди имён отображений.

Если присутствует опция GLOBAL, то отображение будет применено не только для текущей базы данных, но и для всех баз данных находящимся в том же кластере, в том числе и базы данных безопасности.

Important

Если существуют одноименные глобальные и локальные отображение, то вам следует знать, что это разные объекты.

Note

Глобальное отображение работает, если в качестве базы данных безопасности используется база данных Firebird 3 или более высокой версии.Если вы планируете использовать другую базу данных, например, для целей использования собственного поставщика, то вам необходимо создать таблицу в ней и назвать её RDB$MAP с той же структурой, что и RDB$MAP в базе данных Firebird 3 и дать доступ на запись только для SYSDBA.

Предложение USING описывает источник отображения.Оно имеет весьма сложный набор опций:

  • явное указание имени плагина (опция PLUGIN plugin_name) означает, что оно будет работать только с этим плагином;

  • оно может использовать любой доступный плагин (опция ANY PLUGIN), даже если источник является продуктом предыдущего отображения;

  • оно может быть сделано так, чтобы работать только с обще серверными плагинами (опция SERVERWIDE);

  • оно может быть сделано так, чтобы работать только с результатами предыдущего отображения (опция MAPPING);

  • вы можете опустить использование любого из методов, используя звёздочку (*) в качестве аргумента;

  • оно может содержать имя базы данных (опция IN), из которой происходит отображение объекта FROM.

    Note

    Этот аргумент не является допустимым для отображения с общесерверной аутентификацией.

Предложение FROM описывает отображаемый объект.Оно принимает обязательный аргумент — тип объекта.

Особенности:

  • при отображении имён из плагинов, тип определяется плагином;

  • при отображении продукта предыдущего отображения, типом может быть только USER и ROLE;

  • если имя объекта будет указано явно, то оно будет учитываться при отображении;

  • при использовании ключевого слова ANY будут отображены объекты с любыми именами данного типа.

Сочетание источник (предложение USING) и объект отображения (предложение FROM) должно быть уникальным, иначе будет сгенерирована ошибка.Это позволяется только если одно отображение является глобальным, а второе локальным.

В предложении TO указывается пользователь или роль, на которого будет произведено отображение.to_name является не обязательным аргументом.Если он не указан, то в качестве имени объекта будет использовано оригинальное имя из отображаемого объекта.

Note

Локальное отображение перекрывает глобальное отображение с одинаковым сочетанием источника и объекта отображения.Это действует приблизительно так же как с настройками: настройки уровня базы данных (databases.conf) перекрывают глобальные настройки (firebird.conf).

docnext count = 10

Кто может создать отображение

  • SYSDBA;

  • Владелец базы данных (если отображение локальное);

  • Любой пользователь, вошедший с ролью RDB$ADMIN;

  • Пользователь root операционной системы Linux.

Примеры CREATE MAPPING

Example 1. Включение использования доверительной аутентификации Windows во всех базах данных, которые используют текущую базу данных безопасности.
CREATE GLOBAL MAPPING TRUSTED_AUTH
USING PLUGIN WIN_SSPI
FROM ANY USER
TO USER;
Example 2. Включение SYSDBA-подобного доступа для администраторов Windows в текущей базе данных.
CREATE MAPPING WIN_ADMINS
USING PLUGIN WIN_SSPI
FROM Predefined_Group
DOMAIN_ANY_RID_ADMINS
TO ROLE RDB$ADMIN;
Note

Группа DOMAIN_ANY_RID_ADMINS не существует в Windows, но такое имя будет добавлено плагином win_sspi для обеспечения точной обратной совместимости.

Example 3. Включение доступа определённому пользователю из другой базы данных к текущей базе данных под другим именем.
CREATE MAPPING FROM_RT
USING PLUGIN SRP IN "rt"
FROM USER U1 TO USER U2;

Пользователь U1 прошедший аутентификацию в базе данных rt будет отображён на пользователя с именем U2.

Important

Имена баз данных должны быть заключены в двойные кавычки на операционных системах, которые имею регистр чувствительные имена файлов.

Example 4. Включение общесерверного SYSDBA (от основной базы данных безопасности) для доступа к текущей базе данных.

Предположим, что база данных использует базу данных безопасности не по умолчанию.

CREATE MAPPING DEF_SYSDBA
USING PLUGIN SRP IN "security.db"
FROM USER SYSDBA
TO USER;
Example 5. Создание ограничения прав для пользователей, которые подключаются унаследованным плагином аутентификации.
CREATE MAPPING LEGACY_2_GUEST
USING PLUGIN legacy_auth
FROM ANY USER
TO USER GUEST;

ALTER MAPPING

Назначение

Изменение отображения объекта безопасности.

Доступно в

DSQL.

Синтаксис
ALTER [GLOBAL] MAPPING name
  USING {
      PLUGIN plugin_name [IN database]
    | ANY PLUGIN [IN database | SERVERWIDE]
    | MAPPING [IN database]
    | '*' [IN database] }
  FROM { ANY type | type from_name }
  TO { USER | ROLE } [to_name]

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

Оператор ALTER MAPPING позволяет изменять любые опции существующего отображения.

Important

Одноименные глобальное и локальное отображение — это разные объекты.

Кто может изменить отображние

Выполнить ALTER MAPPING могут:
  • SYSDBA;

  • Владелец базы данных (если отображение локальное);

  • Любой пользователь, вошедший с ролью RDB$ADMIN;

  • Пользователь root операционной системы Linux.

Примеры ALTER MAPPING

Example 1. Изменение отображения.
ALTER MAPPING FROM_RT
USING PLUGIN SRP IN "rt"
FROM USER U1 TO USER U3;

CREATE OR ALTER MAPPING

Назначение

Создание или изменение отображения объекта безопасности.

Доступно в

DSQL

Синтаксис
CREATE OR ALTER [GLOBAL] MAPPING name
  USING {
      PLUGIN plugin_name [IN database]
    | ANY PLUGIN [IN database | SERVERWIDE]
    | MAPPING [IN database]
    | '*' [IN database] }
  FROM { ANY type | type from_name }
  TO { USER | ROLE } [to_name]

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

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

Important

Одноименные глобальное и локальное отображение — это разные объекты.

Примеры CREATE OR ALTER MAPPING

Example 1. Создание нового или изменение существующего отображения.
CREATE OR ALTER MAPPING FROM_RT
USING PLUGIN SRP IN "rt"
FROM USER U1 TO USER U4;

DROP MAPPING

Назначение

Удаление отображения объекта безопасности.

Доступно в

DSQL

Синтаксис
DROP [GLOBAL] MAPPING name
Table 1. Параметры оператора DROP MAPPING
Параметр Описание

name

Имя отображения.

Оператор DROP MAPPING удаляет существующее отображение.Если указана опция GLOBAL, то будет удалено глобальное отображение.

Important

Одноименные глобальное и локальное отображение — это разные объекты.

Кто может удалить отображение

Выполнить DROP MAPPING могут:
  • SYSDBA;

  • Владелец базы данных (если отображение локальное);

  • Любой пользователь, вошедший с ролью RDB$ADMIN;

  • Пользователь root операционной системы Linux.

Примеры DROP MAPPING

Example 1. Удаление отображения.
DROP MAPPING FROM_RT;