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
| PUBLICATIONnom_objet
| ROLEnom_objet
| SCHEMAnom_objet
| SEQUENCEnom_objet
| SUBSCRIPTIONnom_objet
| TABLESPACEnom_objet
| TYPEnom_objet
| VIEWnom_objet
} IS 'label
' 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
Le nom de l'objet. Ce sont les noms des tables, aggrégats, domaines, tables distantes, fonctions, séquences, types et vues qui 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 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
afin d'identifier sans ambiguïté une fonction.
nom_arg
Le nom d'un argument de fonction 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 ou d'agrégat.
oid_large_objet
L'OID de l'objet large.
PROCEDURAL
Qualificatif optionnel du langage, peut être omis.
label
Le nom du label à affecter, fourni sous la forme d'une chaine littérale
ou NULL
pour supprimer un label de sécurité précédemment affecté.
L'exemple suivant montre comment modifier le label de sécurité d'une table.
SECURITY LABEL FOR selinux ON TABLE matable IS 'system_u:object_r:sepgsql_table_t:s0';
La commande SECURITY LABEL
n'existe pas dans le standard SQL.
src/test/modules/dummy_seclabel