我想通过创建两个新用户并授予他们对相关模式的访问权限,来在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;
在documentation中,它显示了如何添加DROP
表以外的所有必需特权。测试时,它会与ERROR: must be owner of relation table_to_drop
错误。
我也尝试授予以下所有特权...
GRANT ALL TABLES IN SCHEMA "schema_1" TO user_1;
...但是,这并不能覆盖需要成为放置表的所有者才能删除它的要求。
那么问题是,是否有可能如上所述限制用户使用给定模式?
答案 0 :(得分:0)
只有表的所有者,模式所有者或超级用户才能删除表。因此,如果希望用户能够在各自的架构中删除表,则user_1应该是schema_1的所有者,而user_2应该是schema_2的所有者。
我假设user_1和user_2不是超级用户,或者这个问题没有意义。