- Categorias:
Funções do sistema (Informações do sistema)
EXPLAIN_PRIVILEGES¶
Retorna uma cadeia de caracteres JSON que explica quais privilégios são necessários para executar uma instrução SQL. Essa função analisa os requisitos de autorização para uma determinada instrução SQL e os retorna em um formato estruturado, mostrando os tipos de objeto, os nomes dos objetos e os privilégios necessários.
- Consulte também:
Sintaxe¶
Argumentos¶
statement => 'sql_statement'Uma cadeia de caracteres contendo a instrução SQL a ser analisada. A instrução é analisada para determinar quais privilégios são necessários para executá-la.
missing_only => booleanValor booleano que controla o modo de saída:
false– retorna todos os privilégios necessários para executar a instrução, independentemente de o usuário atual ou a função especificada os ter.true– retorna apenas os privilégios que estão faltando (não atribuídos atualmente ao usuário atual ou à função especificada). Se todos os privilégios necessários estiverem presentes, retornará{"authorized": true}.
Padrão:
falsefor_role => 'role_name'O nome de uma função para a qual os privilégios serão verificados. Esse argumento é utilizado somente quando
missing_only => true. Retorna todos os privilégios ausentes para a função (e as funções concedidas) executar a instrução.
Retornos¶
A função retorna um valor VARCHAR contendo um objeto JSON que descreve os privilégios necessários em uma estrutura hierárquica. O JSON pode conter os seguintes tipos de nó:
Nó de Permissão – representa um único requisito de privilégio:
privilege— o nome do privilégio necessário (por exemplo, USAGE, SELECT, OWNERSHIP). O valor especial<ANY>indica que qualquer privilégio no objeto é suficiente.objectType– o tipo de objeto (por exemplo, DATABASE, TABLE, SCHEMA, ACCOUNT).objectName– o nome totalmente qualificado do objeto.
Nó AND – todos os privilégios contidos são necessários:
Nó OR – pelo menos um dos privilégios contidos é necessário:
Nó de decisão – indica o status de autorização
authorized: true– todos os privilégios necessários estão presentes.authorized: false– a declaração não pode ser autorizada com concessões de privilégio.
Requisitos de controle de acesso¶
Você deve ter privilégios para se referir ao objeto pelo nome na instrução SQL. Na maioria das vezes, esse requisito é atendido tendo pelo menos um privilégio no objeto. O privilégio RESOLVE ALL ON ACCOUNT também atende a esse requisito.
Notas de uso¶
O argumento
statementdeve ser uma expressão constante. Não é possível passar valores de coluna ou outras expressões que não sejam de constantes.Instruções SQL com múltiplas declarações não são compatíveis. A função aceita apenas uma única instrução SQL.
Algumas instruções SQL não são compatíveis com a análise de privilégios (por exemplo, GRANT, REVOKE, USE ROLE, USE SECONDARY ROLES).
Algumas instruções SQL têm verificações de privilégios que não são compatíveis com a análise de privilégios. Essas verificações serão omitidas da saída.
Algumas verificações de privilégios indiretas não são compatíveis com a análise de privilégios. Essas verificações serão omitidas da saída. Por exemplo, RESOLVE ALL ON ACCOUNT não está incluído como uma opção para resolver um banco de dados.
Quando não é possível resolver um objeto, a função retorna um erro indicando que a instrução requer acesso a todos os objetos.
O privilégio
<ANY>significa que qualquer privilégio no objeto é suficiente (por exemplo, para USAGE verifica onde OWNERSHIP também seria suficiente).
Exemplos¶
Os exemplos a seguir chamam a função EXPLAIN_GRANTABLE_PRIVILEGES:
Explicar privilégios para um comando DESC¶
Mostrar todos os privilégios necessários para descrever um esquema:
Exemplo de saída:
Essa saída indica que você precisa de um privilégio no banco de dados MYDB AND do privilégio MONITOR no esquema MYDB.MYSCHEMA.
Verificar somente os privilégios ausentes¶
Verificar quais privilégios estão faltando para o usuário atual:
Se você tiver todos os privilégios necessários, retornará:
Se estiverem faltando privilégios, retornará apenas os que estão ausentes:
Verificar privilégios ausentes para uma função específica¶
Verificar quais privilégios faltam em uma função específica:
Determina se o analyst_role (incluindo privilégios das funções concedidas) tem os privilégios necessários para executar a instrução SELECT e, caso contrário, retorna os privilégios ausentes.