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>
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 deobject_type
, par exemple,TABLE
ouWAREHOUSE
.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
ouWAREHOUSES
.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;
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;
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;
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;
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;