我想通过创建两个新用户并授予他们访问其相关模式的权限,在 redshift 中分离对两个现有数据模式(已创建表(的访问权限。
因此,user_1
应该只能访问schema_1
,而user_2
应该只能访问schema_2
。
通过访问,我的意思是用户应该能够从所有当前表SELECT, INSERT, UPDATE, DELETE, DROP
(无论谁创建它们(并在其架构上CREATE
新表。
我找到了以下语句来创建新用户并为他们提供特定的访问类型:
创建新用户:
CREATE USER user_1 WITH PASSWORD 'password_1';
向给定架构授予使用权限:
GRANT USAGE ON SCHEMA "schema_1" TO user_1;
分配权限:
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA "schema_1" TO user_1;
更改默认权限以维护对新表的权限
ALTER DEFAULT PRIVILEGES IN SCHEMA "schema_1" GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO user_1;
在文档中,它显示了如何添加除DROP
表之外所需的所有权限。在测试此功能时,它会出错ERROR: must be owner of relation table_to_drop
.
或者,我尝试授予以下所有特权...
GRANT ALL TABLES IN SCHEMA "schema_1" TO user_1;
。但这不会覆盖它需要成为删除它的表的所有者的要求。
所以问题是是否可以如上所述将用户限制为具有访问权限的给定架构?
只有表的所有者、架构所有者或超级用户可以删除表。 因此,user_1应该是schema_1的所有者,如果您希望他们能够将表放在各自的架构中,user_2应该是schema_2的所有者。
我假设user_1和user_2不是超级用户,或者这个问题没有实际意义。