ALTER MASKING POLICY

Substitui as regras existentes de política de mascaramento por novas regras ou um novo comentário e permite a renomeação de uma política de mascaramento.

Quaisquer mudanças feitas nas regras da política entram em vigor quando a próxima consulta SQL que utiliza a política de mascaramento for executada.

Consulte também:

DDL da política de mascaramento

Sintaxe

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

ALTER MASKING POLICY [ IF EXISTS ] <name> SET BODY -> <expression_on_arg_name_to_mask>

ALTER MASKING POLICY [ IF EXISTS ] <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]

ALTER MASKING POLICY [ IF EXISTS ] <name> UNSET TAG <tag_name> [ , <tag_name> ... ]

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

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

Parâmetros

name

Identificador da política de mascaramento; deve ser único no esquema pai da política.

O valor do 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 detalhes, consulte Requisitos para identificadores.

RENAME TO new_name

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

Para obter mais detalhes, 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 mascaramento:

BODY -> expression_on_arg_name_to_mask

Expressão SQL que transforma os dados na coluna designada por arg_name_mask.

A expressão pode incluir Funções de expressão condicional para representar lógica condicional, funções internas ou UDFs para transformar os dados.

Se um UDF ou função externa for usado dentro do corpo de política de mascaramento, o proprietário da política deve ter o privilégio USAGE no UDF ou função externa. Os usuários que consultam uma coluna com uma política de mascaramento aplicada a ela não precisam ter USAGE na UDF ou função externa.

Se um UDF ou função externa for usado dentro do corpo de política de mascaramento condicional, o proprietário da política deve ter o privilégio OWNERSHIP no UDF ou função externa. Os usuários que consultam uma coluna com uma política de mascaramento condicional aplicada a ela não precisam ter USAGE na UDF ou função externa.

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

Padrão: sem valor

UNSET ...

Especifica uma ou mais propriedades e/ou parâmetros a serem removidos da política de mascaramento, que os redefine aos padrões:

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

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.

Para detalhes adicionais sobre a política de mascaramento DDL e privilégios, consulte Gerenciamento da segurança em nível de coluna.

Notas de uso

  • Se você quiser atualizar uma política de mascaramento existente e precisar ver a definição atual da política, chame a função GET_DDL ou execute o comando DESCRIBE MASKING POLICY.

  • Não é possível alterar a assinatura da política (ou seja, nome do argumento ou tipo de dados de entrada/saída). Se você precisar mudar a assinatura, execute uma instrução DROP MASKING POLICY na política e crie uma nova.

  • Antes de executar uma instrução ALTER, você pode executar uma instrução DESCRIBE MASKING POLICY para determinar o nome do argumento a ser usado para atualizar a política.

  • Para políticas de mascaramento com uma subconsulta no corpo da política de mascaramento, use EXISTS na cláusula WHEN. Para obter um exemplo representativo, consulte o exemplo da tabela de direitos personalizados na seção Exemplos em CREATE MASKING POLICY.

  • Se a política body contiver uma pesquisa de tabela de mapeamento, crie uma tabela de mapeamento centralizada e armazene a tabela de mapeamento no mesmo banco de dados que a tabela protegida. Isso é especialmente importante se body chamar a função IS_DATABASE_ROLE_IN_SESSION. Para obter mais detalhes, consulte a função notas de uso.

  • Adicionar uma política de mascaramento a uma coluna falha se a coluna for referenciada por uma política de acesso a linhas. Para obter mais informações, consulte ALTER ROW ACCESS POLICY.

  • Se utilizar uma UDF em uma política de mascaramento, certifique-se de que o tipo de dados da coluna, a UDF e a política de mascaramento sejam correspondentes. Para obter mais informações, consulte Funções definidas pelo usuário em uma política de mascaramento.

  • Depois de criar uma tabela dinâmica, não será possível fazer alterações na política de mascaramento.

  • 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

O exemplo a seguir atualiza a política de mascaramento para usar um hash SHA-512. Usuários sem a função ANALYST veem o valor como um hash SHA-512, enquanto usuários com a função ANALYST veem o valor de texto simples.

DESCRIBE MASKING POLICY email_mask;
Copy
+-----+------------+---------------+-------------------+-----------------------------------------------------------------------+
| Row | name       | signature     | return_type       | body                                                                  |
+-----+------------+---------------+-------------------+-----------------------------------------------------------------------+
| 1   | EMAIL_MASK | (VAL VARCHAR) | VARCHAR(16777216) | case when current_role() in ('ANALYST') then val else '*********' end |
+-----+------------+---------------+-------------------+-----------------------------------------------------------------------+
ALTER MASKING POLICY email_mask SET BODY ->
  CASE
    WHEN current_role() IN ('ANALYST') THEN VAL
    ELSE sha2(val, 512)
  END;
Copy