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).