ALTER SCHEMA NAME 是否影响对 Redshift 中模式的权限授予
Does ALTER SCHEMA NAME affect permission grants to the schema in Redshift
如果我更新一个架构,该架构设置有一系列权限以访问具有不同访问权限的其他架构,更新名称会撤消这些授权还是它们会保留在原地?
Redshift 在其文档中将以下内容列为 run an alter schema 的语法,但如果授权会受到影响则不会写入:
ALTER SCHEMA schema_name
{
RENAME TO new_name |
OWNER TO new_owner |
QUOTA { quota [MB | GB | TB] | UNLIMITED }
}
我的假设是现有赠款不会发生变化,但我想在变化生效之前确认一下。
你是对的。更改名称不会更改基础权限。您可以通过确保权限 return 在更改 table 名称之前和之后相同,在新的 /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’)
如果我更新一个架构,该架构设置有一系列权限以访问具有不同访问权限的其他架构,更新名称会撤消这些授权还是它们会保留在原地? Redshift 在其文档中将以下内容列为 run an alter schema 的语法,但如果授权会受到影响则不会写入:
ALTER SCHEMA schema_name
{
RENAME TO new_name |
OWNER TO new_owner |
QUOTA { quota [MB | GB | TB] | UNLIMITED }
}
我的假设是现有赠款不会发生变化,但我想在变化生效之前确认一下。
你是对的。更改名称不会更改基础权限。您可以通过确保权限 return 在更改 table 名称之前和之后相同,在新的 /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’)