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>
Copy

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 de object_type, por exemplo, TABLE ou WAREHOUSE.

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 ou WAREHOUSES.

É 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;
Copy

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;
Copy

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;
Copy

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;
Copy

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;
Copy