ALTER ROW ACCESS POLICY

Modifica as propriedades de uma política de acesso a linhas existente, incluindo a renomeação da política ou a substituição das regras da política.

Quaisquer alterações feitas nas regras da política entram em vigor quando a próxima consulta SQL que utiliza a política de acesso a linhas for executada.

Consulte também:

DDL da política de acesso a linhas

Sintaxe

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

ALTER ROW ACCESS POLICY [ IF EXISTS ] <name> SET BODY -> <expression_on_arg_name>

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

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

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

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

Parâmetros

name

Identificador para a política de acesso a linhas; 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 acesso a linhas; 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 acesso a linhas 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 acesso a linhas:

BODY -> expression_on_arg_name

Expressão SQL que filtra os dados.

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 uma UDF ou função externa for usada no corpo de política de acesso a linhas, o proprietário da política deve ter OWNERSHIP na UDF ou função externa. Os usuários que consultam um objeto de banco de dados que tem uma política de acesso a linhas aplicada a ele não precisam ter USAGE na função UDF ou 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 acesso a linhas

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 privilégios e DDL da política de acesso a linhas, consulte Gerenciamento de políticas de acesso a linhas.

Notas de uso

  • Se quiser atualizar uma política de acesso a linhas existente e precisar ver a definição atual da política, chame a função GET_DDL ou execute o comando DESCRIBE ROW ACCESS POLICY.

  • Não é possível alterar a assinatura da política (ou seja, nome do argumento ou tipo de dados de entrada/saída). Da mesma forma, o uso do CREATE OR REPLACE ROW ACCESS POLICY não é suportado se a política for anexada a uma tabela ou exibição. Se você precisar mudar a assinatura, execute uma instrução DROP ROW ACCESS POLICY na política e crie uma nova política de acesso a linhas.

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

  • Incluir uma ou mais subconsultas no corpo da política pode causar erros. Quando possível, limite o número de subconsultas, limite o número de operações JOIN e simplifique as condições da cláusula WHERE.

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

  • 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 acesso a linhas.

DESC ROW ACCESS POLICY rap_table_employee_info;
Copy
+-------------------------+-------------+-------------+------+
| name                    | signature   | return_type | body |
+-------------------------+-------------+-------------+------+
| rap_table_employee_info | (V VARCHAR) | BOOLEAN     | true |
+-------------------------+-------------+-------------+------+
ALTER ROW ACCESS POLICY rap_table_employee_info SET BODY -> false;
Copy