SECURITY LABEL — Définir ou modifier un label de sécurité appliqué à un objet
SECURITY LABEL [ FORfournisseur
] ON { TABLEnom_objet
| COLUMNnom_table
.nom_colonne
| AGGREGATEnom_agrégat
(signature_agrégat
) | DATABASEnom_objet
| DOMAINnom_objet
| EVENT TRIGGERnom_objet
| FOREIGN TABLEnom_objet
| FUNCTIONnom_fonction
[ ( [ [mode_arg
] [nom_arg
]type_arg
[, ...] ] ) ] | LARGE OBJECToid_large_object
| MATERIALIZED VIEWnom_objet
| [ PROCEDURAL ] LANGUAGEnom_objet
| PROCEDUREnom_procédure
[ ( [ [mode_arg
] [nom_arg
]type_arg
[, ...] ] ) ] | PUBLICATIONnom_objet
| ROLEnom_objet
| ROUTINEnom_routine
[ ( [ [mode_arg
] [nom_arg
]type_arg
[, ...] ] ) ] | SCHEMAnom_objet
| SEQUENCEnom_objet
| SUBSCRIPTIONnom_objet
| TABLESPACEnom_objet
| TYPEnom_objet
| VIEWnom_objet
} IS {texte
| NULL } oùsignature_agrégat
est : * | [mode_arg
] [nom_arg
]type_arg
[ , ... ] | [ [mode_arg
] [nom_arg
]type_arg
[ , ... ] ] ORDER BY [mode_arg
] [nom_arg
]type_arg
[ , ... ]
SECURITY LABEL
applique un label de sécurité à un objet de la
base de données. Un nombre arbitraire de labels de sécurité, un par fournisseur d'labels,
peut être associé à un objet donné de la base. Les fournisseurs de labels sont des modules dynamiques
qui s'enregistrent eux-mêmes en utilisant la fonction register_label_provider
.
register_label_provider
n'est pas une fonction SQL ; elle ne peut
être appelée que depuis du code C chargé et exécuté au sein du serveur.
Le fournisseur de labels détermine si un label donné est valide, et dans quelle mesure il est permis de l'appliquer à un objet donné. Le sens des labels est également laissé à la discrétion du fournisseur d'labels. PostgreSQL n'impose aucune restriction quant à l'interprétation que peut faire un fournisseur d'un label donné, se contentant simplement d'offrir un mécanisme de stockage de ces labels. En pratique, il s'agit de permettre l'intégration de systèmes de contrôles d'accès obligatoires (en anglais, mandatory access control ou MAC) tels que SELinux. De tels systèmes fondent leurs autorisations d'accès sur des labels appliqués aux objets, contrairement aux systèmes traditionnels d'autorisations d'accès discrétionnaires (en anglais, discretionary access control ou DAC) généralement basés sur des concepts tels que les utilisateurs et les groupes.
nom_objet
nom_table.nom_colonne
nom_agrégat
nom_fonction
nom_procédure
nom_routine
Le nom de l'objet à labelliser. Les noms d'objets résidant dans des schémas (tables, fonctions, etc.) peuvent être qualifiés du nom de schéma.
fournisseur
Le nom du fournisseur auquel le label est associé. Le fournisseur désigné doit être chargé et accepter l'opération qui lui est proposée. Si un seul et unique fournisseur est chargé, le nom du fournisseur peut être omis par soucis de concision.
mode_arg
Le mode d'un argument de fonction, de procédure ou d'agrégat :
IN
, OUT
, INOUT
ou VARIADIC
. Si le mode est omis, le mode par défaut
IN
est alors appliqué. À noter que SECURITY
LABEL
ne porte actuellement pas sur les arguments de mode
OUT
dans la mesure où seuls les arguments fournis en
entrée sont nécessaires à l'identification d'une fonction. Il suffit
donc de lister les arguments IN
,
INOUT
, et VARIADIC
.
nom_arg
Le nom d'un argument de fonction, de procédure ou d'agrégat.
À noter que SECURITY LABEL ON FUNCTION
ne porte
actuellement pas sur les nom des arguments fournis aux fonctions dans la mesure
où seul le type des arguments est nécessaire à l'identification d'une fonction.
type_arg
Le type de données d'un argument de fonction, de procédure ou d'agrégat.
oid_large_objet
L'OID de l'objet large.
PROCEDURAL
Qualificatif optionnel du langage, peut être omis.
label
La nouvelle configuration du label de sécurité, fourni sous la forme d'une chaine littérale.
NULL
Écrire NULL
pour supprimer le label de sécurité.
L'exemple suivant montre comment le label de sécurité d'une table pourrait être configuré ou modifié.
SECURITY LABEL FOR selinux ON TABLE matable IS 'system_u:object_r:sepgsql_table_t:s0';
Pour supprimer le label :
SECURITY LABEL FOR selinux ON TABLE matable IS NULL;
La commande SECURITY LABEL
n'existe pas dans le standard SQL.
src/test/modules/dummy_seclabel