Categorias:

Funções de contexto (Objeto da sessão)

IS_DATABASE_ROLE_IN_SESSION

Verifica se a função do banco de dados está na hierarquia de funções primária ou secundária ativa do usuário para a sessão atual ou se a coluna especificada contém uma função de banco de dados que está na hierarquia de funções primária ou secundária ativa do usuário para a sessão atual.

Entradas

Cadeia de caracteres literal para especificar o nome da função de banco de dados ou não literal para especificar um nome de coluna.

Retornos
  • True:

    • Para um argumento literal (nome da função do banco de dados), a função primária ou funções secundárias ativa do usuário atual na sessão herda os privilégios da função de banco de dados especificada.

    • Para um argumento não literal (nome da coluna), o Snowflake avalia cada linha da tabela e retorna uma linha que contém um valor que especifica uma função de banco de dados na sessão atual do usuário. Cada linha corresponde a um nome de função de banco de dados originado do banco de dados em uso ou do banco de dados especificado em uma consulta.

  • False:

    • Para um argumento literal, a função de banco de dados especificada não está na hierarquia de funções da função primária ou secundária do usuário atual.

    • Para um argumento não literal, o Snowflake não retornará uma linha se a função do banco de dados não estiver na coluna da tabela do banco de dados em uso ou do banco de dados especificado em uma consulta.

Sintaxe

Literal — especifica uma função de banco de dados diretamente:

IS_DATABASE_ROLE_IN_SESSION( '<string_literal>' )
Copy

Não literal — especificar uma coluna:

IS_DATABASE_ROLE_IN_SESSION( <column_name> )
Copy

Argumentos

'string_literal'

O nome da função do banco de dados.

Especifique o nome completo qualificado ou o nome relativo da função de banco de dados.

column_name

O nome da coluna em uma tabela ou exibição.

Notas de uso

Estas notas se aplicam apenas à função IS_DATABASE_ROLE_IN_SESSION:

  • Uma função de banco de dados torna-se ativa na hierarquia de funções quando o banco de dados que contém a função de banco de dados está em uso ou ao consultar uma tabela no mesmo banco de dados que contém a função de banco de dados.

    Se você for um consumidor de compartilhamento de dados e estiver usando uma função de banco de dados para consultar dados protegidos por política, carregue o banco de dados que contém a função de banco de dados com um comando USE DATABASE database_name antes de consultar os dados protegidos por política. Este comando ativa a função de banco de dados na hierarquia de funções da função atual do usuário. Para obter mais detalhes, consulte Compartilhamento de dados protegidos por uma política.

  • Quando o valor de propriedade do usuário DEFAULT_SECONDARY_ROLES for ALL, a função retornará True se qualquer função da conta concedida ao usuário herdar os privilégios da função de banco de dados especificada.

  • Ao usar essa função na condição de uma política de mascaramento ou de acesso a linhas que protege dados compartilhados, certifique-se de que o banco de dados que contém a política e os dados protegidos pela política seja compartilhado com a conta do consumidor. A política e os dados protegidos por política podem estar no mesmo banco de dados ou em bancos de dados diferentes. Para obter mais detalhes, consulte Compartilhamento de dados protegidos por uma política.

Estas notas se aplicam às funções IS_DATABASE_ROLE_IN_SESSION e IS_ROLE_IN_SESSION:

  • Use uma sintaxe.

  • Sintaxe literal:

    • Apenas um nome de função de banco de dados pode ser passado como um argumento.

    • O argumento deve ser uma cadeia de caracteres em letras maiúsculas.

    • O nome de uma função de conta não é compatível.

  • Sintaxe não literal:

    • Apenas uma coluna pode ser passada como argumento.

    • A coluna deve ter um tipo de dados STRING.

    • Especifique a coluna como uma das seguintes:

      • column_name

      • table_name.column_name

      • schema_name.table_name.column_name

      • database_name.schema_name.table_name.column_name

  • Colunas virtuais

    Uma coluna virtual, que contém o resultado de um valor calculado de uma expressão em vez do valor calculado que está sendo armazenado na tabela, não é suportada.

    SELECT IS_ROLE_IN_SESSION(UPPER(authz_role)) FROM t1;
    
    Copy

    Uma coluna virtual só é suportada quando a expressão tem um alias para o nome da coluna:

    CREATE VIEW v2 AS
    SELECT
      authz_role,
      UPPER(authz_role) AS upper_authz_role
    FROM t2;
    
    SELECT IS_ROLE_IN_SESSION(upper_authz_role) FROM v2;
    
    Copy
  • Políticas:

    Se você usar essas funções com uma política de mascaramento ou uma política de acesso a linhas, verifique se sua conta Snowflake é Enterprise Edition ou superior.

    O Snowflake recomenda o uso dessa função quando as condições da política precisarem avaliar a hierarquia de funções e os privilégios herdados.

  • Cache de resultados:

    Se você usar essa função em uma política de mascaramento ou em uma política de acesso a linhas e nem a política nem a tabela ou coluna protegida pela política forem alteradas em relação a uma consulta anterior, você poderá usar a função RESULT_SCAN para retornar os resultados de uma consulta na tabela protegida. O cache de resultados se aplica somente ao uso da sintaxe não literal.

  • Essas funções não podem ser usadas na definição da exibição materializada porque essas funções não são deterministas e o Snowflake não pode determinar quais dados devem ser materializados.

Exemplos

Verificar se os privilégios concedidos a uma função específica são herdados pela função atual na sessão:

SELECT IS_DATABASE_ROLE_IN_SESSION('DB1.R1');
Copy
+---------------------------------------+
| IS_DATABASE_ROLE_IN_SESSION('DB1.R1') |
+---------------------------------------+
| True                                  |
+---------------------------------------+

Retorne valores de função de banco de dados para a coluna denominada ROLE_NAME:

SELECT *
FROM myb.s1.t1
WHERE IS_DATABASE_ROLE_IN_SESSION(role_name);
Copy

Para exemplos adicionais relacionados ao compartilhamento seguro de dados, consulte Compartilhamento de dados protegidos por uma política.