FirebirdSQL logo

SET ROLE

Назначение

Изменение текущей роли.

Доступно в

DSQL.

Синтаксис
SET ROLE rolename
Table 1. Параметры оператора SET ROLE
Параметр Описание

rolename

Имя устанавливаемой роли.

Согласно стандарту SQL-2008 оператор SET ROLE позволяет установить контекстной переменной CURRENT_ROLE одну из назначенных ролей для пользователя CURRENT_USER или роль, полученную в результате доверительной аутентификации (в этом случае оператор принимает вид SET TRUSTED ROLE).

Example 1. Изменение текущей роли
SET ROLE manager;
SELECT current_role FROM rdb$database;
ROLE
=======================
MANAGER

SET TRUSTED ROLE

Назначение

Установка доверенной роли.

Доступно в

DSQL

Синтаксис
SET TRUSTED ROLE

Оператор SET TRUSTED ROLE включает доступ доверенной роли, при условии, что CURRENT_USER получен с помощью доверительной аутентификации и роль доступна.

Идея отдельной команды SET TRUSTED ROLE состоит в том, чтобы при подключении доверенного пользователя не указывать никакой дополнительной информации о роли, SET TRUSTED ROLE делает доверенную роль (если таковая существует) текущей ролью без дополнительной деятельности, связанной с установкой параметров DBP.

Доверенная роль это не специальный тип роли, ей может быть любая роль, созданная с помощью оператора CREATE ROLE или предопределённая системная роль RDB$ADMIN.Она становится доверенной ролью для подключения, когда подсистема отображения объектов безопасности (security objects mapping subsystem) находит соответствие между результатом аутентификации, полученным от плагина и локальным или глобальным отображением (mapping) для текущей базы данных.Роль даже может быть той, которая не предоставлена явно этому доверенному пользователю.

Note

Доверенная роль не назначается при подключении по умолчанию.Можно изменить это поведение, используя соответствующий плагин аутентификации и операторы {CREATE | ALTER} MAPPING.

Примером использования доверенной роли является назначение системной роли RDB$ADMIN для администраторов Windows, когда используется доверительная аутентификация Windows.

docnext count = 8

Управление часовым поясом сеанса

SET TIME ZONE

Назначение

Изменение часового пояса сеанса.

Синтаксис
SET TIME ZONE { <time-zone-string> | LOCAL }

<time-zone-string> ::=
    '<time-zone>'

<time-zone> ::=
    <time-zone-region>
  | [+/-] <hour-displacement> [: <minute-displacement>]

Немедленно изменяет часовой пояс сеанса (текущего подключения).

Указание LOCAL вернет к начальному часовому поясу сеанса (либо по умолчанию, либо как указано в свойстве соединения isc_dpb_session_time_zone).

Получить текущий часовой пояс сеанса можно с использованием функции RDB$GET_CONTEXT с аргументами 'SYSTEM' для пространства имён и 'SESSION_TIMEZONE' в качестве имени переменной.

Note

Выполнение ALTER SESSION RESET оказывает такое же влияние на часовой пояс сеанса, что и SET TIME ZONE LOCAL, но также сбрасывает другие свойства сеанса.

Example 1. Изменение часового пояса сеанса
set time zone '-02:00';
select rdb$get_context('SYSTEM', 'SESSION_TIMEZONE') from rdb$database;
-- returns -02:00

set time zone 'America/Sao_Paulo';
select rdb$get_context('SYSTEM', 'SESSION_TIMEZONE') from rdb$database;
-- returns America/Sao_Paulo

set time zone local;

Сброс состояния сессии

ALTER SESSION RESET

Назначение

Сброс сессионного окружения.

Доступно в

DSQL

Синтаксис
ALTER SESSION RESET

Сбрасывает сеансовое окружение (подключения) к исходному состоянию.Эта функциональность полезна если сеанс используется повторно, вместо того чтобы производить отключение/подключение.

Данный оператор делает следующее:

  • генерируется ошибка (isc_ses_reset_err), если в текущем соединении существует какая-либо открытая транзакция, кроме текущей транзакции и подготовленных транзакций 2PC, которые разрешены и игнорируются этой проверкой;

  • системная переменная RESETTING устанавливается в TRUE;

  • запускаются триггеры базы данных на событие ON DISCONNECT, если они присутствуют и разрешены для текущего соединения;

  • текущая пользовательская транзакция откатывается (ROLLBACK), если она есть. Если в текущей активной транзакции были произведены изменения, то будет выдано предупреждение;

  • сбрасывает установленные параметры DECFLOAT (BIND, TRAP и ROUND) в значения по умолчанию;

  • сбрасывает тайм-ауты сессии и оператора в 0;

  • удаляет все контекстные переменные из пространства имён USER_SESSION;

  • сбрасывает роль в значение переданное в DPB (указанное при подключении) и очищает кеш привилегий (если роль была изменена с помощью оператора SET ROLE);

  • очищает содержимое всех используемых глобальных таблиц уровня соединения (GLOBAL TEMPORARY TABLE …​ ON COMMIT PRESERVE ROWS);

  • запускаются триггеры базы данных на событие ON CONNECT, если они присутствуют и разрешены для текущего соединения;

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

  • системная переменная RESETTING устанавливается в FALSE.

Обработка ошибок

Ошибка, возникшая в триггере ON DISCONNECT, прерывает сброс сеанса и оставляет состояние сеанса неизменным.Такие ошибки сообщаются с кодом основной ошибки isc_session_reset_err и текстом ошибки“Cannot reset user session”.

Ошибки, возникающие после того, как триггеры ON DISCONNECT выполнены, прерывают выполнение оператора сброса сеанса и само соединение.Такие ошибки сообщались с кодом основной ошибки isc_session_reset_failed и текстом ошибки“Reset of user session failed. Connection is shut down”.Последующие операции по подключению (кроме отсоединения) завершатся ошибкой isc_att_shutdown.

См. также:

RESETTING.

Управление оптимизатором

SET OPTIMIZE

Назначение

Изменение стратегии оптимизатора.

Доступно в

DSQL

Синтаксис
SET OPTIMIZE <optimize-mode>

<optimize-mode> ::=
    FOR {FIRST | ALL} ROWS
  | TO DEFAULT

Оператор SET OPTIMIZE позволяет изменить стратегию оптимизатора на уровне текущей сессии.

Существует две стратегии оптимизации запросов:

  • FIRST ROWS - оптимизатор строит план запроса так, чтобы наиболее быстро извлечь только первые строки запроса;

  • ALL ROWS - оптимизатор строит план запроса так, чтобы наиболее быстро извлечь все строки запроса.

По умолчанию используется стратегия оптимизации указанная в параметре OptimizeForFirstRows конфигурационного файлаfirebird.conf или database.conf. OptimizeForFirstRows = false соответствует стратегии ALL ROWS,OptimizeForFirstRows = true соответствует стратегии FIRST ROWS.

Стратегия оптимизации может быть переопределена на уровне SQL оператора с помощью предложения OPTIMIZE FOR.

См. также:

OPTIMIZE FOR.

Отладка

SET DEBUG OPTION

Устанавливает опции отладки.

Синтаксис
SET DEBUG OPTION option-name = value
Table 1. Поддерживаемые опции
Наименование опции Тип значения Описание

DSQL_KEEP_BLR

BOOLEAN

Сохраняет BLR оператора для извлечения с помощьюisc_info_sql_exec_path_blr_bytes и isc_info_sql_exec_path_blr_text.

Оператор SET DEBUG OPTION настраивает отладочную информацию для текущего соединения.

Warning

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