ALTER PRIVACY POLICY

Modifica as propriedades de uma política de privacidade existente.

Cuidado

Ao alterar budget_limit, max_budget_per_aggregate ou budget_window, qualquer propriedade não especificada no comando ALTER retornará ao seu valor padrão. Para obter os valores atuais dos parâmetros, execute o comando DESCRIBE PRIVACY POLICY.

Consulte também:

CREATE PRIVACY POLICY, DESCRIBE PRIVACY POLICY, DROP PRIVACY POLICY, SHOW PRIVACY POLICIES

Sintaxe

ALTER PRIVACY POLICY [ IF EXISTS ] <name> RENAME TO <new_name>

ALTER PRIVACY POLICY [ IF EXISTS ] <name> SET BODY -> <expression>

ALTER PRIVACY POLICY <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]

ALTER PRIVACY POLICY <name> UNSET TAG <tag_name> [ , <tag_name> ... ]

ALTER PRIVACY POLICY [ IF EXISTS ] <name> SET COMMENT = '<string_literal>'

ALTER PRIVACY POLICY [ IF EXISTS ] <name> UNSET COMMENT
Copy

Parâmetros

name

Especifica o identificador da política de privacidade a ser alterada.

Se o identificador contiver espaços ou caracteres especiais, toda a cadeia de caracteres deverá ser delimitada por aspas duplas. Os identificadores delimitados por aspas duplas também diferenciam letras maiúsculas de minúsculas.

Para obter mais informações, consulte Requisitos para identificadores.

RENAME TO new_name

Especifica o novo identificador para a política de privacidade; deve ser exclusivo para seu esquema. O novo identificador não pode ser usado se o identificador já estiver em vigor para uma política de privacidade diferente.

Para obter mais informações, consulte Requisitos para identificadores.

Você pode mover o objeto para um banco de dados e/ou esquema diferente enquanto opcionalmente renomeia o objeto. Para isso, especifique um valor qualificado new_name que inclua o novo banco de dados e/ou nome do esquema no formulário db_name.schema_name.object_name ou schema_name.object_name, respectivamente.

Nota

  • O banco de dados e/ou esquema de destino já deve existir. Além disso, um objeto com o mesmo nome não pode já existir no banco de dados de destino; caso contrário, a instrução retorna um erro.

  • É proibido mover um objeto para um esquema de acesso gerenciado a menos que o proprietário do objeto (ou seja, a função que tem o privilégio OWNERSHIP sobre o objeto) também possua o esquema de destino.

SET ...

Especifica uma ou mais propriedades a serem definidas para a política de privacidade:

BODY -> expression

Especifica um novo corpo para a política.

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

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(*) e avg(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 UTC

  • Weekly: Atualizado todos os domingos às 12:00 AM UTC

  • Monthly: Atualizado no primeiro dia do mês civil às 12:00 AM UTC

  • Yearly: Atualizado em 1º de janeiro às 12:00 AM UTC

  • Never: O orçamento de privacidade nunca é atualizado.

Padrão: Semanal

TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]

Especifica o nome da tag e o valor da cadeia de caracteres dela.

O valor de tag é sempre uma cadeia de caracteres, e o número máximo de caracteres do valor da tag é 256.

Para obter informações sobre como especificar tags em uma instrução, consulte Cotas de tags para objetos e colunas.

COMMENT = 'string_literal'

Adiciona um comentário ou substitui o comentário existente para a política de privacidade.

Padrão: sem valor

UNSET ...

Especifica uma ou mais propriedades e/ou parâmetros a terem a configuração removida, redefinindo-os para seus padrões, para a política de privacidade:

  • TAG tag_name [ , tag_name ... ]

  • COMMENT

Ao redefinir uma propriedade/parâmetro, especificar somente o nome; especificar um valor para a propriedade retornará um erro.

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

OWNERSHIP

Política de privacidade

OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege).

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

  • Se você quiser atualizar uma política de privacidade existente e precisar ver a definição atual da política, execute o comando DESCRIBE PRIVACY POLICY. Também é possível usar a função GET_DDL para obter a definição completa da política de privacidade, incluindo seu corpo.

  • É proibido mover uma política de privacidade para um esquema de acesso gerenciado (usando a sintaxe ALTER PRIVACY POLICY … RENAME TO), a menos que o proprietário da política de privacidade (ou seja, a função que tem o privilégio OWNERSHIP na política de privacidade) também seja o proprietário do esquema de destino.

  • 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.

Exemplos

Modifique o corpo de uma política de privacidade my_priv_policy para que ela sempre retorne um orçamento chamado analysts:

-- Modify the body of privacy policy "my_priv_policy" so it always returns a
-- budget named "analysts"
ALTER PRIVACY POLICY my_priv_policy SET BODY ->
  PRIVACY_BUDGET(BUDGET_NAME => 'analysts');

-- Set budget limit to 50 and max budget per aggregate to 0.1
-- budget window is not mentioned so it is reset to its default value
ALTER PRIVACY POLICY users_policy SET BODY ->
  privacy_budget(budget_name=>'analysts', budget_limit=>50, max_budget_per_aggregate=>0.1);
Copy