GRANT CALLER¶
向角色授予 调用方授权。如果角色拥有的可执行文件以受限调用方权限运行,则它只能以调用方授权指定的调用方权限运行。
GRANT CALLER 命令的变体如下:
GRANT CALLER – 授予特定对象的调用方授权。语句创建的每个调用方授权都允许可执行文件以指定的权限运行。
GRANT ALL CALLER PRIVILEGES – 授予特定对象的调用方授权。语句创建的调用方授权允许可执行文件以调用方的所有权限运行。
GRANT INHERITED CALLER – 当同一类型的所有当前和未来对象共享共同架构、数据库或账户时,授予对上述内容的调用方授权。语句创建的每个调用方授权都允许可执行文件以指定的权限运行。
GRANT ALL INHERITED CALLER PRIVILEGES – 当同一类型的所有当前和未来对象共享共同架构、数据库或账户时,授予对上述内容的调用方授权。语句创建的调用方授权允许可执行文件以调用方的所有权限运行。
语法¶
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>
参数¶
object_privilege [ , object_privilege ... ]
可执行文件可以运行的对象权限。有关特定对象类型的权限列表,请参阅 访问控制权限。
使用以逗号分隔的列表指定多个对象权限。
ON object_type object_name
在访问指定对象 (
object_name
) 时,允许可执行文件以指定的object_privilege
运行。使用object_type
的单数形式,例如TABLE
或WAREHOUSE
。ON ALL object_type_plural IN ACCOUNT
或 .ON ALL object_type_pluarl IN DATABASE db_name
或 .ON ALL object_type_plural IN SCHEMA schema_name
或 .ON ALL object_type_plural IN APPLICATION app_name
或 .ON ALL object_type_plural IN APPLICATION PACKAGE app_pkg_name
在访问指定类型的对象时,允许可执行文件以对象级权限运行。使用对象类型的复数形式,例如
TABLES
或WAREHOUSES
。您可以使用 GRANT 语句控制对当前账户中所有对象的访问权限,或者仅控制对指定数据库、架构、应用程序或应用程序包中对象的访问权限。
TO ROLE grantee_name
或 .TO DATABASE ROLE grantee_name
要使用调用方授权保护的可执行文件的所有者。
如果您指定数据库角色,则权限仅限于与数据库角色位于同一数据库中的对象。
访问控制要求¶
权限 |
对象 |
备注 |
---|---|---|
MANAGE CALLER GRANTS |
账户 |
账户级 MANAGE CALLER GRANTS 权限仅涉及调用方授权。它不允许您向角色授予权限。 |
任何权限 |
所有指定的对象 |
对于调用方授权中指定的对象,您至少需要拥有一个权限。例如,授予对表的调用方授权要求您对该表至少拥有一个权限。 |
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
示例¶
访问 v1
视图的 owner_role
所拥有的可执行文件可以使用对视图的 SELECT 权限运行:
GRANT CALLER SELECT ON VIEW v1 TO owner_role;
访问 db.sch
架构中任何表的 owner_role
所拥有的可执行文件可以使用调用方的 SELECT 和 INSERT 权限运行。
GRANT INHERITED CALLER SELECT, INSERT ON ALL TABLES IN SCHEMA db.sch TO ROLE owner_role;
访问当前账户中架构的 owner_role
所拥有的可执行文件可以使用对架构的所有调用方权限运行。
GRANT ALL INHERITED CALLER PRIVILEGES ON ALL SCHEMAS IN ACCOUNT TO ROLE owner_role;
访问 db.sch1.t1
表的 db.r
数据库角色所拥有的可执行文件可以使用对表的 SELECT 权限运行。
GRANT CALLER SELECT ON TABLE db.sch1.t1 TO DATABASE ROLE db.r;
访问 my_db
数据库的 owner_role
所拥有的可执行文件可以使用对该数据库的所有调用方权限运行。
GRANT ALL CALLER PRIVILEGES ON DATABASE my_db TO ROLE owner_role;