From ed3dc1f3cd8ea568aac42359f4b96c4a55c1306a Mon Sep 17 00:00:00 2001 From: ANJU BHARTI Date: Tue, 24 Sep 2024 03:17:44 +0000 Subject: [PATCH] Exclude granting dbo twhilesystem datbase creation Signed-off-by: ANJU BHARTI --- contrib/babelfishpg_tsql/src/dbcmds.c | 37 +++++++++++++++++++++------ 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/contrib/babelfishpg_tsql/src/dbcmds.c b/contrib/babelfishpg_tsql/src/dbcmds.c index 2e8a5533e2d..81311bc6a14 100644 --- a/contrib/babelfishpg_tsql/src/dbcmds.c +++ b/contrib/babelfishpg_tsql/src/dbcmds.c @@ -44,6 +44,16 @@ #define NOT_FOUND -1 +/* + * Return true if database is any of the three + * system databases "master", "tempdb", "msdb" + * else return false + */ +#define IS_BBF_SYSTEM_DB(dbname) \ +((strlen(dbname) == 6 && (strncmp(dbname, "master", 6) == 0)) || \ + ((strlen(dbname) == 6 && strncmp(dbname, "tempdb", 6) == 0)) || \ + (strlen(dbname) == 4 && (strncmp(dbname, "msdb", 4) == 0))) + Oid sys_babelfish_db_seq_oid = InvalidOid; static Oid get_sys_babelfish_db_seq_oid(void); @@ -104,7 +114,8 @@ gen_createdb_subcmds(const char *dbname, const char *owner) appendStringInfo(&query, "CREATE ROLE dummy CREATEROLE INHERIT; "); appendStringInfo(&query, "CREATE ROLE dummy INHERIT CREATEROLE ROLE sysadmin IN ROLE dummy; "); appendStringInfo(&query, "GRANT CREATE, CONNECT, TEMPORARY ON DATABASE dummy TO dummy; "); - appendStringInfo(&query, "GRANT dummy TO dummy; "); + if (!IS_BBF_SYSTEM_DB(dbname)) + appendStringInfo(&query, "GRANT dummy TO dummy; "); if (guest) { @@ -125,9 +136,17 @@ gen_createdb_subcmds(const char *dbname, const char *owner) res = raw_parser(query.data, RAW_PARSE_DEFAULT); if (guest) - expected_stmt_num = list_length(logins) > 0 ? 10 : 9; + if (!IS_BBF_SYSTEM_DB(dbname)) + expected_stmt_num = list_length(logins) > 0 ? 10 : 9; + else + expected_stmt_num = list_length(logins) > 0 ? 9 : 8; else - expected_stmt_num = 7; + { + expected_stmt_num = 6; + + if (!IS_BBF_SYSTEM_DB(dbname)) + expected_stmt_num++; + } if (list_length(res) != expected_stmt_num) ereport(ERROR, @@ -145,11 +164,13 @@ gen_createdb_subcmds(const char *dbname, const char *owner) stmt = parsetree_nth_stmt(res, i++); update_GrantStmt(stmt, get_database_name(MyDatabaseId), NULL, dbo, NULL); - /* Grant dbo role to owner */ - stmt = parsetree_nth_stmt(res, i++); - - update_GrantRoleStmt(stmt, list_make1(make_accesspriv_node(dbo)), - list_make1(make_rolespec_node(owner))); + if (!IS_BBF_SYSTEM_DB(dbname)) + { + /* Grant dbo role to owner */ + stmt = parsetree_nth_stmt(res, i++); + update_GrantRoleStmt(stmt, list_make1(make_accesspriv_node(dbo)), + list_make1(make_rolespec_node(owner))); + } if (guest) {