- Catégories :
Fonctions système (Informations système)
EXPLAIN_PRIVILEGES¶
Renvoie une chaîne JSON qui explique quels privilèges sont nécessaires pour exécuter une instruction SQL. Cette fonction analyse les exigences d’autorisation pour une instruction SQL donnée et les renvoie dans un format structuré montrant les privilèges requis, les types d’objets et les noms d’objets.
- Voir aussi :
Syntaxe¶
Arguments¶
statement => 'sql_statement'Une chaîne contenant l’instruction SQL à analyser. L’instruction est analysée pour déterminer quels privilèges sont nécessaires pour l’exécuter.
missing_only => booleanValeur booléenne qui contrôle le mode de sortie :
false- Renvoie tous les privilèges requis pour exécuter l’instruction, que l’utilisateur actuel ou le rôle spécifié les possède ou non.true- Renvoie uniquement les privilèges manquants (qui ne sont pas actuellement détenus par l’utilisateur actuel ou le rôle spécifié). Si tous les privilèges requis sont présents, renvoie``{« authorized »: true}``.
Par défaut :
falsefor_role => 'role_name'Le nom d’un rôle pour lequel vérifier les privilèges. Cet argument n’est utilisé que lorsque
missing_only => true. Renvoie tous les privilèges manquants pour le rôle (et les rôles qui lui sont attribués) pour exécuter l’instruction.
Renvoie¶
La fonction renvoie une valeur VARCHAR contenant un objet JSON qui décrit les privilèges requis dans une structure hiérarchique. L’objet JSON peut contenir les types de nœuds suivants :
Node de permission - Représente une exigence de privilège unique :
privilege- Nom du privilège requis (par exemple, USAGE, SELECT, OWNERSHIP). La valeur spéciale<ANY>indique que tout privilège sur l’objet est suffisant.objectType- Le type d’objet (par exemple, DATABASE, TABLE, SCHEMA, ACCOUNT).objectName- Nom complet de l’objet.
Nœud AND - Tous les privilèges contenus sont requis :
**Nœud OR ** — Au moins un des privilèges contenus est requis :
Nœud de décision - Indique le statut d’autorisation
authorized: true- Tous les privilèges requis sont présents.authorized: false- L’instruction ne peut pas être autorisée avec des privilèges.
Exigences en matière de contrôle d’accès¶
Vous devez disposer des privilèges pour faire référence à l’objet par son nom dans l’instruction SQL. Le plus souvent, cette exigence est satisfaite en disposant d’au moins un privilège sur l’objet. Le privilège RESOLVE ALL ON ACCOUNT répond également à cette exigence.
Notes sur l’utilisation¶
L’argument
statementdoit être une expression constante. Vous ne pouvez pas transmettre de valeurs de colonnes ni d’autres expressions non constantes.Le SQL multi-instructions n’est pas pris en charge. La fonction accepte une seule instruction SQL.
Certaines instructions SQL ne sont pas prises en charge pour l’analyse des privilèges (par exemple,GRANT, REVOKE, USE ROLE, USE SECONDARY ROLES).
Certaines instructions SQL comportent des contrôles de privilèges qui ne sont pas pris en charge pour l’analyse des privilèges. Ces contrôles seront omis dans la sortie.
Certains contrôles de privilège indirects ne sont pas pris en charge pour l’analyse des privilèges. Ces contrôles seront omis dans la sortie. Par exemple, RESOLVE ALL ON ACCOUNT n’est pas inclus en tant qu’option pour résoudre une base de données.
Lorsqu’un objet ne peut pas être résolu, la fonction renvoie une erreur indiquant que l’instruction nécessite un accès à tous les objets.
Le privilège
<ANY>signifie que tout privilège sur l’objet est suffisant (par exemple, pour les contrôles USAGE où OWNERSHIP suffirait également).
Exemples¶
Les exemples suivants appellent la fonction EXPLAIN_GRANTABLE_PRIVILEGES :
Expliquer les privilèges d’une commande DESC¶
Afficher tous les privilèges requis pour décrire un schéma :
Exemple de sortie :
Cette sortie indique que vous avez besoin d’un privilège quelconque sur la base de données``MYDB`` ET le privilège MONITOR sur le schéma MYDB.MYSCHEMA.
Vérifier uniquement les privilèges manquants¶
Vérifiez les privilèges manquants pour l’utilisateur actuel :
Si vous avez tous les privilèges requis, renvoie :
S’il vous manque des privilèges, renvoie uniquement les manquants :
Vérifier les privilèges manquants pour un rôle spécifique¶
Vérifier les privilèges manquants à un rôle spécifique :
Détermine si le rôle analyst_role (y compris les privilèges des rôles qui lui sont attribués) possède les privilèges nécessaires pour exécuter l’instruction SELECT et, si ce n’est pas le cas, renvoie les privilèges manquants.