Eu quero criar uma função nomeada cp
com alguns privilégios definidos, então criaremos algumas outras funções que serão concedidas com a função cp. Eu sei que a Oracle pode fazer esse trabalho. Por exemplo , o grant resources to user_name;
que significa conceder a função de recursos a um usuário. Eu faço o seguinte teste no PostgreSQL, mas não funciona. Alguém sabe disso?
--create role cp and grant privilege
postgres=# create role cp login nosuperuser nocreatedb nocreaterole
noinherit encrypted password 'cp';
CREATE ROLE
postgres=# grant connect on database skytf to cp;
GRANT
postgres=# \c skytf skytf;
You are now connected to database "skytf" as user "skytf".
skytf=> grant usage on schema skytf to cp;
GRANT
skytf=> grant select on skytf.test_1 to cp;
GRANT
--create role cp_1, and grant cp role privilege to cp_1
skytf=> \c postgres postgres
You are now connected to database "postgres" as user "postgres".
postgres=# create role cp_1 login nosuperuser nocreatedb nocreaterole
noinherit encrypted password 'cp_1';
CREATE ROLE
skytf=# grant cp to cp_1;
GRANT ROLE
--test cp_1
skytf=# \c skytf cp_1;
You are now connected to database "skytf" as user "cp_1".
skytf=> select * from skytf.test_1 limit 1;
ERROR: permission denied for schema skytf
LINE 1: select * from skytf.test_1 limit 1;
Você está definindo explicitamente a função para
noinherit
, portanto, precisará usar antes de usar as permissões da função (mas acho que você provavelmente só quer )set role
cp
select
cp
inherit
Dos documentos :
Você está pedindo especificamente a pg para NÃO aplicar as funções de 'cp' ao usuário 'cp_1'.
Tente algo assim:
create role cp_1 login nosuperuser nocreatedb nocreaterole inherit encrypted password 'cp_1' in role cp