- Categorias:
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>
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 | +----------------+
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
eROLE2
, 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>') ... ;
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;