首页 > 解决方案 > 是否可以使用 SQL 访问用户和角色信息?SHOW USERS 数据存储在哪里?

问题描述

根据我对从ACCOUNTADMIN角色调用时的以下命令的理解

SHOW USERS; 

共享此列表。我试图在一个选择语句中获取每个用户和用户所属的每个角色的列表。就像是

select role, user from roles join users on roles.userid = users.userid. 

然后,我可以通过将对象加入表来找出哪些角色已被授予访问哪些对象的权限SNOWFLAKE.INFORMATION_SCHEMA.OBJECT_PRIVILEGES

我尝试在存储过程中使用 aSHOW USERS;后跟RESULT_SCAN命令来执行此操作,但存储过程不允许执行SHOW USERS命令。

还有另一种方法可以做到这一点吗?

标签: snowflake-cloud-data-platform

解决方案


在存储过程 EXECUTED AS OWNER(无论语言如何)SHOW USERS;中不支持执行。当作为呼叫者执行时,这取决于您是否已将过程的使用权授予进行呼叫的角色。

作为替代方案,您可以使用诸如 python 之类的语言来遍历运行 SHOW GRANTS TO 的用户列表,并将结果写入表中。您可以使用 SHOW GRANTS TO 对每个角色执行相同的操作。从那里您可以使用递归查询来遍历您的 GRANTS_TO_ROLE 表,然后加入您的 GRANTS_TO_USER 表。


推荐阅读