Service SQL IBM i (AS/400) · Fonction scalaire
QSYS2.SQL_CHECK_AUTHORITY
Contrôle du droit d'accès à un objet
Fonction scalaire qui indique si l'utilisateur courant a le droit d'interroger une table ou un fichier donné, avant de lancer la requête.
À quoi ça sert
SQL_CHECK_AUTHORITY prend le nom système de la bibliothèque (SYSTEM_SCHEMA_NAME) et le nom système de l'objet (SYSTEM_OBJECT_NAME) et renvoie un indicateur : dans l'exemple d'IBM, la valeur 1 signifie que l'utilisateur peut interroger l'objet.
Elle sert à écrire des requêtes ou des procédures qui s'adaptent aux droits de l'utilisateur au lieu d'échouer sur une erreur d'autorisation, par exemple pour n'afficher que les tables accessibles dans une application.
Elle renvoie un résultat pour l'utilisateur qui exécute l'instruction : on l'emploie dans un CASE ou dans une clause WHERE.
Résultat réel sur un IBM i 7.5
Ce que nous avons exécuté :
VALUES ( CASE WHEN QSYS2.SQL_CHECK_AUTHORITY('QSYS2','SYSLIMITS') = 1
THEN 'I can query QSYS2/SYSLIMITS' ELSE 'No query access for me' END )
Ce que l'IBM i a renvoyé le 01/10/2026 (1 ligne au plus) :
| 00001 |
|---|
| I can query QSYS2/SYSLIMITS |
Données anonymisées : les noms de système, de profils, de
bibliothèques, de postes et les adresses IP ont été remplacés. Les objets du schéma
JOBISQL sont des objets de démonstration créés pour ce site.
L'exemple d'IBM
Savoir si l'utilisateur a le droit d'interroger ce fichier.
-- Description: Does this user have authority to query this file
VALUES ( CASE WHEN QSYS2.SQL_CHECK_AUTHORITY('QSYS2','SYSLIMITS') = 1
THEN 'I can query QSYS2/SYSLIMITS' ELSE 'No query access for me' END );
Bon à savoir
Les deux paramètres sont des noms système, pas des noms SQL longs : utilisez le nom de 10 caractères au plus de la bibliothèque et de l'objet.
Paramètres
| Paramètre | Type | Par défaut | Signification |
|---|---|---|---|
SYSTEM_SCHEMA_NAME |
VARCHAR(10) | obligatoire | Nom système de la bibliothèque |
SYSTEM_OBJECT_NAME |
VARCHAR(10) | obligatoire | Nom système de l'objet |