GRANT CALLER¶
Concede permissões de chamador a uma função. Se um executável de propriedade da função for executado com direitos restritos do chamador, ele só poderá ser executado com os privilégios do chamador especificados pelas concessões do chamador.
As variações do comando GRANT CALLER são as seguintes:
GRANT CALLER – Concede permissões ao chamador em um objeto específico. Cada concessão de chamador criada pela instrução permite que o executável seja executado com um privilégio específico.
GRANT ALL CALLER PRIVILEGES – Concede permissões ao chamador sobre um objeto específico. As concessões do chamador criadas pela instrução permitem que o executável seja executado com todos os privilégios do chamador.
GRANT INHERITED CALLER – Concede permissões ao chamador em todos os objetos atuais e futuros do mesmo tipo quando eles compartilham um esquema, banco de dados ou conta comum. Cada concessão de chamador criada pela instrução permite que o executável seja executado com um privilégio específico.
GRANT ALL INHERITED CALLER PRIVILEGES – Concede permissões ao chamador sobre todos os objetos atuais e futuros do mesmo tipo quando eles compartilham um esquema, banco de dados ou conta comum. As concessões do chamador criadas pela instrução permitem que o executável seja executado com todos os privilégios do chamador.
Sintaxe¶
GRANT CALLER <object_privilege> [ , <object_privilege> ... ]
ON <object_type> <object_name>
TO { ROLE | DATABASE ROLE } <grantee_name>
GRANT ALL CALLER PRIVILEGES
ON <object_type> <object_name>
TO { ROLE | DATABASE ROLE } <grantee_name>
GRANT INHERITED CALLER <object_privilege> [ , <object_privilege> ... ]
ON ALL <object_type_plural>
IN { ACCOUNT | DATABASE <db_name> | SCHEMA <schema_name> | APPLICATION <app_name> | APPLICATION PACKAGE <app_pkg_name> }
TO { ROLE | DATABASE ROLE } <grantee_name>
GRANT ALL INHERITED CALLER PRIVILEGES
ON ALL <object_type_plural>
IN { ACCOUNT | DATABASE <db_name> | SCHEMA <schema_name> | APPLICATION <app_name> | APPLICATION PACKAGE <app_pkg_name> }
TO { ROLE | DATABASE ROLE } <grantee_name>
Parâmetros¶
object_privilege [ , object_privilege ... ]
Os privilégios de objeto com os quais os executáveis podem ser executados. Para obter uma lista de privilégios para um tipo de objeto específico, consulte Privilégios de controle de acesso.
Use uma lista delimitada por vírgulas para especificar mais de um privilégio de objeto.
ON object_type object_name
Permite que um executável seja executado com o
object_privilege
especificado ao acessar o objeto especificado (object_name
). Use a forma singular deobject_type
, por exemplo,TABLE
ouWAREHOUSE
.ON ALL object_type_plural IN ACCOUNT
ou .ON ALL object_type_pluarl IN DATABASE db_name
ou .ON ALL object_type_plural IN SCHEMA schema_name
ou .ON ALL object_type_plural IN APPLICATION app_name
ou .ON ALL object_type_plural IN APPLICATION PACKAGE app_pkg_name
Permite que um executável seja executado com privilégios no nível do objeto ao acessar um objeto do tipo especificado. Use a forma plural do tipo de objeto, por exemplo,
TABLES
ouWAREHOUSES
.É possível usar a instrução GRANT para controlar o acesso a todos os objetos da conta atual ou apenas aos objetos do banco de dados, esquema, aplicativo ou pacote de aplicativos especificado.
TO ROLE grantee_name
ou .TO DATABASE ROLE grantee_name
Proprietário dos executáveis que você deseja proteger com concessões do chamador.
Se você especificar uma função de banco de dados, os privilégios serão limitados a objetos no mesmo banco de dados que a função de banco de dados.
Requisitos de controle de acesso¶
A função usada para executar essa operação deve ter, no mínimo, os seguintes privilégios:
Privilégio |
Objeto |
Notas |
---|---|---|
MANAGE CALLER GRANTS |
Conta |
O privilégio MANAGE CALLER GRANTS em nível de conta refere-se apenas às concessões do chamador. Ele não permite que você conceda privilégios a funções. |
Qualquer privilégio |
Todos os objetos especificados |
Você precisa de pelo menos um privilégio nos objetos especificados na concessão do chamador. Por exemplo, a atribuição de uma concessão de chamador a uma tabela exige que você tenha pelo menos um privilégio nessa tabela. |
Para instruções sobre como criar uma função personalizada com um conjunto específico de privilégios, consulte Criação de funções personalizadas.
Para informações gerais sobre concessões de funções e privilégios para executar ações de SQL em objetos protegíveis, consulte Visão geral do controle de acesso.
Exemplos¶
Os executáveis pertencentes a owner_role
que acessam uma exibição v1
podem ser executados com o privilégio SELECT na exibição:
GRANT CALLER SELECT ON VIEW v1 TO owner_role;
Os executáveis pertencentes a owner_role
que acessam qualquer tabela no esquema db.sch
podem ser executados com os privilégios SELECT e INSERT do chamador.
GRANT INHERITED CALLER SELECT, INSERT ON ALL TABLES IN SCHEMA db.sch TO ROLE owner_role;
Os executáveis pertencentes a owner_role
que acessam esquemas na conta atual podem ser executados com todos os privilégios do chamador nos esquemas.
GRANT ALL INHERITED CALLER PRIVILEGES ON ALL SCHEMAS IN ACCOUNT TO ROLE owner_role;
Os executáveis pertencentes à função de banco de dados db.r
que acessam a tabela db.sch1.t1
podem ser executados com o privilégio SELECT na tabela.
GRANT CALLER SELECT ON TABLE db.sch1.t1 TO DATABASE ROLE db.r;
Os executáveis pertencentes a owner_role
que acessam o banco de dados my_db
podem ser executados com todos os privilégios do chamador no banco de dados.
GRANT ALL CALLER PRIVILEGES ON DATABASE my_db TO ROLE owner_role;