SET ROLEИзменение текущей роли.
DSQL.
SET ROLE rolename
| Параметр | Описание |
|---|---|
rolename |
Имя устанавливаемой роли. |
Согласно стандарту SQL-2008 оператор SET ROLE позволяет установить контекстной переменной CURRENT_ROLE одну из назначенных ролей для пользователя CURRENT_USER или роль, полученную в результате доверительной аутентификации (в этом случае оператор принимает вид SET TRUSTED ROLE).
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
|
Доверенная роль не назначается при подключении по умолчанию.Можно изменить это поведение, используя соответствующий плагин аутентификации и операторы |
Примером использования доверенной роли является назначение системной роли RDB$ADMIN для администраторов Windows, когда используется доверительная аутентификация Windows.
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
|
Выполнение |
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.
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.
SET DEBUG OPTIONУстанавливает опции отладки.
SET DEBUG OPTION option-name = value
| Наименование опции | Тип значения | Описание |
|---|---|---|
DSQL_KEEP_BLR |
BOOLEAN |
Сохраняет BLR оператора для извлечения с помощью |
Оператор SET DEBUG OPTION настраивает отладочную информацию для текущего соединения.
|
Warning
|
Параметры отладки тесно связаны с внутренними компонентами движка, и их использование не рекомендуется, если вы не понимаете, как эти внутренние компоненты могут изменяться в зависимости от версии. |