Обсуждение: doc sql-grant.html Synopsis error?

Поиск
Список
Период
Сортировка

doc sql-grant.html Synopsis error?

От
jian he
Дата:

Hi.
--work as intended.
grant ALL PRIVILEGES on FUNCTION pg_catalog.pg_reload_conf() to test;
grant ALL PRIVILEGES on FUNCTION pg_reload_conf() to test;

-------------errors. it should be work, or I interpret the doc the wrong way?
GRANT ALL PRIVILEGES ON FUNCTION pg_reload_conf() IN SCHEMA pg_catalog TO test;
GRANT ALL PRIVILEGES ON FUNCTION pg_catalog.pg_reload_conf() IN SCHEMA pg_catalog TO test;

GRANT { EXECUTE | ALL [ PRIVILEGES ] }    ON { { FUNCTION | PROCEDURE | ROUTINE } routine_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...]         | ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA schema_name [, ...] }    TO role_specification [, ...] [ WITH GRANT OPTION ]    [ GRANTED BY role_specification ]
I am using postgres 16, but the grant function part does not change.
What did I miss?

Re: doc sql-grant.html Synopsis error?

От
Achilleas Mantzios
Дата:
Στις 8/4/23 15:58, ο/η jian he έγραψε:

Hi.
--work as intended.
grant ALL PRIVILEGES on FUNCTION pg_catalog.pg_reload_conf() to test;
grant ALL PRIVILEGES on FUNCTION pg_reload_conf() to test;

-------------errors. it should be work, or I interpret the doc the wrong way?
GRANT ALL PRIVILEGES ON FUNCTION pg_reload_conf() IN SCHEMA pg_catalog TO test;
GRANT ALL PRIVILEGES ON FUNCTION pg_catalog.pg_reload_conf() IN SCHEMA pg_catalog TO test;

GRANT { EXECUTE | ALL [ PRIVILEGES ] }    ON { { FUNCTION | PROCEDURE | ROUTINE } routine_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...]         | ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA schema_name [, ...] }    TO role_specification [, ...] [ WITH GRANT OPTION ]    [ GRANTED BY role_specification ]
I am using postgres 16, but the grant function part does not change.
What did I miss?

Hello, You missed the docs. The "IN SCHEMA" version always goes with ALL FUNCTIONS in the beginning. What would be the point specifying pg_catalog.pg_reload_conf() IN SCHEMA pg_catalog, i.e. giving the SCHEMA twice ?

-- 
Achilleas Mantzios IT DEV - HEAD IT DEPT Dynacom Tankers Mgmt

Re: doc sql-grant.html Synopsis error?

От
Adrian Klaver
Дата:
On 4/8/23 06:07, Achilleas Mantzios wrote:
> Στις 8/4/23 15:58, ο/η jian he έγραψε:
>>
>> Hi.
>> --work as intended.
>> grant ALL PRIVILEGES on FUNCTION pg_catalog.pg_reload_conf() to test;
>> grant ALL PRIVILEGES on FUNCTION pg_reload_conf() to test;
>>
>> -------------errors. it should be work, or I interpret the doc the 
>> wrong way?
>> GRANT ALL PRIVILEGES ON FUNCTION pg_reload_conf() IN SCHEMA pg_catalog 
>> TO test;
>> GRANT ALL PRIVILEGES ON FUNCTION pg_catalog.pg_reload_conf() IN SCHEMA 
>> pg_catalog TO test;
>>
>> doc: https://www.postgresql.org/docs/current/sql-grant.html
>> GRANT { EXECUTE | ALL [ PRIVILEGES ] }
>>      ON { { FUNCTION | PROCEDURE | ROUTINE }/|routine_name|/  [ ( [ [/|argmode|/  ] [/|arg_name|/  ]/|arg_type|/  [,
...]] ) ] [, ...]
 
>>           | ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA/|schema_name|/  [, ...] }
>>      TO/|role_specification|/  [, ...] [ WITH GRANT OPTION ]
>>      [ GRANTED BY/|role_specification|/  ]
>> I am using postgres 16, but the grant function part does not change.
>> What did I miss?
> 
> Hello, You missed the docs. The "IN SCHEMA" version always goes with ALL 
> FUNCTIONS in the beginning. What would be the point specifying 
> pg_catalog.pg_reload_conf() IN SCHEMA pg_catalog, i.e. giving the SCHEMA 
> twice ?

To be a little clearer to use IN SCHEMA the command would be:

GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA pg_catalog TO test;

Where ALL FUNCTIONS IN SCHEMA is a bulk operation over the functions in 
the schema per the docs:

https://www.postgresql.org/docs/current/sql-grant.html

"There is also an option to grant privileges on all objects of the same 
type within one or more schemas. This functionality is currently 
supported only for tables, sequences, functions, and procedures. ALL 
TABLES also affects views and foreign tables, just like the 
specific-object GRANT command. ALL FUNCTIONS also affects aggregate and 
window functions, but not procedures, again just like the 
specific-object GRANT command. Use ALL ROUTINES to include procedures."

Since you are looking to GRANT to a specific function you need to schema 
qualify the function name as IN SCHEMA is not available in that form of 
the command.


> 
> -- 
> Achilleas Mantzios
>   IT DEV - HEAD
>   IT DEPT
>   Dynacom Tankers Mgmt
> 

-- 
Adrian Klaver
adrian.klaver@aklaver.com