我想通过创建两个新用户并授予他们对相关模式的访问权限,来分离对redshift中的两个现有数据模式(已经创建了表)的访问。
因此,user_1
应该只能访问schema_1
,而user_2
应该只能访问schema_2
。
通过access,我的意思是用户应该能够从所有当前表(无论是谁创建的)中执行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以维护对新表的权限
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;
...but这不会覆盖这样的要求,即它必须是所删除的表的所有者才能删除它。
因此问题是,是否可以将用户限制为具有上述访问权限的给定模式?
发布于 2019-04-24 03:05:35
只有表的所有者、架构所有者或超级用户才能删除表。因此,如果您希望user_1能够在各自的模式中删除表,那么它们应该是schema_1的所有者,而user_2应该是schema_2的所有者。
我假设user_1和user_2不是超级用户,或者这个问题没有意义。
https://stackoverflow.com/questions/52591903
复制相似问题