SHOW GRANTS¶
列出已明确授予角色、用户和共享的所有访问控制权限。
有关权限和角色的更多信息,请参阅 访问控制概述。
有关共享的更多信息,请参阅 关于 Secure Data Sharing。
备注
SHOW GRANTS 是一种特殊的变体,使用与所有其他 SHOW <objects> 命令都不同的语法。
语法¶
SHOW GRANTS [ LIMIT <rows> ]
SHOW GRANTS ON ACCOUNT [ LIMIT <rows> ]
SHOW GRANTS ON <object_type> <object_name> [ LIMIT <rows> ]
SHOW GRANTS TO {
APPLICATION <app_name>
| APPLICATION ROLE [ <app_name>. ]<app_role_name>
| SERVICE ROLE <service_name>!<service_role_name>
| <class_name> ROLE <instance_name>!<instance_role_name>
| ROLE <role_name>
| SHARE <share_name> [ IN APPLICATION PACKAGE <app_package_name> ]
| USER <user_name>
} [ LIMIT <rows> ]
SHOW GRANTS OF {
APPLICATION ROLE <app_role_name>
| SERVICE ROLE <service_name>!<service_role_name>
| ROLE <role_name>
} [ LIMIT <rows> ]
SHOW GRANTS OF SHARE <share_name> [ LIMIT <rows> ]
SHOW FUTURE GRANTS IN SCHEMA { <schema_name> } [ LIMIT <rows> ]
SHOW FUTURE GRANTS IN DATABASE { <database_name> } [ LIMIT <rows> ]
SHOW FUTURE GRANTS TO ROLE <role_name> [ LIMIT <rows> ]
SHOW FUTURE GRANTS TO DATABASE ROLE <database_role_name>
变体¶
SHOW GRANTS
在语法上等价于
SHOW GRANTS TO USER current_user
。列出授予当前用户的所有角色。
LIMIT rows
(可选)限制返回的最大行数。返回的实际行数可能小于指定的限制。例如,现有对象的数量小于指定的限制。
默认:无值(不对输出应用限制)。
SHOW GRANTS ON ...
ACCOUNT
列出所有已授予角色的账户级别(即全局)权限。
object_type object_name
列出已授予的此对象的所有权限。
对于数据库角色,可以使用完全限定名称
database_name.database_role_name
,或相对名称database_role_name
。如果使用数据库角色的相对名称,Snowflake 会使用会话中的数据库来解析数据库角色的相对名称。
SHOW GRANTS TO ...
APPLICATION app_name
列出授予应用程序的所有权限和角色。
APPLICATION ROLE [ app_name. ]app_role_name
列出授予应用程序角色的所有权限和角色。
应用程序的名称
app_name
是可选的。如果未指定,Snowflake 会使用当前应用程序。如果应用程序不是数据库,则此命令不会返回结果。SERVICE ROLE service_name!service_role_name
列出为服务角色被授予 USAGE 权限的服务端点。
class_name ROLE instance_name!instance_role_name
列出授予 :ref:` 实例角色 <label-instance_roles>` 的所有权限和角色。
如果包含
class_name
的数据库和架构未 :doc:` 使用 </sql-reference/sql/use>`,或未在 :ref:` 搜索路径 <label-update_search_path>` 中指定,请指定类的完全限定名称。例如SNOWFLAKE.CORE.BUDGET
。有关详细信息,请参阅 实例角色示例。
ROLE role_name
列出授予该角色的所有权限和角色。如果角色对临时对象有授权,那么该授权仅存在于创建临时对象的会话中。
SHARE share_name
列出授予共享的所有权限。
SHARE share_name IN APPLICATION PACKAGE app_package_name
列出授予应用程序包中共享的所有权限和角色。
USER user_name
列出授予用户的所有角色。请注意,未列出自动可供每个用户使用的 PUBLIC 角色。
SHOW GRANTS OF...
APPLICATION ROLE [ app_name. ]app_role
列出已授予应用程序角色的所有用户和角色。
应用程序的名称
app_name
是可选的。如果未指定,Snowflake 会使用当前应用程序。如果应用程序不是数据库,则此命令不会返回结果。SERVICE ROLE service_name!service_role_name
列出已授予服务角色的所有用户和角色。
ROLE role_name
列出已授予该角色的所有用户和角色。
SHARE share_name
列出所有正在使用共享的账户。尚未使用共享的账户将被排除在外。要查看已添加到共享中的所有账户,请查询 SNOWFLAKE.ACCOUNT_USAGE.SHARES 视图。
SHOW FUTURE GRANTS IN ...
SCHEMA database_name.schema_name
列出授予角色的架构中指定类型的新(即未来)对象的所有权限。
database_name.
指定架构所在的数据库,并且在查询当前数据库中的模式时是 可选的。DATABASE database_name
列出授予角色的数据库中指定类型的新(即未来)对象的所有权限。
SHOW FUTURE GRANTS TO ROLE role_name
列出授予角色的数据库或架构中指定类型的新(即未来)对象的所有权限。
SHOW FUTURE GRANTS TO DATABASE ROLE database_role_name
列出授予数据库角色的数据库或架构中指定类型的新(即未来)对象的所有权限。
共享的数据库角色不支持未来授权。有关详细信息,请参阅 GRANT DATABASE ROLE ...TO SHARE 命令中的使用说明。
使用说明¶
granted_by
列表示将权限授予被授予者的角色。授权角色称为 授予者。当您使用 GRANT <privileges> 向角色授予对象的权限时,以下授权规则确定将哪个角色列为权限的授予者:
如果 活跃角色 是对象所有者(即对对象具有 OWNERSHIP 权限),则该角色是授予者。
如果活跃角色拥有已授权的授予选项的指定权限(即,授予活动角色权限,该活动角色拥有 GRANT <privileges> ...TO ROLE <role_name> WITH GRANT OPTION,其中 <role_name> 是活跃角色之一)。如果是,那么拥有已授权的授予选项的权限角色就是授予者角色。请注意,如果多个活跃角色满足此标准,则无法确定哪个角色成为授予者角色。
如果一个活跃角色拥有全局 MANAGE GRANTS 权限,则授予者角色是对象所有者,而 不是 拥有 MANAGE GRANTS 权限的角色。也就是说,MANAGE GRANTS 权限允许角色模拟对象所有者,以便对该对象授予权限。
如果
granted_by
列为空,则权限由 Snowflake SYSTEM 角色授予。此角色执行某些内部操作。客户无法修改 SYSTEM 角色所授予的权限。使用 SHOW GRANTS ...TO SHARE IN APPLICATION PACKAGE 语法时:
grantee_name
列指定应用程序包的名称。granted_to
列指定APPLICATION PACKAGE SHARE
。
granted_by_role_type
列指定执行授予的授予者角色的类型:ROLE
、DATABASE_ROLE
或APPLICATION_ROLE
。仅当使用 SHOW GRANTS ON 语法,此列才会出现在输出中。数据共享使用者只能查看对 已授予共享 的对象的权限,例如对表的 SELECT 权限。根据授予的设置方式,由使用者运行的 SHOW GRANTS 命令的输出可能会在以下列中显示共享对象的空值:
granted_to
、grantee_name
、granted_by_role_type
和granted_by
。例如:如果一个账户角色拥有共享对象,则使用者无法查看共享对象的 OWNERSHIP 权限,因为使用者无法访问(解析)拥有该对象的角色(账户角色未共享)。
如果一个数据库角色拥有共享对象,并且提供商共享该数据库角色,则使用者可以查看共享对象的 OWNERSHIP 权限,因为他们可以解析共享数据库角色。
对托管访问架构中的对象运行 SHOW GRANTS ON <object_type> <object_name> 命令时,
grant_options
列将返回FALSE
。当运行 SHOW GRANTS ON SCHEMA <managed_access_schema> 命令时,
privilege
列包括拥有托管访问架构的角色的 OWNERSHIP 和 MANAGE GRANTS 权限。使用数据库角色和 SHOW FUTURE GRANTS TO DATABASE ROLE 语法,该命令将返回未授予共享的数据库角色的结果。
在数据共享使用者账户中,当授予共享数据库角色未来权限时,此命令不会返回任何行。但是,根据您的账户以及在此命令中对数据库角色的未来权限的支持时间,您可能会看到以下错误消息:
Invalid state of the shared database role. Please revoke the future grants to the shared database role.
作为使用者,要求提供商撤消共享数据库角色的未来授予。
该命令不需要正在运行的仓库即可执行。
该命令仅返回当前用户的当前角色已获授至少一项访问权限的对象。
MANAGE GRANTS 访问权限隐式允许其持有者查看账户中的每个对象。默认情况下,只有账户管理员(具有 ACCOUNTADMIN 角色的用户)和安全管理员(具有 SECURITYADMIN 角色的用户)才具有 MANAGE GRANTS 权限。
若要对此命令的输出进行后处理,可以使用 RESULT_SCAN 函数,该函数会将输出视为可查询的表。
示例¶
列出已授予 sales
数据库的所有权限:
SHOW GRANTS ON DATABASE sales; +---------------------------------+-----------+------------+------------+------------+--------------+--------------+----------------------+--------------+ | created_on | privilege | granted_on | name | granted_to | grantee_name | grant_option | granted_by_role_type | granted_by | +---------------------------------+-----------+------------+------------+------------+--------------+--------------+----------------------+--------------+ | Thu, 07 Jul 2016 05:22:29 -0700 | OWNERSHIP | DATABASE | REALESTATE | ROLE | ACCOUNTADMIN | true | ROLE | ACCOUNTADMIN | | Thu, 07 Jul 2016 12:14:12 -0700 | USAGE | DATABASE | REALESTATE | ROLE | PUBLIC | false | ROLE | ACCOUNTADMIN | +---------------------------------+-----------+------------+------------+------------+--------------+--------------+----------------------+--------------+
列出授予 analyst
角色的所有权限:
SHOW GRANTS TO ROLE analyst; +---------------------------------+------------------+------------+------------+------------+--------------+------------+ | created_on | privilege | granted_on | name | granted_to | grant_option | granted_by | |---------------------------------+------------------+------------+------------+------------+--------------+------------+ | Wed, 17 Dec 2014 18:19:37 -0800 | CREATE WAREHOUSE | ACCOUNT | DEMOENV | ANALYST | false | SYSADMIN | +---------------------------------+------------------+------------+------------+------------+--------------+------------+
列出已授予 demo
用户的所有角色:
SHOW GRANTS TO USER demo; +---------------------------------+------+------------+-------+---------------+ | created_on | role | granted_to | name | granted_by | |---------------------------------+------+------------+-------+---------------+ | Wed, 31 Dec 1969 16:00:00 -0800 | DBA | USER | DEMO | SECURITYADMIN | +---------------------------------+------+------------+-------+---------------+
列出已授予 analyst
角色的所有角色和用户:
SHOW GRANTS OF ROLE analyst; +---------------------------------+---------+------------+--------------+---------------+ | created_on | role | granted_to | grantee_name | granted_by | |---------------------------------+---------+------------+--------------+---------------| | Tue, 05 Jul 2016 16:16:34 -0700 | ANALYST | ROLE | ANALYST_US | SECURITYADMIN | | Tue, 05 Jul 2016 16:16:34 -0700 | ANALYST | ROLE | DBA | SECURITYADMIN | | Fri, 08 Jul 2016 10:21:30 -0700 | ANALYST | USER | JOESM | SECURITYADMIN | +---------------------------------+---------+------------+--------------+---------------+
列出已对 sales.public
架构中的未来对象授予的权限:
SHOW FUTURE GRANTS IN SCHEMA sales.public; +-------------------------------+-----------+----------+---------------------------+----------+-----------------------+--------------+ | created_on | privilege | grant_on | name | grant_to | grantee_name | grant_option | |-------------------------------+-----------+----------+---------------------------+----------+-----------------------+--------------| | 2018-12-21 09:22:26.946 -0800 | INSERT | TABLE | SALES.PUBLIC.<TABLE> | ROLE | ROLE1 | false | | 2018-12-21 09:22:26.946 -0800 | SELECT | TABLE | SALES.PUBLIC.<TABLE> | ROLE | ROLE1 | false | +-------------------------------+-----------+----------+---------------------------+----------+-----------------------+--------------+
列出已授予名为 cost.budgets.my_budget!ADMIN
的实例角色的所有角色权限:
SHOW GRANTS TO SNOWFLAKE.CORE.BUDGET ROLE cost.budgets.my_budget!ADMIN;+-------------------------------+-----------+------------+----------------------------------------------------------------------------------------------------------------------------------------+ | created_on | privilege | granted_on | name | +-------------------------------+-----------+------------+----------------------------------------------------------------------------------------------------------------------------------------+ | 2023-10-31 15:57:41.489 +0000 | USAGE | ROLE | SNOWFLAKE.CORE.BUDGET!ADMIN | | 2023-09-25 22:56:12.798 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!ACTIVATE():VARCHAR(16777216) | | 2023-09-25 22:56:13.304 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!ADD_RESOURCE(TARGET_REF VARCHAR):VARCHAR(16777216) | | 2023-09-25 22:56:12.863 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!GET_ACTIVATION_DATE():DATE | | 2023-09-25 22:56:12.412 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!GET_BUDGET_NAME():VARCHAR(16777216) | | 2023-09-25 22:56:11.510 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!GET_CONFIG():TABLE: () | | 2023-09-25 22:56:13.432 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!GET_LINKED_RESOURCES():TABLE: () | | 2023-09-25 22:56:11.582 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!GET_MEASUREMENT_TABLE():TABLE: () | | 2023-09-25 22:56:12.153 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!GET_NOTIFICATION_EMAIL():VARCHAR(16777216) | | 2023-09-25 22:56:12.016 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!GET_NOTIFICATION_INTEGRATION_NAME():VARCHAR(16777216) | | 2023-09-25 22:56:12.286 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!GET_NOTIFICATION_MUTE_FLAG():VARCHAR(16777216) | | 2023-09-25 22:56:13.068 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!GET_SERVICE_TYPE_USAGE(SERVICE_TYPE VARCHAR):TABLE: () | | 2023-09-25 22:56:13.245 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!GET_SERVICE_TYPE_USAGE(SERVICE_TYPE VARCHAR, TIME_DEPART VARCHAR, USER_TIMEZONE VARCHAR, TIME_LOWER_BOUND VARCHA | | 2023-09-25 22:56:12.595 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!GET_SPENDING_HISTORY():TABLE: () | | 2023-09-25 22:56:12.732 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!GET_SPENDING_HISTORY(TIME_LOWER_BOUND VARCHAR, TIME_UPPER_BOUND VARCHAR):TABLE: () | | 2023-09-25 22:56:11.716 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!GET_SPENDING_LIMIT():NUMBER(38,0) | | 2023-09-25 22:56:13.367 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!REMOVE_RESOURCE(TARGET_REF VARCHAR):VARCHAR(16777216) | | 2023-09-25 22:56:11.856 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!SET_EMAIL_NOTIFICATIONS(NOTIFICATION_CHANNEL_NAME VARCHAR, EMAIL VARCHAR):VARCHAR(16777216) | | 2023-09-25 22:56:12.349 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!SET_NOTIFICATION_MUTE_FLAG(USER_MUTE_FLAG BOOLEAN):VARCHAR(16777216) | | 2023-09-25 22:56:11.780 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!SET_SPENDING_LIMIT(SPENDING_LIMIT FLOAT):VARCHAR(16777216) | | 2023-09-25 22:56:12.475 +0000 | USAGE | PROCEDURE | SNOWFLAKE.CORE.BUDGET!SET_TASK_SCHEDULE(NEW_SCHEDULE VARCHAR):VARCHAR(16777216) | +-------------------------------+-----------+------------+----------------------------------------------------------------------------------------------------------------------------------------+