ALTER VIEW

Modifica as propriedades para uma exibição existente. Atualmente, as únicas operações com suporte são:

  • Renomeação de uma exibição.

  • Conversão para (ou revertendo de) uma exibição segura.

  • Adição, substituição, remoção de comentário para uma exibição.

Note que você não pode usar este comando para mudar a definição de uma exibição. Para mudar a definição da exibição, você deve descartar a visualização e depois recriá-la.

Consulte também:

CREATE VIEW , DROP VIEW , SHOW VIEWS , DESCRIBE VIEW

Sintaxe

ALTER VIEW [ IF EXISTS ] <name> RENAME TO <new_name>

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

ALTER VIEW [ IF EXISTS ] <name> UNSET COMMENT

ALTER VIEW <name> SET SECURE

ALTER VIEW <name> SET CHANGE_TRACKING =  { TRUE | FALSE }

ALTER VIEW <name> UNSET SECURE

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

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

ALTER VIEW [ IF EXISTS ] <name>
  ADD ROW ACCESS POLICY <policy_name> ON (<col_name> [ , ... ])

ALTER VIEW [ IF EXISTS ] <name>
  DROP ROW ACCESS POLICY <policy_name>

ALTER VIEW [ IF EXISTS ] <name>
  DROP ROW ACCESS POLICY <policy_name>
  , ADD ROW ACCESS POLICY <policy_name> ON (<col_name> [ , ... ])

ALTER VIEW [ IF EXISTS ] <name> DROP ALL ROW ACCESS POLICIES

ALTER VIEW <name> { ALTER | MODIFY } [ COLUMN ] <col_name> SET MASKING POLICY <policy_name> [ USING ( <col_name> , cond_col_1 , ... ) ]
                                                                                            [ FORCE ]

ALTER VIEW <name> { ALTER | MODIFY } COLUMN <col_name> UNSET MASKING POLICY

ALTER VIEW [ IF EXISTS ] <name> { ALTER | MODIFY } [ COLUMN ] <col_name> SET TAG <tag_name> = '<string_literal>' [ , <tag_name> = '<string_literal>' ... ]

ALTER VIEW [ IF EXISTS ] <name> { ALTER | MODIFY } COLUMN <col_name> UNSET TAG <tag_name> [ , <tag_name> ... ]
Copy

Parâmetros

name

Especifica o identificador da visualização 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.

RENAME TO new_name

Especifica o novo identificador da visualização; deve ser único para o esquema.

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.

Quando um objeto é renomeado, outros objetos que fazem referência a ele devem ser atualizados com o novo nome.

SET ...

Especifica a propriedade a ser definida para a exibição:

SECURE

Especifica uma visualização como segura.

CHANGE_TRACKING = TRUE | FALSE

Especifica a habilitação ou desabilitação do rastreamento de alterações na tabela.

  • TRUE habilita o rastreamento de alterações na exibição, e faz o ajuste em cascata em todas as tabelas subjacentes.

  • FALSE desabilita o rastreamento de alterações na exibição, e faz o ajuste em cascata em todas as tabelas subjacentes.

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 mais detalhes 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 um comentário existente para a exibição.

Nota

Você deve definir cada propriedade da visualização individualmente.

UNSET ...

Especifica a propriedade a ser removida para a exibição, o que a restaura para os padrões.

  • SECURE

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

  • COMMENT

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

Nota

Você deve reinicializar cada propriedade de visualização individualmente.

policy_name

Identificador para a política de acesso a linhas; deve ser único para seu esquema.

ADD ROW ACCESS POLICY <policy_name> ON (<col_name> [ , ])

Adiciona uma política de acesso a linhas a uma visualização.

Pelo menos um nome de coluna deve ser especificado. Colunas adicionais podem ser especificadas com uma vírgula que separa cada nome de coluna.

DROP ROW ACCESS POLICY <policy_name>

Descarta uma política de acesso a linhas de uma visualização.

DROP ALL ROW ACCESS POLICIES

Descarta todas as associações de política de acesso a linhas a partir de uma exibição.

Esta expressão é útil quando uma política de acesso a linhas é descartada de um esquema antes de descartar a política de uma exibição.

ALTER | MODIFY <col_name> SET MASKING POLICY <policy_name>

Aplica uma política de mascaramento a uma coluna de exibição.

USING ( col_name , cond_col_1 ... )

Especifica os argumentos para passar para a expressão SQL da política de mascaramento condicional.

A primeira coluna da lista especifica a coluna das condições da política para mascarar ou tokenizar os dados e deve corresponder à coluna para a qual a política de mascaramento é definida.

As colunas adicionais especificam as colunas a serem avaliadas para determinar se os dados em cada linha do resultado da consulta devem ser mascarados ou tokenizados quando uma consulta é feita na primeira coluna.

Se a cláusula USING for omitida, o Snowflake tratará a política de mascaramento condicional como uma política de mascaramento normal.

FORCE

Substitui uma política de mascaramento que está atualmente definida em uma coluna por uma política de mascaramento diferente em uma única instrução.

Observe que a utilização da palavra-chave FORCE exige o tipo de dados da política na instrução ALTER VIEW (isto é, STRING) para corresponder ao tipo de dados da política de mascaramento atualmente definida na coluna (isto é, STRING).

Se uma política de mascaramento não estiver definida atualmente na coluna, a especificação dessa palavra-chave não tem efeito.

Para obter mais detalhes, consulte Substituição de uma política de mascaramento em uma coluna.

ALTER | MODIFY COLUMN <col_name> UNSET MASKING POLICY

Remove uma política de mascaramento de segurança em nível de coluna de uma coluna da exibição.

Notas de uso

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

  • Para políticas de mascaramento:

    • A cláusula USING e a palavra-chave FORCE são ambas opcionais; nenhuma delas é necessária para definir uma política de mascaramento em uma coluna. A cláusula USING e a palavra-chave FORCE podem ser usadas separadamente ou em conjunto. Para obter mais detalhes, consulte:

    • Uma única política de mascaramento que utilize colunas condicionais pode ser aplicada a várias tabelas, desde que a estrutura de colunas da tabela corresponda às colunas especificadas na política.

    • Ao modificar uma ou mais colunas da tabela com uma política de mascaramento ou a própria tabela com uma política de acesso a linhas, use a função POLICY_CONTEXT para simular uma consulta na(s) coluna(s) protegida(s) por uma política de mascaramento e na tabela protegida por uma política de acesso a linhas.

  • Uma única política de mascaramento que utilize colunas condicionais pode ser aplicada a várias exibições, desde que a estrutura de colunas da exibição corresponda às colunas especificadas na política.

  • Para políticas de acesso a linhas:

    • O Snowflake oferece suporte à adição e ao descarte de políticas de acesso a linhas em uma única instrução SQL.

      Por exemplo, para substituir uma política de acesso a linhas que já esteja definida em uma tabela por uma política diferente, primeiro descarte a política de acesso a linhas e depois adicione a nova política.

    • Para determinado recurso (ou seja, tabela ou exibição), para ADD ou DROP uma política de acesso a linhas, você deve ter o privilégio APPLY ROW ACCESS POLICY no esquema, ou o privilégio OWNERSHIP no recurso e o privilégio APPLY no recurso da política de acesso a linhas.

    • Uma tabela ou exibição só pode ser protegida por uma política de acesso a linhas de cada vez. A adição de uma política falhará se o corpo da política se referir a uma coluna de exibição ou tabela protegida por uma política de acesso a linhas ou à coluna protegida por uma política de mascaramento.

      Da mesma forma, a adição de uma política de mascaramento a uma coluna da tabela falhará se o corpo da política de mascaramento se referir a uma tabela protegida por uma política de acesso a linhas ou outra política de mascaramento.

    • As políticas de acesso a linhas não podem ser aplicadas a exibições do sistema ou funções de tabela.

    • Semelhante a outras operações DROP <objeto>, o Snowflake retornará um erro se tentar descartar uma política de acesso a linhas de um recurso que não tenha uma política de acesso a linhas adicionada a ele.

    • Se um objeto tiver uma política de acesso a linhas e uma ou mais políticas de mascaramento, a política de acesso a linhas será avaliada primeiro.

  • 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

Renomear a exibição view1 como view2:

ALTER VIEW view1 RENAME TO view2;
Copy

Converter uma exibição em uma exibição segura:

ALTER VIEW view1 SET SECURE;
Copy

Reverter uma exibição segura para uma exibição regular:

ALTER VIEW view1 UNSET SECURE;
Copy

Aplicar uma política de mascaramento de segurança em nível de coluna a uma coluna de exibição:

-- single column

ALTER VIEW user_info_v MODIFY COLUMN ssn_number SET MASKING POLICY ssn_mask_v;

-- multiple columns

ALTER VIEW user_info_v MODIFY
    COLUMN ssn_number SET MASKING POLICY ssn_mask_v
  , COLUMN dob SET MASKING POLICY dob_mask_v
;
Copy

Remover uma política de mascaramento de segurança em nível de coluna de uma coluna da exibição:

-- single column

ALTER VIEW user_info_v modify column ssn_number unset masking policy;

-- multiple columns

ALTER VIEW user_info_v modify
    column ssn_number unset masking policy
  , column dob unset masking policy
;
Copy

O exemplo seguinte adiciona uma política de acesso a linhas a uma exibição. Após definir as políticas, você pode verificar checando o esquema de informação.

alter view v1
  add row access policy rap_v1 on (empl_id);
Copy

O exemplo a seguir descarta uma política de acesso a linhas de uma visualização. Verifique se as políticas foram descartadas consultando o esquema de informação.

alter view v1
  drop row access policy rap_v1;
Copy

O exemplo a seguir mostra como combinar a adição e a eliminação de políticas de acesso a linhas em uma única instrução SQL para uma exibição. Verifique os resultados conferindo o esquema de informação.

alter view v1
  drop row access policy rap_v1_version_1,
  add row access policy rap_v1_version_2 on (empl_id);
Copy