ALTER SCHEMA NAME 是不是会影响对 Redshift 中架构的权限授予

Posted

技术标签:

【中文标题】ALTER SCHEMA NAME 是不是会影响对 Redshift 中架构的权限授予【英文标题】:Does ALTER SCHEMA NAME affect permission grants to the schema in RedshiftALTER SCHEMA NAME 是否会影响对 Redshift 中架构的权限授予 【发布时间】:2020-05-13 16:34:38 【问题描述】:

如果我更新一个已经设置了一堆权限以访问具有不同访问权限的其他架构的架构,更新名称会撤消这些授权还是它们会保留在原地? Redshift 在他们的文档中将以下内容列为run an alter schema 的语法,但没有写下是否会影响授权:

ALTER SCHEMA schema_name

RENAME TO new_name |
OWNER TO new_owner |
QUOTA  quota [MB | GB | TB] | UNLIMITED 

我的假设是现有赠款不会改变,但我想确保在改变生效之前。

【问题讨论】:

【参考方案1】:

你是对的。更改名称不会更改基础权限。您可以在新的 /dev 集群中自己测试这一点,方法是确保在更改表名之前和之后权限返回相同。但是,更改所有者会影响所有者级别的权限。

CREATE SCHEMA dev;

CREATE TABLE dev.test_table AS (SELECT 1 AS t);

GRANT USAGE ON SCHEMA dev TO “username_here”;

GRANT SELECT ON TABLE dev.test_table TO “username_here”;

SELECT u.usename,
   s.schemaname,
   s.tablename,
   has_table_privilege(u.usename, s.schemaname || ‘.’ || s.tablename, ‘select’) AS user_has_table_select,
   has_schema_privilege(u.usename,s.schemaname,‘create’) AS user_has_schema_create,
   has_schema_privilege(u.usename,s.schemaname,‘usage’) AS user_has_schema_usage
FROM pg_user u
     CROSS JOIN
     (SELECT schemaname, tablename FROM pg_tables) s
WHERE s.schemaname in (‘dev’, ‘uat’)

ALTER SCHEMA dev rename TO uat;

SELECT u.usename,
   s.schemaname,
   s.tablename,
   has_table_privilege(u.usename, s.schemaname || ‘.’ || s.tablename, ‘select’) AS user_has_table_select,
   has_schema_privilege(u.usename,s.schemaname,‘create’) AS user_has_schema_create,
   has_schema_privilege(u.usename,s.schemaname,‘usage’) AS user_has_schema_usage
FROM pg_user u
     CROSS JOIN
     (SELECT schemaname, tablename FROM pg_tables) s
WHERE s.schemaname in (‘dev’, ‘uat’)

【讨论】:

以上是关于ALTER SCHEMA NAME 是不是会影响对 Redshift 中架构的权限授予的主要内容,如果未能解决你的问题,请参考以下文章

SQL基础语法—其他语句

在 alter table drop column 之后优化表是不是有意义?

ONLINE DDL VS PT-ONLINE-SCHEMA-CHANGE

pt-online-schema-change 在线修改表结构

pt-online-schema-change使用参数说明

ORACLE-1:虚拟列影响alter修改表字段操作!