【发布时间】:2016-05-13 08:21:51
【问题描述】:
我在 Amazon Redshift 中有一个有趣的情况,我有一个用户 X,他对公共架构中的所有表都具有授权选择,但是一旦创建了新表,该授权似乎不适用于新的桌子。这是正常行为吗?如果是,如何处理它以维护模式级别的授权。谢谢。
【问题讨论】:
标签: amazon-redshift database-permissions
我在 Amazon Redshift 中有一个有趣的情况,我有一个用户 X,他对公共架构中的所有表都具有授权选择,但是一旦创建了新表,该授权似乎不适用于新的桌子。这是正常行为吗?如果是,如何处理它以维护模式级别的授权。谢谢。
【问题讨论】:
标签: amazon-redshift database-permissions
以超级用户(master)执行以下命令:
alter default privileges
for user staging_user
in schema staging
grant select on tables
to reporting_user;
将允许reporting_user 从staging_user 在schema staging 中创建的所有未来表中选择数据。
【讨论】:
for user <list of users that may create a table that your reporting_user need access to>
当我们第一次发现新表没有出现在我们的报告工具中时,我发现一个快速的解决方法是为受影响的组/用户重新执行以下 SQL 语句:
ALTER DEFAULT PRIVILEGES IN SCHEMA <SCHEMANAME> GRANT SELECT ON TABLES TO GROUP <USER/GROUPNAME>;
【讨论】:
在 Redshift 中,表和视图不会自动继承其父架构的权限。您新创建的表只能由创建它们的用户和超级用户访问。
在最近的 Redshift 补丁中,实施了一项授予默认权限的新功能来解决此问题。
以下代码 sn-p 将仅将销售模式中所有未来表的选择权限授予 sales_admin 组。如果您希望将其应用于架构中的现有表,则需要将其与第二个授权语句结合起来。
alter default privileges in schema sales grant select on tables to group sales_admin;
【讨论】:
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 PRIVILEGES 为 FOR USER target_user 和 IN SCHEMA target_schema 中的一个或两个,然后您授予或撤销 SELECT 或其他 USER 或 GROUP。令人困惑的是target_user 不是grant 或revoke 的目标,它是表的所有者(通常是创建者)。所以你真的需要运行类似alter default privileges for user table_owner in schema sales grant select on tables to group sales_admin; ...@SteveS 所说的内容
这是正常行为。默认情况下,只有对象所有者/超级用户有权使用该对象。
http://docs.aws.amazon.com/redshift/latest/dg/r_Privileges.html
您可以将grant 命令添加到您的create table 语句中,并为用户授予所需的权限。
【讨论】: