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用户表