【问题标题】:How get list of databases for certain user如何获取特定用户的数据库列表
【发布时间】:2020-04-02 23:48:46
【问题描述】:

作为管理员,我想帮助用户在 Web UI 中选择数据库、架构、表。 我有 accountadmin 角色的帐户。需要通过用户登录获取所有可用的数据库、方案、表。例如,使用带有参数的“MASTER.INFORMATION_SCHEMA.DATABASES”视图。 'MASTER.INFORMATION_SCHEMA.DATABASES' 仅返回当前用户的数据库。需要有可能定义一个用户。

【问题讨论】:

    标签: snowflake-cloud-data-platform


    【解决方案1】:

    Snowflake 使用基于角色的访问权限,因此用户不会被授予直接访问数据库的权限,但他们的角色是。

    要查看哪些角色可以访问哪些数据库,您可以从 Snowflake 数据库中获取此信息,如果您拥有 accountadmin 角色,您应该可以访问这些信息:

    select 
        roles.privilege,
        roles.name as database_name, 
        roles.grantee_name as role_name
    from snowflake.account_usage.grants_to_roles roles
    where roles.granted_on = 'DATABASE'
    ;
    

    请注意,我认为此表仅显示已直接授予角色的权限,而没有显示通过其层次关系获得的权限。您可以编写一个更复杂的查询,通过对grants_to_rolesgrants_to_users 表使用递归查询来确定通过层次结构授予用户的权限。我觉得¯\_(ツ)_/¯

    【讨论】:

    • 我已经写了一个查询来完成你描述的最后一部分。它针对 SNOWFLAKE 数据库运行,该数据库的时间延迟最多 3 小时(尽管大多数项目都少于该时间)。这样它就收集了整个帐户中所有用户的所有权限。您可以将其修改为仅针对单个数据库运行,并且不会有延迟。 stackoverflow.com/questions/60923894/…
    猜你喜欢
    • 2013-09-02
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 2020-09-07
    • 2015-02-01
    • 1970-01-01
    相关资源
    最近更新 更多