FirebirdSQL logo

Привилегии выполнения PSQL кода

PSQL код может выполняться в одном из следующих режимов:

  • С привилегиями вызывающего пользователя (привилегии CURRENT_USER);

  • С привилегиями определяющего пользователя (владельца объекта метаданных).

Привилегии выполнения PSQL модуля указывается в его заголовке в необязательное предложение SQL SECURITY.Если выбрана опция INVOKER, то PSQL модуль выполняются с привилегиями вызывающего пользователя.Если выбрана опция DEFINER, то PSQL модуль выполняется с привилегиями определяющего пользователя (владельца). Эти привилегии будут дополнены привилегиями выданные самому PSQL модулю с помощью оператора GRANT.По умолчанию процедуры, функции выполняются с привилегиями вызывающего пользователя, а триггеры наследуют привилегии безопасности указанные для таблицы.

Анонимные PSQL блоки (EXECUTE BLOCK) всегда выполняются с правами вызывающего пользователя.

Тело модуля

Тело модуля может быть написано на языке PSQL или быть телом внешнего модуля.

Синтаксис тела модуля
<routine-body> ::=
    <psql-routine-spec>
  | <external-routine-spec>

<psql-routine-spec> ::=
  [<rights-clause>] <psql-routine-body>


<rights-clause> ::=
  SQL SECURITY {DEFINER | INVOKER}


<psql-routine-body> ::=
  AS
    [<declarations>]
  BEGIN
    [<PSQL_statements>]
  END

<declarations> ::=
  <declare-item> [<declare-item> ...]

<declare-item> ::=
    <declare-var>;
  | <declare-cursor>;
  | <subroutine-declaration>;
  | <subroutine-implementation>

<subroutine-declaration> ::= <subfunc-decl> | <subproc-decl>

<subroutine-implementation> ::= <subfunc-impl> | <subproc-impl>

<external-routine-spec> ::=
  <external-routine-reference>
  [AS <extbody>]

<external-routine-reference> ::= EXTERNAL NAME <extname> ENGINE <engine>

<extname> ::=
  '<module-name>!<routine-name>[!<misc-info>]'
Table 1. Параметры тела модуля
Параметр Описание

declare-var

Объявление локальной переменной.

declare-cursor

Объявление именованного курсора.

subfunc-decl

Объявление подпрограммы – функции.

subproc-decl

Объявление подпрограммы – процедуры.

subfunc-impl

Реализация подпрограммы – функции.

subproc-impl

Реализация подпрограммы – процедуры.

extbody

Тело внешней процедуры.Строковый литерал который может использоваться UDR для различных целей.

module-name

Имя внешнего модуля, в котором расположена функция.

routine-name

Внутреннее имя функции внутри внешнего модуля.

misc-info

Определяемая пользователем информация для передачи в функцию внешнего модуля.

engine

Имя движка для использования внешних функций.Обычно указывается имя UDR.