FirebirdSQL logo

Privilèges d’exécution de code PSQL

Le code PSQL peut être exécuté dans l’un des modes suivants :

  • Avec des privilèges d’utilisateur appelant (privilèges CURRENT_USER) ;

  • En définissant les privilèges de l’utilisateur (propriétaire de l’objet de métadonnées).

Les privilèges d’exécution du module PSQL sont spécifiés dans son en-tête dans la clause optionnelle SQL SECURITY.Si l’option INVOKER est sélectionnée, le module PSQL est exécuté avec les privilèges de l’utilisateur appelant.Si l’option DEFINER est sélectionnée, le module PSQL est exécuté avec les privilèges de l’utilisateur définissant (propriétaire). Ces privilèges seront complétés par des privilèges accordés au module PSQL lui-même à l’aide de l’Instruction GRANT.Par défaut, les procédures, les fonctions sont exécutées avec les privilèges de l’utilisateur appelant, et les déclencheurs héritent des privilèges de sécurité spécifiés pour la table.

Les blocs PSQL anonymes (EXECUTE BLOCK) sont toujours exécutés avec les privilèges de l’appelant.

Corps du module

Le corps du module peut être écrit en PSQL ou être le corps d’un module externe.

Syntaxe corps du module
<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. Paramètres du corps du module
Paramètre Description

declare-var

Déclaration d’une variable locale.

declare-cursor

Déclaration d’un curseur nommé.

subfunc-decl

Déclaration d’un sous-programme - fonction.

subproc-decl

Déclaration d’un sous-programme - procédure.

subfunc-impl

Mise en œuvre de la fonction du sous-programme.

subproc-impl

Mise en œuvre du sous-programme - procédures.

extbody

Le corps de la procédure externe. Chaîne littérale qui peut être utilisée par l’UDR à diverses fins.

module-name

Nom du module externe dans lequel se trouve la fonction.

routine-name

Nom de la fonction interne dans un module externe.

misc-info

Informations définies par l’utilisateur à envoyer à une fonction de module externe.

engine

Nom du moteur pour utiliser les fonctions externes. Habituellement, le nom de l’UDR est spécifié.