1

我创建了一个用户和角色,如用户:ali 角色:分析师

我已将此角色和用户授予 accountadmin 和 systemsecurity 角色。

我将数据库管理员和数据库管理员的自定义模式的使用权限授予角色分析师。

还授予角色分析师对表“Admin.schema.table1”的选择权限。

但是当我尝试在角色“分析员”下执行以下查询“Admin.information_schema.procedures”时,显示空表。

当我使用角色“accountadmin”执行“Admin.information_schema.procedures”时,它会显示结果。

为什么我得到带有分析师自定义角色的空结果集?

4

2 回答 2

2

由于 Procedure 是一个 Schema 对象,除了数据库管理员的 USAGE 权限之外,您需要授予对 Schema "SCHEMA" 以及任何目标过程的访问权限。

您可以通过以 accountadmin 身份运行以下语句来执行此操作:

GRANT USAGE ON SCHEMA ADMIN.SCHEMA TO ROLE ANALYST;
GRANT USAGE ON PROCEDURE ADMIN.SCHEMA.<PROCEDURE_NAME> TO ROLE ANALYST;

现在您确实可以访问目标过程,您可以在 information_schema.procedures 视图中查询它。

于 2021-08-05T12:31:55.677 回答
1

鉴于information_schema.procedures VIEW上的 Snowflake 文档

该视图仅显示会话的当前角色已被授予访问权限的对象。该视图不支持 MANAGE GRANTS 权限,因此当两个都由拥有 MANAGE GRANTS 权限的用户执行时,与 SHOW 命令相比,显示的信息可能会更少。

因此,因为您的分析师角色对架构中的任何过程都没有特权,所以它显示一个空结果。当您使用对您帐户中的所有内容具有权限的accountadmin角色查询视图时,您可以看到该角色拥有权限的过程。

您需要授予该过程的 USAGE 权限,当然还有包含该过程的模式的 USAGE 权限。

GRANT USAGE ON SCHEMA my_db.admin TO ROLE analyst;
GRANT USAGE ON PROCEDURE my_db.admin.my_proc TO ROLE analyst;

对于尚不存在的程序

USE ROLE SECURITYADMIN;
GRANT USAGE ON FUTURE PROCEDURES IN SCHEMA my_db.admin TO ROLE analyst;
于 2021-08-05T12:11:36.590 回答