Snowflake cloud data platform 是否可以使用SQL访问用户和角色信息?SHOW USERS数据存储在哪里?

Snowflake cloud data platform 是否可以使用SQL访问用户和角色信息?SHOW USERS数据存储在哪里?,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,据我所知,从ACCOUNTADMIN角色调用以下命令时 SHOW USERS; 共享此列表。我试图在一个select语句中获取每个用户以及该用户所属的每个角色的列表。差不多 select role, user from roles join users on roles.userid = users.userid. 然后,我可以通过将哪些角色连接到SNOWFLAKE.INFORMATION\u SCHEMA.OBJECT\u PRIVILEGES表,找出哪些角色被授予了访问哪些对象的权限

据我所知,从
ACCOUNTADMIN
角色调用以下命令时

SHOW USERS; 
共享此列表。我试图在一个select语句中获取每个用户以及该用户所属的每个角色的列表。差不多

select role, user from roles join users on roles.userid = users.userid. 
然后,我可以通过将哪些角色连接到
SNOWFLAKE.INFORMATION\u SCHEMA.OBJECT\u PRIVILEGES
表,找出哪些角色被授予了访问哪些对象的权限

我尝试在一个存储过程中使用
SHOW USERS来实现这一点
后接
RESULT\u SCAN
命令,但存储过程不允许执行
SHOW USERS
命令


还有别的办法吗

一个建议是使用一个javascript存储过程来存储来自一个了不起的个人的“SHOW USERS;”的结果:

创建或替换过程SHOW\u USERS\u SP()
返回变量
语言JAVASCRIPT
以调用方身份执行
作为
$$ 
var返回_行=[];
var stmt=snowflake.createStatement({
sqlText:“显示用户”
});
var result=stmt.execute();
while(result.next()){
return_rows.push([result.getColumnValue(“name”)、result.getColumnValue(“display_name”))
}
返回_行;

$$;在作为所有者执行的存储过程中(不考虑语言),执行
显示用户不受支持。当作为调用方执行时,这取决于您是否已将过程的使用权授予进行调用的角色

或者,您可以使用类似python的语言来迭代运行SHOW GRANTS to的用户列表,并将结果写入表中。您可以对每个角色执行相同的操作,并向其显示授权。从那里,您可以使用递归查询来覆盖GRANTS\u to\u角色表,然后连接到GRANTS\u to\u用户表