diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 8ef9fce..946bd4b 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -15142,7 +15142,11 @@ SET search_path TO schema , schema, .. lists functions that allow the user to query object access privileges programmatically. See for more information about - privileges. + privileges. In case if user wants to find out any privilege check + on the corresponding object, instead of providing individual/all + privileges, user can specify "any" as an privilege option. The + Access Prvilege Inquiry Functions returns true if the user have + any privileges on the object. diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c index 3ca168b..4685a51 100644 --- a/src/backend/utils/adt/acl.c +++ b/src/backend/utils/adt/acl.c @@ -2031,6 +2031,11 @@ convert_table_priv_string(text *priv_type_text) {"REFERENCES WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_REFERENCES)}, {"TRIGGER", ACL_TRIGGER}, {"TRIGGER WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_TRIGGER)}, + {"ANY", ACL_SELECT | ACL_GRANT_OPTION_FOR(ACL_SELECT) | + ACL_INSERT | ACL_GRANT_OPTION_FOR(ACL_INSERT) | ACL_UPDATE | + ACL_GRANT_OPTION_FOR(ACL_UPDATE) | ACL_DELETE | ACL_GRANT_OPTION_FOR(ACL_DELETE) | + ACL_TRUNCATE | ACL_GRANT_OPTION_FOR(ACL_TRUNCATE) | ACL_REFERENCES | + ACL_GRANT_OPTION_FOR(ACL_REFERENCES) | ACL_TRIGGER | ACL_GRANT_OPTION_FOR(ACL_TRIGGER)}, {"RULE", 0}, /* ignore old RULE privileges */ {"RULE WITH GRANT OPTION", 0}, {NULL, 0} @@ -2243,6 +2248,7 @@ convert_sequence_priv_string(text *priv_type_text) {"USAGE", ACL_USAGE}, {"SELECT", ACL_SELECT}, {"UPDATE", ACL_UPDATE}, + {"ANY", ACL_USAGE | ACL_SELECT | ACL_UPDATE}, {NULL, 0} }; @@ -2858,6 +2864,9 @@ convert_column_priv_string(text *priv_type_text) {"UPDATE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_UPDATE)}, {"REFERENCES", ACL_REFERENCES}, {"REFERENCES WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_REFERENCES)}, + {"ANY", ACL_SELECT | ACL_GRANT_OPTION_FOR(ACL_SELECT) | ACL_INSERT | + ACL_GRANT_OPTION_FOR(ACL_INSERT) | ACL_GRANT_OPTION_FOR(ACL_INSERT) | ACL_UPDATE | + ACL_GRANT_OPTION_FOR(ACL_UPDATE) | ACL_REFERENCES | ACL_GRANT_OPTION_FOR(ACL_REFERENCES)}, {NULL, 0} }; @@ -3055,6 +3064,9 @@ convert_database_priv_string(text *priv_type_text) {"TEMP WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE_TEMP)}, {"CONNECT", ACL_CONNECT}, {"CONNECT WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CONNECT)}, + {"ANY", ACL_CREATE | ACL_GRANT_OPTION_FOR(ACL_CREATE) | + ACL_CREATE_TEMP | ACL_GRANT_OPTION_FOR(ACL_CREATE_TEMP) | ACL_CREATE_TEMP | + ACL_GRANT_OPTION_FOR(ACL_CREATE_TEMP) | ACL_CONNECT | ACL_GRANT_OPTION_FOR(ACL_CONNECT)}, {NULL, 0} }; @@ -3238,6 +3250,7 @@ convert_foreign_data_wrapper_priv_string(text *priv_type_text) static const priv_map foreign_data_wrapper_priv_map[] = { {"USAGE", ACL_USAGE}, {"USAGE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_USAGE)}, + {"ANY", ACL_USAGE | ACL_GRANT_OPTION_FOR(ACL_USAGE)}, {NULL, 0} }; @@ -3438,6 +3451,7 @@ convert_function_priv_string(text *priv_type_text) static const priv_map function_priv_map[] = { {"EXECUTE", ACL_EXECUTE}, {"EXECUTE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_EXECUTE)}, + {"ANY", ACL_EXECUTE | ACL_GRANT_OPTION_FOR(ACL_EXECUTE)}, {NULL, 0} }; @@ -3629,6 +3643,7 @@ convert_language_priv_string(text *priv_type_text) static const priv_map language_priv_map[] = { {"USAGE", ACL_USAGE}, {"USAGE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_USAGE)}, + {"ANY", ACL_USAGE | ACL_GRANT_OPTION_FOR(ACL_USAGE)}, {NULL, 0} }; @@ -3822,6 +3837,7 @@ convert_schema_priv_string(text *priv_type_text) {"CREATE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE)}, {"USAGE", ACL_USAGE}, {"USAGE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_USAGE)}, + {"ANY", ACL_CREATE | ACL_GRANT_OPTION_FOR(ACL_CREATE) | ACL_USAGE | ACL_GRANT_OPTION_FOR(ACL_USAGE)}, {NULL, 0} }; @@ -4004,6 +4020,7 @@ convert_server_priv_string(text *priv_type_text) static const priv_map server_priv_map[] = { {"USAGE", ACL_USAGE}, {"USAGE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_USAGE)}, + {"ANY", ACL_USAGE | ACL_GRANT_OPTION_FOR(ACL_USAGE)}, {NULL, 0} }; @@ -4186,6 +4203,7 @@ convert_tablespace_priv_string(text *priv_type_text) static const priv_map tablespace_priv_map[] = { {"CREATE", ACL_CREATE}, {"CREATE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE)}, + {"ANY", ACL_CREATE | ACL_GRANT_OPTION_FOR(ACL_CREATE)}, {NULL, 0} }; @@ -4385,6 +4403,7 @@ convert_type_priv_string(text *priv_type_text) static const priv_map type_priv_map[] = { {"USAGE", ACL_USAGE}, {"USAGE WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_USAGE)}, + {"ANY", ACL_USAGE | ACL_GRANT_OPTION_FOR(ACL_USAGE)}, {NULL, 0} }; @@ -4566,6 +4585,7 @@ convert_role_priv_string(text *priv_type_text) {"USAGE WITH ADMIN OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE)}, {"MEMBER WITH GRANT OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE)}, {"MEMBER WITH ADMIN OPTION", ACL_GRANT_OPTION_FOR(ACL_CREATE)}, + {"ANY", ACL_USAGE | ACL_CREATE | ACL_GRANT_OPTION_FOR(ACL_CREATE)}, {NULL, 0} };