Categorias:

Funções de contexto

POLICY_CONTEXT

Simula o resultado da consulta para colunas de tabela ou exibição protegidas por uma política de mascaramento, uma tabela ou exibição protegida por uma política de acesso a linhas, ou ambas se a tabela ou exibição estiver protegida por ambos os tipos de políticas.

Sintaxe

EXECUTE USING
POLICY_CONTEXT( <arg_1> => '<string_literal>' [ , <arg_2> => '<string_literal>' , ... , <arg_n> => '<string_literal>' ] )
AS
SELECT <query>
Copy

Argumentos

arg_1 => 'string_literal'

Especifica uma função de contexto e seu valor como uma cadeia de caracteres.

Obrigatório. Você deve especificar pelo menos uma função e seu valor.

O Snowflake oferece suporte às seguintes funções de contexto e seus valores como argumentos:

Para determinar o formato a ser usado como um valor de cadeia de caracteres, execute uma consulta usando a função. Por exemplo:

SELECT CURRENT_USER();

+----------------+
| CURRENT_USER() |
|----------------|
| JSMITH         |
+----------------+
Copy

O valor da cadeia de caracteres deve ser 'JSMITH'.

Observe que se especificar CURRENT_AVAILABLE_ROLES e valores múltiplos de funções, tais como ROLE1 e ROLE2, inclua a lista de funções entre colchetes como segue:

['ROLE1', 'ROLE2']

arg_2 => 'string_literal' , ... , arg_n => 'string_literal'

Especifica uma lista separada por vírgulas de uma função de contexto e seu valor como uma cadeia de caracteres.

Opcional.

query

Especifica a expressão SQL para consultar uma ou mais tabelas ou exibições.

Obrigatório.

Notas de uso

  • Esta função exige o seguinte:

    • Pelo menos um argumento que especifica uma função de contexto suportada e seu valor.

    • Se uma tabela for protegida por uma política, o usuário ou função especificada deve ter os seguintes privilégios:

      • OWNERSHIP sobre a tabela ou exibição, e

      • O privilégio APPLY para a política, seja no nível da conta ou na própria política:

        • APPLY MASKING POLICY em ACCOUNT ou APPLY em MASKING POLICY policy_name

        • APPLY ROW ACCESS POLICY em ACCOUNT ou APPLY em ROW ACCESS POLICY policy_name

  • O Snowflake retorna uma mensagem de erro se alguma das seguintes condições for verdadeira:

    • Uso de uma ou mais funções não suportadas como argumento. O Snowflake oferece suporte apenas às funções listadas na seção Argumentos.

    • Não especificar corretamente um valor de cadeia de caracteres de funções, incluindo o uso de uma cadeia de caracteres para um valor que não existe (por exemplo, sem conta, usuário ou função).

    • A expressão SELECT query não consulta uma tabela ou exibição adequadamente (por exemplo, não especifica uma tabela ou exibição de forma alguma).

    • Certos casos de uso de compartilhamento de dados (consulte o próximo ponto).

  • Compartilhamento de dados:

    • Um consumidor que compartilha dados não pode usar esta função para simular resultados de consultas em tabelas ou exibições que foram disponibilizadas pelo provedor de compartilhamento de dados.

      Além disso, se a expressão do consumidor query incluir uma tabela ou exibição disponibilizada através de Secure Data Sharing e outra tabela ou exibição na conta do consumidor não associada à conta do provedor de compartilhamento de dados (ou seja, sua própria tabela ou exibição), o Snowflake retorna uma mensagem de erro.

    • Uma conta do provedor de compartilhamento de dados pode simular como uma conta de consumidor de compartilhamento de dados vê tabelas ou exibições disponibilizadas através de uma ação.

      Para fazer isso, o provedor de compartilhamento de dados especifica o nome da conta do consumidor como o argumento. Por exemplo:

      execute using policy_context(current_account => '<consumer_account_name>') ... ;
      
      Copy
  • O resultado depende do seguinte:

    • A política de mascaramento que é definida em uma coluna, se houver.

    • A política de acesso a linhas sobre a tabela ou exibição, se houver.

    • A(s) definição(ões) da(s) política(s).

    • A expressão query.

    • Os privilégios concedidos às funções.

    • As funções concedidas aos usuários (incluindo a hierarquia de funções).

    • Os argumentos nesta função.

    Importante

    Se o resultado desta função não for o que você esperava:

    • Consulte seu administrador de políticas internas (por exemplo, usuários com as funções POLICY_ADMIN, MASKING_ADMIN, RAP_ADMIN personalizadas) para entender as colunas que são protegidas por uma política de mascaramento, a política de acesso a linhas que protege a tabela ou exibição, e a(s) definição(ões) de política correspondente(s).

    • Verifique duas vezes:

      • Valores de cadeia de caracteres de funções.

      • Expressão SELECT query.

      • Privilégios atribuídos a funções (por exemplo, SELECT em tabela ou exibiçõ, USAGE em banco de dados e esquema pais) e a correspondente herança de privilégio.

      • Hierarquia de funções, especialmente se especificar a função CURRENT_AVAILABLE_ROLES e seus valores como um argumento para esta função.

    Atualize a instrução SQL usando esta função, conforme necessário, e tente novamente.

Exemplos

Simular o efeito da função PUBLIC do sistema consultando a tabela empl_info:

execute using policy_context(current_role => 'PUBLIC') as select * from empl_info;
Copy