mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-17 11:03:36 +08:00
Fix role type deparsing for GRANT command
This change fixes GRANT command deparsing by including handling of the special role types such as: PUBLIC, CURRENT_USER, SESSION_USER and CURRENT_ROLE (PG14). Fix #3910
This commit is contained in:
parent
765d7375ce
commit
519e5de21c
@ -980,10 +980,30 @@ deparse_grant_revoke_on_database(const GrantStmt *stmt, const char *dbname)
|
||||
foreach (lc, stmt->grantees)
|
||||
{
|
||||
RoleSpec *role_spec = lfirst(lc);
|
||||
|
||||
const char *role_name = NULL;
|
||||
switch (role_spec->roletype)
|
||||
{
|
||||
case ROLESPEC_CSTRING:
|
||||
role_name = role_spec->rolename;
|
||||
break;
|
||||
case ROLESPEC_PUBLIC:
|
||||
role_name = "PUBLIC";
|
||||
break;
|
||||
case ROLESPEC_SESSION_USER:
|
||||
role_name = "SESSION_USER";
|
||||
break;
|
||||
case ROLESPEC_CURRENT_USER:
|
||||
role_name = "CURRENT_USER";
|
||||
break;
|
||||
#if PG14
|
||||
case ROLESPEC_CURRENT_ROLE:
|
||||
role_name = "CURRENT_ROLE";
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
appendStringInfo(command,
|
||||
"%s%s ",
|
||||
role_spec->rolename,
|
||||
role_name,
|
||||
lnext_compat(stmt->grantees, lc) != NULL ? "," : "");
|
||||
}
|
||||
|
||||
|
@ -1083,6 +1083,27 @@ DEBUG: [data1]: REVOKE ALL ON DATABASE db_dist_grant_1 FROM cluster_super_user
|
||||
DEBUG: [data2]: REVOKE ALL ON DATABASE db_dist_grant_2 FROM cluster_super_user
|
||||
DEBUG: [data3]: REVOKE ALL ON DATABASE db_dist_grant_3 FROM cluster_super_user
|
||||
DEBUG: [data4]: REVOKE ALL ON DATABASE db_dist_grant_4 FROM cluster_super_user
|
||||
-- Grant to specific role types
|
||||
GRANT TEMP, TEMPORARY ON DATABASE :TEST_DBNAME TO PUBLIC;
|
||||
DEBUG: [data1]: GRANT temp, temporary ON DATABASE db_dist_grant_1 TO PUBLIC
|
||||
DEBUG: [data2]: GRANT temp, temporary ON DATABASE db_dist_grant_2 TO PUBLIC
|
||||
DEBUG: [data3]: GRANT temp, temporary ON DATABASE db_dist_grant_3 TO PUBLIC
|
||||
DEBUG: [data4]: GRANT temp, temporary ON DATABASE db_dist_grant_4 TO PUBLIC
|
||||
GRANT TEMP, TEMPORARY ON DATABASE :TEST_DBNAME TO CURRENT_USER;
|
||||
DEBUG: [data1]: GRANT temp, temporary ON DATABASE db_dist_grant_1 TO CURRENT_USER
|
||||
DEBUG: [data2]: GRANT temp, temporary ON DATABASE db_dist_grant_2 TO CURRENT_USER
|
||||
DEBUG: [data3]: GRANT temp, temporary ON DATABASE db_dist_grant_3 TO CURRENT_USER
|
||||
DEBUG: [data4]: GRANT temp, temporary ON DATABASE db_dist_grant_4 TO CURRENT_USER
|
||||
GRANT TEMP, TEMPORARY ON DATABASE :TEST_DBNAME TO SESSION_USER, :ROLE_CLUSTER_SUPERUSER;
|
||||
DEBUG: [data1]: GRANT temp, temporary ON DATABASE db_dist_grant_1 TO SESSION_USER, cluster_super_user
|
||||
DEBUG: [data2]: GRANT temp, temporary ON DATABASE db_dist_grant_2 TO SESSION_USER, cluster_super_user
|
||||
DEBUG: [data3]: GRANT temp, temporary ON DATABASE db_dist_grant_3 TO SESSION_USER, cluster_super_user
|
||||
DEBUG: [data4]: GRANT temp, temporary ON DATABASE db_dist_grant_4 TO SESSION_USER, cluster_super_user
|
||||
-- PG14 added support for CURRENT_ROLE
|
||||
\set ON_ERROR_STOP 0
|
||||
GRANT TEMP, TEMPORARY ON DATABASE :TEST_DBNAME TO CURRENT_ROLE;
|
||||
ERROR: syntax error at or near "CURRENT_ROLE" at character 52
|
||||
\set ON_ERROR_STOP 1
|
||||
-- Grant on other database should not be propagated
|
||||
GRANT CREATE ON DATABASE :DN_DBNAME_1 TO :ROLE_CLUSTER_SUPERUSER;
|
||||
-- Prevent mixing databases
|
||||
|
@ -1083,6 +1083,27 @@ DEBUG: [data1]: REVOKE ALL ON DATABASE db_dist_grant_1 FROM cluster_super_user
|
||||
DEBUG: [data2]: REVOKE ALL ON DATABASE db_dist_grant_2 FROM cluster_super_user
|
||||
DEBUG: [data3]: REVOKE ALL ON DATABASE db_dist_grant_3 FROM cluster_super_user
|
||||
DEBUG: [data4]: REVOKE ALL ON DATABASE db_dist_grant_4 FROM cluster_super_user
|
||||
-- Grant to specific role types
|
||||
GRANT TEMP, TEMPORARY ON DATABASE :TEST_DBNAME TO PUBLIC;
|
||||
DEBUG: [data1]: GRANT temp, temporary ON DATABASE db_dist_grant_1 TO PUBLIC
|
||||
DEBUG: [data2]: GRANT temp, temporary ON DATABASE db_dist_grant_2 TO PUBLIC
|
||||
DEBUG: [data3]: GRANT temp, temporary ON DATABASE db_dist_grant_3 TO PUBLIC
|
||||
DEBUG: [data4]: GRANT temp, temporary ON DATABASE db_dist_grant_4 TO PUBLIC
|
||||
GRANT TEMP, TEMPORARY ON DATABASE :TEST_DBNAME TO CURRENT_USER;
|
||||
DEBUG: [data1]: GRANT temp, temporary ON DATABASE db_dist_grant_1 TO CURRENT_USER
|
||||
DEBUG: [data2]: GRANT temp, temporary ON DATABASE db_dist_grant_2 TO CURRENT_USER
|
||||
DEBUG: [data3]: GRANT temp, temporary ON DATABASE db_dist_grant_3 TO CURRENT_USER
|
||||
DEBUG: [data4]: GRANT temp, temporary ON DATABASE db_dist_grant_4 TO CURRENT_USER
|
||||
GRANT TEMP, TEMPORARY ON DATABASE :TEST_DBNAME TO SESSION_USER, :ROLE_CLUSTER_SUPERUSER;
|
||||
DEBUG: [data1]: GRANT temp, temporary ON DATABASE db_dist_grant_1 TO SESSION_USER, cluster_super_user
|
||||
DEBUG: [data2]: GRANT temp, temporary ON DATABASE db_dist_grant_2 TO SESSION_USER, cluster_super_user
|
||||
DEBUG: [data3]: GRANT temp, temporary ON DATABASE db_dist_grant_3 TO SESSION_USER, cluster_super_user
|
||||
DEBUG: [data4]: GRANT temp, temporary ON DATABASE db_dist_grant_4 TO SESSION_USER, cluster_super_user
|
||||
-- PG14 added support for CURRENT_ROLE
|
||||
\set ON_ERROR_STOP 0
|
||||
GRANT TEMP, TEMPORARY ON DATABASE :TEST_DBNAME TO CURRENT_ROLE;
|
||||
ERROR: syntax error at or near "CURRENT_ROLE" at character 52
|
||||
\set ON_ERROR_STOP 1
|
||||
-- Grant on other database should not be propagated
|
||||
GRANT CREATE ON DATABASE :DN_DBNAME_1 TO :ROLE_CLUSTER_SUPERUSER;
|
||||
-- Prevent mixing databases
|
||||
|
@ -1083,6 +1083,30 @@ DEBUG: [data1]: REVOKE ALL ON DATABASE db_dist_grant_1 FROM cluster_super_user
|
||||
DEBUG: [data2]: REVOKE ALL ON DATABASE db_dist_grant_2 FROM cluster_super_user
|
||||
DEBUG: [data3]: REVOKE ALL ON DATABASE db_dist_grant_3 FROM cluster_super_user
|
||||
DEBUG: [data4]: REVOKE ALL ON DATABASE db_dist_grant_4 FROM cluster_super_user
|
||||
-- Grant to specific role types
|
||||
GRANT TEMP, TEMPORARY ON DATABASE :TEST_DBNAME TO PUBLIC;
|
||||
DEBUG: [data1]: GRANT temp, temporary ON DATABASE db_dist_grant_1 TO PUBLIC
|
||||
DEBUG: [data2]: GRANT temp, temporary ON DATABASE db_dist_grant_2 TO PUBLIC
|
||||
DEBUG: [data3]: GRANT temp, temporary ON DATABASE db_dist_grant_3 TO PUBLIC
|
||||
DEBUG: [data4]: GRANT temp, temporary ON DATABASE db_dist_grant_4 TO PUBLIC
|
||||
GRANT TEMP, TEMPORARY ON DATABASE :TEST_DBNAME TO CURRENT_USER;
|
||||
DEBUG: [data1]: GRANT temp, temporary ON DATABASE db_dist_grant_1 TO CURRENT_USER
|
||||
DEBUG: [data2]: GRANT temp, temporary ON DATABASE db_dist_grant_2 TO CURRENT_USER
|
||||
DEBUG: [data3]: GRANT temp, temporary ON DATABASE db_dist_grant_3 TO CURRENT_USER
|
||||
DEBUG: [data4]: GRANT temp, temporary ON DATABASE db_dist_grant_4 TO CURRENT_USER
|
||||
GRANT TEMP, TEMPORARY ON DATABASE :TEST_DBNAME TO SESSION_USER, :ROLE_CLUSTER_SUPERUSER;
|
||||
DEBUG: [data1]: GRANT temp, temporary ON DATABASE db_dist_grant_1 TO SESSION_USER, cluster_super_user
|
||||
DEBUG: [data2]: GRANT temp, temporary ON DATABASE db_dist_grant_2 TO SESSION_USER, cluster_super_user
|
||||
DEBUG: [data3]: GRANT temp, temporary ON DATABASE db_dist_grant_3 TO SESSION_USER, cluster_super_user
|
||||
DEBUG: [data4]: GRANT temp, temporary ON DATABASE db_dist_grant_4 TO SESSION_USER, cluster_super_user
|
||||
-- PG14 added support for CURRENT_ROLE
|
||||
\set ON_ERROR_STOP 0
|
||||
GRANT TEMP, TEMPORARY ON DATABASE :TEST_DBNAME TO CURRENT_ROLE;
|
||||
DEBUG: [data1]: GRANT temp, temporary ON DATABASE db_dist_grant_1 TO CURRENT_ROLE
|
||||
DEBUG: [data2]: GRANT temp, temporary ON DATABASE db_dist_grant_2 TO CURRENT_ROLE
|
||||
DEBUG: [data3]: GRANT temp, temporary ON DATABASE db_dist_grant_3 TO CURRENT_ROLE
|
||||
DEBUG: [data4]: GRANT temp, temporary ON DATABASE db_dist_grant_4 TO CURRENT_ROLE
|
||||
\set ON_ERROR_STOP 1
|
||||
-- Grant on other database should not be propagated
|
||||
GRANT CREATE ON DATABASE :DN_DBNAME_1 TO :ROLE_CLUSTER_SUPERUSER;
|
||||
-- Prevent mixing databases
|
||||
|
@ -315,6 +315,15 @@ REVOKE ALL ON DATABASE :TEST_DBNAME FROM :ROLE_CLUSTER_SUPERUSER;
|
||||
REVOKE ALL ON DATABASE :TEST_DBNAME FROM :ROLE_CLUSTER_SUPERUSER CASCADE;
|
||||
REVOKE ALL ON DATABASE :TEST_DBNAME FROM :ROLE_CLUSTER_SUPERUSER RESTRICT;
|
||||
|
||||
-- Grant to specific role types
|
||||
GRANT TEMP, TEMPORARY ON DATABASE :TEST_DBNAME TO PUBLIC;
|
||||
GRANT TEMP, TEMPORARY ON DATABASE :TEST_DBNAME TO CURRENT_USER;
|
||||
GRANT TEMP, TEMPORARY ON DATABASE :TEST_DBNAME TO SESSION_USER, :ROLE_CLUSTER_SUPERUSER;
|
||||
-- PG14 added support for CURRENT_ROLE
|
||||
\set ON_ERROR_STOP 0
|
||||
GRANT TEMP, TEMPORARY ON DATABASE :TEST_DBNAME TO CURRENT_ROLE;
|
||||
\set ON_ERROR_STOP 1
|
||||
|
||||
-- Grant on other database should not be propagated
|
||||
GRANT CREATE ON DATABASE :DN_DBNAME_1 TO :ROLE_CLUSTER_SUPERUSER;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user