亚马逊红移授权 - 尽管用户对模式中的所有表都有授权,但无法访问新表

27

我在Amazon Redshift中遇到一种有趣的情况,我有一个用户X,他在公共架构中拥有所有表的选择权,但是一旦创建了一个新表,这个授予似乎不适用于新表。 这是正常行为吗? 如果是,如何处理才能维护模式级别的授权。谢谢。

4个回答

22

作为超级用户(主节点),执行以下命令:

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

此权限将允许reporting_user从schema staging中由staging_user创建的所有未来表格中选择数据。


8
谢谢您的解释。如果AWS能够推出一项功能,也能执行对组的ALTER权限,那将是非常好的。 即:在模式<>中为组<inetgration_group>更改默认权限 GRANT SELECT SELECT ON ALL TABLE TO <inetgration_group> - Kfactor21
是的,确切地说 - 你可以拥有一个用户列表:对于用户<可能创建报告用户需要访问的表的用户列表> - Merlin

17
在Redshift中,表和视图不会自动继承其父模式的权限。新创建的表只能由创建者和超级用户访问。
在最近的Redshift补丁中,实现了一个新功能以授予默认权限来解决此问题。
以下代码片段将仅为sales_admin组中未来所有sales模式中的表授予选择权限。如果要将此应用于模式中现有的表,则需要将其与第二个授权语句结合使用。 Alter Default Privileges
alter default privileges in schema sales grant select on tables to group sales_admin;

10
似乎“修改默认权限(alter default privileges)”仅适用于超级用户创建相关对象的情况;当普通用户拥有创建权限并创建对象时,默认权限不会被添加。有人遇到过这种情况吗? - Jesse MacNett
我也遇到了同样的问题 @JesseMacNett - unpairestgood
14
@JesseMacNett,这份文档没有很好地描述它的工作原理,但你需要在语句中添加“FOR USER 用户”子句,如果你不这样做,它会假定当前用户。因此,如果你有一个名为 X 的用户创建了一张表,并且你运行ALTER DEFAULT PRIVILEGES...,那么它假定你的意思是ALTER DEFAULT PRIVILEGES FOR USER current_user...而不是ALTER DEFAULT PRIVILEGES FOR USER user_X...,因此只有由current_user创建的新表才会改变其默认特权。 - Steve S
1
文档中提到,您可以为FOR USER target_user和/或IN SCHEMA target_schema更改ALTER DEFAULT PRIVILEGES,然后将SELECT或其他内容授予或撤销给USERGROUP。令人困惑的是,target_user不是grantrevoke的目标,而是表的所有者(通常是创建者)。因此,您确实需要运行类似于alter default privileges for user table_owner in schema sales grant select on tables to group sales_admin;的命令...就像@SteveS所说的那样。 - Davos

1

1
当我们发现新表在报告工具中无法显示时,我发现一个快速解决方法是重新执行以下SQL语句以针对受影响的组/用户进行处理:
ALTER DEFAULT PRIVILEGES IN SCHEMA <SCHEMANAME> GRANT SELECT ON TABLES TO GROUP <USER/GROUPNAME>;

1
这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Micho
奇怪的是我现在无法再现这个问题,但如果我发现任何新情况,我会继续更新这个线程! - Skippy
3
@Micho - 我之前无法评论,但现在可以了,那时我的唯一选择,哇,给一个新妹子一个机会吧! - Skippy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接