CREATE PRIVACY POLICY¶
Cria uma nova política de privacidade ou substitui uma política de privacidade existente.
- Consulte também:
ALTER PRIVACY POLICY, DESCRIBE PRIVACY POLICY, DROP PRIVACY POLICY, SHOW PRIVACY POLICIES
Sintaxe¶
CREATE [ OR REPLACE ] PRIVACY POLICY [ IF NOT EXISTS ] <name>
AS () RETURNS PRIVACY_BUDGET -> <body>
[ COMMENT = '<string_literal>' ]
Parâmetros obrigatórios¶
name
Cadeia de caracteres que especifica o identificador (ou seja, o nome) para a política de privacidade; deve ser exclusivo para o esquema no qual a política de privacidade é criada.
Além disso, o identificador deve começar com um caractere alfabético e não pode conter espaços ou caracteres especiais, a menos que toda a cadeia de caracteres do identificador esteja entre aspas duplas (por exemplo,
"My object"
). Os identificadores delimitados por aspas duplas também diferenciam letras maiúsculas de minúsculas.Para obter mais informações, consulte Requisitos para identificadores.
body
A expressão SQL do corpo chama duas funções para controlar o valor de retorno da política: NO_PRIVACY_POLICY e PRIVACY_BUDGET. Quando uma consulta é executada em uma tabela que tenha recebido a política, o Snowflake avalia as condições do corpo para chamar a função apropriada e retornar um valor. Este valor de retorno determina qual orçamento de privacidade, se houver, está associado à consulta na tabela protegida por privacidade.
A expressão pode usar funções de contexto como CURRENT_ROLE ou INVOKER_ROLE para associar um usuário ou grupo de usuários a um orçamento de privacidade.
Se você usar um bloco CASE na expressão do corpo, ele deverá incluir uma instrução ELSE que chame NO_PRIVACY_POLICY ou PRIVACY_BUDGET. Cada usuário deve estar associado a um orçamento de privacidade ou ter acesso irrestrito à tabela protegida por privacidade. Se um usuário não tiver acesso a uma tabela ou exibição protegida por privacidade, revogue os privilégios SELECT em vez de tentar definir isso na política de privacidade.
NO_PRIVACY_POLICY
Use a expressão do corpo para chamar a função
NO_PRIVACY_POLICY
quando quiser que uma consulta tenha acesso irrestrito à tabela ou exibição à qual a política de privacidade foi atribuída.PRIVACY_BUDGET
Use a expressão do corpo para chamar a função
PRIVACY_BUDGET
quando quiser retornar um orçamento de privacidade da política. A expressão pode conter condições que permitam que a política retorne diferentes orçamentos de privacidade para diferentes consultas com base em fatores como o usuário que está executando a consulta.Na colaboração entre contas, os orçamentos de privacidade são automaticamente alocados por namespaces pelo identificador de conta da conta do consumidor, o que impede que duas contas de consumidor diferentes compartilhem o mesmo orçamento de privacidade, mesmo que o nome do orçamento de privacidade seja o mesmo. Usar a função CURRENT_ACCOUNT para concatenar o nome da conta com o nome do orçamento de privacidade pode ajudar a distinguir entre orçamentos de privacidade. Por exemplo, você pode chamar a função da seguinte forma:
PRIVACY_BUDGET(BUDGET_NAME => 'external_budget.' || CURRENT_ACCOUNT())
.A assinatura da função
PRIVACY_BUDGET
é:PRIVACY_BUDGET( BUDGET_NAME=> '<string>' [, BUDGET_LIMIT=> <decimal> ] [, MAX_BUDGET_PER_AGGREGATE=> <decimal> ] [, BUDGET_WINDOW=> <string> ] )
Argumentos sobre orçamento de privacidade:
BUDGET_NAME => expression
Resolve o nome de um orçamento de privacidade. O Snowflake cria o orçamento de privacidade automaticamente quando seu nome é especificado no corpo da política de privacidade.
BUDGET_LIMIT => decimal
Um número decimal maior que 0 que especifique o limite de orçamento para esta política de privacidade. Isso controla a quantidade total de perda de privacidade permitida. Ajustar esse valor altera a quantidade total de agregações privadas diferencialmente que podem ser calculados em relação às tabelas protegidas por esse orçamento de privacidade durante o período de atualização. Quando uma consulta é executada e faz com que a perda cumulativa de privacidade exceda esse número, a consulta falha. Como estimativa, um limite de orçamento de 233 com
MAX_BUDGET_PER_AGGREGATE=1
permite cerca de 1.000 agregações por período de atualização.Padrão: 233
MAX_BUDGET_PER_AGGREGATE => decimal
Especifica quanto orçamento de privacidade é usado para cada função de agregação em uma consulta. Ajustar esse valor altera a quantidade de ruído adicionada a cada consulta agregada, bem como o número de agregações que podem ser calculados antes que o limite do orçamento seja atingido. Por exemplo, a consulta
select count(*), avg(a) ...
tem dois agregados:count(*)
eavg(a)
. Especifique um valor decimal maior que 0.Padrão: 0,5
BUDGET_WINDOW => string
Com que frequência o orçamento de privacidade é atualizado, ou seja, sua perda cumulativa de privacidade é redefinida para 0. Valores válidos:
Daily
: Atualizado todos os dias às 12:00 AM UTCWeekly
: Atualizado todos os domingos às 12:00 AM UTCMonthly
: Atualizado no primeiro dia do mês civil às 12:00 AM UTCYearly
: Atualizado em 1º de janeiro às 12:00 AM UTCNever
: O orçamento de privacidade nunca é atualizado.
Padrão: Semanal
Parâmetros opcionais¶
COMMENT = 'string_literal'
Especifica um comentário para a política de privacidade.
Padrão: sem valor
Requisitos de controle de acesso¶
Uma função usada para executar este comando SQL deve ter os seguintes privilégios no mínimo:
Privilégio |
Objeto |
Notas |
---|---|---|
CREATE PRIVACY POLICY |
Esquema |
Observe que operar em qualquer objeto de um esquema também requer o privilégio USAGE no banco de dados e esquema principais.
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.
Notas de uso¶
Em relação aos metadados:
Atenção
Os clientes devem garantir que nenhum dado pessoal (exceto para um objeto do usuário), dados sensíveis, dados controlados por exportação ou outros dados regulamentados sejam inseridos como metadados ao usar o serviço Snowflake. Para obter mais informações, consulte Campos de metadados no Snowflake.
Instruções CREATE OR REPLACE <object> são atômicas. Ou seja, quando um objeto é substituído, o objeto antigo é excluído e o novo objeto é criado em uma única transação.
Exemplos¶
Crie uma política de privacidade que sempre retorne um orçamento nomeado analysts
:
CREATE PRIVACY POLICY my_priv_policy AS ( ) RETURNS PRIVACY_BUDGET -> PRIVACY_BUDGET(BUDGET_NAME=> 'analysts');
Crie uma política de privacidade que dará acesso admin
irrestrito à tabela protegida por privacidade, ao mesmo tempo em que associará todos os outros usuários ao orçamento de privacidade analysts
:
CREATE PRIVACY POLICY my_priv_policy AS () RETURNS PRIVACY_BUDGET -> CASE WHEN CURRENT_USER() = 'ADMIN' THEN NO_PRIVACY_POLICY() ELSE PRIVACY_BUDGET(BUDGET_NAME => 'analysts') END;