- Categorias:
Funções de contexto (General)
IS_DATABASE_ROLE_ACTIVATED (função SYS_CONTEXT)¶
Retorna o valor VARCHAR 'TRUE' se uma função de banco de dados está ativada na sessão atual.
Sintaxe¶
SYS_CONTEXT(
'SNOWFLAKE$SESSION' ,
'IS_DATABASE_ROLE_ACTIVATED' ,
'<database_role>'
)
Argumentos¶
'SNOWFLAKE$SESSION'Especifica que você deseja chamar uma função para retornar informações de contexto sobre a sessão atual.
'IS_DATABASE_ROLE_ACTIVATED'Chama a função IS_DATABASE_ROLE_ACTIVATED.
'database_role'Especifica a função de banco de dados a ser verificada. O nome pode ser totalmente qualificado ou relativo.
Retornos¶
A função retorna um dos seguintes valores VARCHAR:
'TRUE'se a função primária ou secundária ativa do usuário atual na sessão herdar os privilégios da função de banco de dados especificada.'FALSE'se a função do banco de dados especificada não estiver na hierarquia de funções ativas do usuário, ou se a função de banco de dados não existir.
Para comparar esse valor de retorno com o valor BOOLEAN TRUE ou FALSE, converta o valor de retorno para BOOLEAN. Por exemplo:
SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'IS_DATABASE_ROLE_ACTIVATED', 'my_db_role')::BOOLEAN = TRUE;
Notas de uso¶
Esta função não é suportada em políticas de governança (como as de mascaramento, acesso a linhas ou projeção) aplicadas a tabelas compartilhadas. Objetos compartilhados não podem acessar o estado da sessão do consumidor.
Se você não especificar um nome totalmente qualificado, a função resolverá o contexto do banco de dados da função de banco de dados da seguinte forma:
Consultas: banco de dados da sessão (o banco de dados que está em uso).
Corpo de uma política de proteção de dados: banco de dados que contém a tabela ou exibição protegida.
Compartilhamento: banco de dados na conta do consumidor.
Essa função não pode ser usada em definições de exibição materializada porque a função não é determinística.
Exemplos¶
Verificar uma função de banco de dados no banco de dados atual usando um nome relativo:
SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'IS_DATABASE_ROLE_ACTIVATED', 'ANALYST_ROLE');
+-------------------------------------------------------------------------+
| SYS_CONTEXT('SNOWFLAKE$SESSION', 'IS_DATABASE_ROLE_ACTIVATED', 'ANA... |
+-------------------------------------------------------------------------+
| TRUE |
+-------------------------------------------------------------------------+
Verificar uma função de banco de dados em um banco de dados diferente usando um nome totalmente qualificado:
SELECT SYS_CONTEXT('SNOWFLAKE$SESSION', 'IS_DATABASE_ROLE_ACTIVATED', 'DB2.READER_ROLE');
+-------------------------------------------------------------------------+
| SYS_CONTEXT('SNOWFLAKE$SESSION', 'IS_DATABASE_ROLE_ACTIVATED', 'DB ... |
+-------------------------------------------------------------------------+
| TRUE |
+-------------------------------------------------------------------------+