【问题标题】:Amazon Redshift Grants - New table can't be accessed even though user has grants to all tables in schemaAmazon Redshift Grants - 即使用户已授予架构中的所有表,也无法访问新表
【发布时间】:2016-05-13 08:21:51
【问题描述】:

我在 Amazon Redshift 中有一个有趣的情况,我有一个用户 X,他对公共架构中的所有表都具有授权选择,但是一旦创建了新表,该授权似乎不适用于新的桌子。这是正常行为吗?如果是,如何处理它以维护模式级别的授权。谢谢。

【问题讨论】:

    标签: amazon-redshift database-permissions


    【解决方案1】:

    以超级用户(master)执行以下命令:

    alter default privileges 
      for user staging_user 
      in schema staging 
      grant select on tables 
      to reporting_user;
    

    将允许reporting_user 从staging_user 在schema staging 中创建的所有未来表中选择数据。

    【讨论】:

    • 感谢您的解释。如果 AWS 能够提供一个功能来执行组的更改权限,那就太好了。即 ALTER DEFAULT PRIVILIEGES FOR GROUP in SCHEMA GRANT SELECT SELECT ON ALL TABLE TO
    • 是的,你可以有一个用户列表:for user <list of users that may create a table that your reporting_user need access to>
    【解决方案2】:

    当我们第一次发现新表没有出现在我们的报告工具中时,我发现一个快速的解决方法是为受影响的组/用户重新执行以下 SQL 语句:

    ALTER DEFAULT PRIVILEGES IN SCHEMA <SCHEMANAME> GRANT SELECT ON TABLES TO GROUP <USER/GROUPNAME>;
    

    【讨论】:

    【解决方案3】:

    在 Redshift 中,表和视图不会自动继承其父架构的权限。您新创建的表只能由创建它们的用户和超级用户访问。

    在最近的 Redshift 补丁中,实施了一项授予默认权限的新功能来解决此问题。

    Alter Default Privileges

    以下代码 sn-p 将仅将销售模式中所有未来表的选择权限授予 sales_admin 组。如果您希望将其应用于架构中的现有表,则需要将其与第二个授权语句结合起来。

    alter default privileges in schema sales grant select on tables to group sales_admin;
    

    【讨论】:

    • 似乎“更改默认权限”仅适用于超级用户创建相关对象时;当具有创建权限的普通用户创建对象时,不会添加默认权限。有人看过吗?
    • 同样的事情发生在我身上@JesseMacNett
    • @JesseMacNett,文档没有很好地描述它是如何工作的,但是你必须在语句中添加 FOR USER user 子句,如果你不这样做,它假定当前用户。因此,如果您有一个创建表的用户 X,并且您运行 ALTER DEFAULT PRIVILEGES ...,它假定您的意思是 ALTER DEFAULT PRIVILEGES FOR USER current_user ...,而不是 ALTER DEFAULT PRIVILEGES FOR USER user_X ...,因此只有 current_user 创建的新表才会更改其默认权限。
    • 在文档中它说您 ALTER DEFAULT PRIVILEGESFOR USER target_userIN SCHEMA target_schema 中的一个或两个,然后您授予或撤销 SELECT 或其他 USERGROUP。令人困惑的是target_user 不是grantrevoke 的目标,它是表的所有者(通常是创建者)。所以你真的需要运行类似alter default privileges for user table_owner in schema sales grant select on tables to group sales_admin; ...@SteveS 所说的内容
    【解决方案4】:

    这是正常行为。默认情况下,只有对象所有者/超级用户有权使用该对象。

    http://docs.aws.amazon.com/redshift/latest/dg/r_Privileges.html

    您可以将grant 命令添加到您的create table 语句中,并为用户授予所需的权限。

    【讨论】:

      猜你喜欢
      • 2019-08-10
      • 2013-11-11
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 2019-03-20
      • 2018-11-13
      相关资源
      最近更新 更多