GRANT CALLER

Accorde les autorisations de l’appelant à un rôle. Si un exécutable appartenant au rôle s’exécute avec des droits d’appelant restreints, il ne peut s’exécuter qu’avec les privilèges de l’appelant spécifiés par les autorisations de l’appelant.

Les variantes de la commande GRANT CALLER sont les suivantes :

  • GRANT CALLER — Accorde à l’appelant des autorisations sur un objet spécifique. Chaque autorisation de l’appelant créée par l’instruction permet à l’exécutable de s’exécuter avec un privilège spécifié.

  • GRANT ALL CALLER PRIVILEGES — Accorde à l’appelant des autorisations sur un objet spécifique. Les autorisations de l’appelant créées par l’instruction permettent à l’exécutable de s’exécuter avec tous les privilèges de l’appelant.

  • GRANT INHERITED CALLER — Accorde à l’appelant des autorisations sur tous les objets actuels et futurs du même type lorsqu’ils partagent un schéma, une base de données ou un compte commun. Chaque autorisation de l’appelant créée par l’instruction permet à l’exécutable de s’exécuter avec un privilège spécifié.

  • GRANT ALL INHERITED CALLER PRIVILEGES — Accorde à l’appelant des autorisations sur tous les objets actuels et futurs du même type lorsqu’ils partagent un schéma, une base de données ou un compte commun. Les autorisations de l’appelant créées par l’instruction permettent à l’exécutable de s’exécuter avec tous les privilèges de l’appelant.

Syntaxe

GRANT CALLER <object_privilege> [ , <object_privilege> ... ]
  ON <object_type> <object_name>
  TO { ROLE | DATABASE ROLE } <grantee_name>

GRANT ALL CALLER PRIVILEGES
  ON <object_type> <object_name>
  TO { ROLE | DATABASE ROLE } <grantee_name>

GRANT INHERITED CALLER <object_privilege> [ , <object_privilege> ... ]
  ON ALL <object_type_plural>
  IN { ACCOUNT | DATABASE <db_name> | SCHEMA <schema_name> | APPLICATION <app_name> | APPLICATION PACKAGE <app_pkg_name> }
  TO { ROLE | DATABASE ROLE } <grantee_name>

GRANT ALL INHERITED CALLER PRIVILEGES
  ON ALL <object_type_plural>
  IN { ACCOUNT | DATABASE <db_name> | SCHEMA <schema_name> | APPLICATION <app_name> | APPLICATION PACKAGE <app_pkg_name> }
  TO { ROLE | DATABASE ROLE } <grantee_name>
Copy

Paramètres

object_privilege [ , object_privilege ... ]

Les privilèges de l’objet avec lesquels les exécutables peuvent s’exécuter. Pour obtenir la liste des privilèges pour un type d’objet spécifique, voir Privilèges de contrôle d’accès.

Utilisez une liste délimitée par des virgules pour spécifier plusieurs privilèges d’objet.

ON object_type object_name

Permet à un exécutable de s’exécuter avec le object_privilege spécifié lors de l’accès à l’objet spécifié (object_name). Utilisez la forme singulière de object_type, par exemple, TABLE ou WAREHOUSE.

ON ALL object_type_plural IN ACCOUNT ou . ON ALL object_type_pluarl IN DATABASE db_name ou . ON ALL object_type_plural IN SCHEMA schema_name ou . ON ALL object_type_plural IN APPLICATION app_name ou . ON ALL object_type_plural IN APPLICATION PACKAGE app_pkg_name

Permet à un exécutable de s’exécuter avec des privilèges de niveau objet lors de l’accès à un objet du type spécifié. Utilisez la forme plurielle du type d’objet, par exemple TABLES ou WAREHOUSES.

Vous pouvez utiliser l’instruction GRANT pour contrôler l’accès à tous les objets du compte courant ou uniquement aux objets de la base de données, du schéma, de l’application ou du paquet d’application spécifiés.

TO ROLE grantee_name ou . TO DATABASE ROLE grantee_name

Propriétaire des exécutables que vous souhaitez sécuriser par des autorisations de l’appelant.

Si vous spécifiez un rôle de base de données, les privilèges sont limités aux objets de la même base de données que le rôle de base de données.

Exigences en matière de contrôle d’accès

Un rôle utilisé pour exécuter cette opération doit au minimum disposer des privilèges suivants :

Privilège

Objet

Remarques

MANAGE CALLER GRANTS

Compte

Le privilège MANAGE CALLER GRANTS au niveau du compte ne concerne que les autorisations de l’appelant. Il ne vous permet pas d’accorder des privilèges à des rôles.

Tout privilège

Tous les objets spécifiés

Vous devez disposer d’au moins un privilège sur les objets spécifiés dans l’autorisation de l’appelant. Par exemple, l’octroi d’une autorisation de l’appelant sur une table exige que vous disposiez d’au moins un privilège sur cette table.

Pour obtenir des instructions sur la création d’un rôle personnalisé avec un ensemble spécifique de privilèges, voir Création de rôles personnalisés.

Pour des informations générales sur les rôles et les privilèges accordés pour effectuer des actions SQL sur des objets sécurisables, voir Aperçu du contrôle d’accès.

Exemples

Les exécutables appartenant à owner_role qui accèdent à une vue v1 peuvent être exécutés avec le privilège SELECT sur la vue :

GRANT CALLER SELECT ON VIEW v1 TO owner_role;
Copy

Les exécutables appartenant à owner_role qui accèdent à n’importe quelle table du schéma db.sch peuvent être exécutés avec les privilèges SELECT et INSERT de l’appelant.

GRANT INHERITED CALLER SELECT, INSERT ON ALL TABLES IN SCHEMA db.sch TO ROLE owner_role;
Copy

Les exécutables appartenant à owner_role qui accèdent aux schémas du compte courant peuvent être exécutés avec tous les privilèges de l’appelant sur les schémas.

GRANT ALL INHERITED CALLER PRIVILEGES ON ALL SCHEMAS IN ACCOUNT TO ROLE owner_role;
Copy

Les exécutables appartenant au rôle de base de données db.r qui accèdent à la table db.sch1.t1 peuvent être exécutés avec le privilège SELECT sur la table.

GRANT CALLER SELECT ON TABLE db.sch1.t1 TO DATABASE ROLE db.r;
Copy

Les exécutables appartenant à owner_role qui accèdent à la base de données my_db peuvent s’exécuter avec tous les privilèges de l’appelant sur la base de données.

GRANT ALL CALLER PRIVILEGES ON DATABASE my_db TO ROLE owner_role;
Copy