
Maîtriser le RBAC natif d’Oracle – Partie 2

4. Concepts avancés du RBAC natif d’Oracle
La mise en œuvre du RBAC d’Oracle offre des fonctionnalités avancées qui fournissent une flexibilité et une granularité supplémentaires dans la gestion du contrôle d’accès. Explorons certains de ces concepts avancés.
4.1 Hiérarchies de rôles
Les hiérarchies de rôles vous permettent d’établir des relations parent-enfant entre les rôles. Un rôle enfant possède les mêmes privilèges que son rôle parent. Le rôle enfant reçoit également tout privilège supplémentaire qui lui est spécifiquement attribué. Cela permet de créer une structure hiérarchique de rôles, simplifiant la gestion des politiques de contrôle d’accès complexes.
Pour créer une hiérarchie de rôles dans Oracle, vous utilisez la déclaration GRANT pour attribuer un rôle à un autre rôle. Par exemple :
-- Créer un rôle parent nommé "manager"
CREATE ROLE manager;
-- Attribuer des privilèges au rôle "manager"
GRANT SELECT, INSERT, UPDATE ON employees TO manager;
-- Créer un rôle enfant nommé "sales_manager"
CREATE ROLE sales_manager;
-- Attribuer le rôle "manager" au rôle "sales_manager"
GRANT manager TO sales_manager;
-- Attribuer des privilèges supplémentaires spécifiques au rôle "sales_manager"
GRANT SELECT ON sales TO sales_manager;
Dans cet exemple, nous créons un rôle parent nommé “manager” et lui attribuons des privilèges sur la table “employees”. Nous créons ensuite un rôle enfant nommé “sales_manager” et lui attribuons le rôle “manager”. Le rôle de sales manager possède tous les mêmes privilèges qu’un manager, plus des privilèges supplémentaires liés aux ventes.
Les hiérarchies de rôles simplifient la gestion des privilèges en définissant les privilèges de base à des niveaux supérieurs et en les personnalisant à des niveaux inférieurs. Cela réduit la redondance et facilite la maintenance et la mise à jour des politiques de contrôle d’accès.
4.2 Rôles d’application sécurisés
Généralement, ces conditions dépendent de l’exécution réussie d’un package ou d’une fonction PL/SQL.
Pour créer un rôle d’application sécurisé dans Oracle, utilisez la déclaration CREATE ROLE avec la clause IDENTIFIED USING. Ce package ou cette fonction spécifie quel rôle doit être activé. Par exemple :
-- Créer un package PL/SQL pour vérifier les conditions
CREATE OR REPLACE PACKAGE security_pkg IS
FUNCTION check_access RETURN BOOLEAN;
END security_pkg;
/
-- Créer un rôle d'application sécurisé
CREATE ROLE secure_role IDENTIFIED USING security_pkg.check_access;
-- Attribuer des privilèges au rôle d'application sécurisé
GRANT SELECT ON sensitive_data TO secure_role;
Dans cet exemple, nous créons un package PL/SQL nommé “security_pkg” qui contient une fonction “check_access”. Cette fonction détermine si le rôle d’application sécurisé doit être activé. Elle prend en compte des facteurs tels que l’adresse IP de l’utilisateur, l’heure actuelle et des règles spécifiques de l’application.
Ensuite, nous créons un rôle sécurisé appelé “secure_role” en utilisant la clause IDENTIFIED USING et “security_pkg.check_access”. Le rôle est activé uniquement lorsque la fonction “check_access” renvoie TRUE.
Nous donnons un accès particulier au rôle d’application sécurisé, de sorte que les utilisateurs avec ce rôle et remplissant les conditions requises puissent voir les données sensibles.
Les rôles d’application sécurisés renforcent les mesures de sécurité globale en activant les rôles uniquement lorsque certaines conditions sont remplies, ajoutant une sécurité supplémentaire. Cela empêche les accès non autorisés et ajoute un niveau de contrôle supplémentaire au-delà des méthodes d’accès basées sur les rôles.
4.3 Contrôle d’accès à grain fin
Le contrôle d’accès à grain fin dans le RBAC natif d’Oracle vous permet de décider qui peut accéder aux données en fonction de conditions ou d’attributs spécifiques et détaillés. Cela signifie que vous pouvez contrôler l’accès aux données à un niveau extrêmement granulaire.
Vous pouvez spécifier exactement qui a la permission de voir ou de modifier certaines données. Le FGAC vous donne la possibilité de restreindre l’accès en fonction de critères ou d’attributs spécifiques. Oracle propose des outils comme le VPD et le OLS pour un contrôle d’accès précis dans les bases de données.
Le VPD vous permet d’ajouter des règles de sécurité aux requêtes SQL pour une table ou une vue. Ces politiques peuvent imposer une sécurité au niveau des lignes en fonction des attributs de l’utilisateur ou du contexte de l’application. Par exemple :
-- Créer une fonction de politique VPD
CREATE OR REPLACE FUNCTION policy_func (
schema_var IN VARCHAR2,
table_var IN VARCHAR2
)
RETURN VARCHAR2
IS
BEGIN
RETURN 'department_id = SYS_CONTEXT(''USERENV'', ''DEPARTMENT_ID'')';
END;
/
-- Appliquer la politique VPD à une table
BEGIN
DBMS_RLS.ADD_POLICY (
object_schema => 'HR',
object_name => 'EMPLOYEES',
policy_name => 'EMP_POLICY',
function_schema => 'HR',
policy_function => 'POLICY_FUNC',
statement_types => 'SELECT,UPDATE,DELETE',
update_check => TRUE
);
END;
/
Dans cet exemple, nous créons une fonction de politique VPD nommée “policy_func”. Cette fonction génère une règle basée sur l’ID de département de l’utilisateur. La fonction renvoie une condition qui garantit que les utilisateurs ne peuvent accéder qu’aux enregistrements appartenant à leur propre département.
Ensuite, nous utilisons la politique VPD sur la table “EMPLOYEES” avec la procédure DBMS_RLS.ADD_POLICY. Nous spécifions la fonction de politique et les types de déclarations auxquelles elle s’applique.
La politique VPD permet aux utilisateurs d’accéder et de modifier les enregistrements qui correspondent à leur ID de département. Cela offre un contrôle précis sur l’accès au niveau des lignes.
L’Oracle Label Security (OLS) est une autre fonctionnalité qui permet un contrôle d’accès à grain fin basé sur les étiquettes de classification des données. OLS permet d’étiqueter les lignes de données et de contrôler l’accès en fonction des étiquettes des utilisateurs. Ceci est particulièrement utile dans les environnements où les données sensibles nécessitent une confidentialité stricte et une ségrégation des données.
Le contrôle d’accès à grain fin améliore le RBAC en ajoutant des niveaux de sécurité supplémentaires. Il permet d’appliquer des règles d’accès basées sur des attributs ou des conditions de données spécifiques.
Contrôle d’accès basé sur les attributs (ABAC)
L’ABAC est une méthode de contrôle d’accès qui prend en compte les attributs des utilisateurs, les attributs des ressources et l’environnement pour déterminer les autorisations d’accès. L’ABAC fournit une approche plus dynamique et flexible par rapport au RBAC traditionnel.
Dans l’ABAC, les politiques de contrôle d’accès sont définies en fonction des attributs plutôt que des rôles. Les attributs sont des caractéristiques qui peuvent inclure des détails de l’utilisateur, des détails de la ressource et des détails environnementaux.
Les détails de l’utilisateur peuvent inclure le titre du poste ou le département. Les détails de la ressource peuvent inclure la classification des données ou le niveau de sensibilité. Les détails environnementaux peuvent inclure l’heure de la journée ou l’emplacement.
Oracle prend en charge l’ABAC à travers diverses fonctionnalités et technologies, telles que l’Oracle Entitlements Server (OES) et l’Oracle Access Manager (OAM). Ces solutions vous permettent de définir des politiques basées sur les attributs et de les appliquer à travers différentes applications et ressources.
Voici un exemple de la manière dont l’ABAC peut être mis en œuvre à l’aide de l’Oracle Entitlements Server :
-- Définir les attributs de l'utilisateur
CREATE ATTRIBUTE USER_ATTRIBUTES.JOB_TITLE VARCHAR(255);
CREATE ATTRIBUTE USER_ATTRIBUTES.DEPARTMENT VARCHAR(255);
CREATE ATTRIBUTE USER_ATTRIBUTES.SECURITY_CLEARANCE VARCHAR(255);
-- Définir les attributs des ressources
CREATE ATTRIBUTE RESOURCE_ATTRIBUTES.CLASSIFICATION VARCHAR(255);
CREATE ATTRIBUTE RESOURCE_ATTRIBUTES.SENSITIVITY_LEVEL VARCHAR(255);
-- Définir une politique ABAC
CREATE POLICY ACCESS_POLICY
GRANT VIEW ON RESOURCE
WHERE RESOURCE_ATTRIBUTES.CLASSIFICATION = 'CONFIDENTIAL'
AND USER_ATTRIBUTES.SECURITY_CLEARANCE >= 'SECRET'
AND USER_ATTRIBUTES.DEPARTMENT = 'FINANCE';
Dans cet exemple, nous parlons des titres de poste des utilisateurs et des départements, ainsi que de la classification et des niveaux de sensibilité des ressources.
Nous avons une politique appelée “ACCESS_POLICY”. Cette politique permet uniquement aux utilisateurs ayant une autorisation de sécurité ‘SECRET’ et appartenant au département ‘FINANCE’ de consulter les ressources ‘CONFIDENTIAL’.
Les politiques ABAC peuvent être plus complexes et inclure plusieurs attributs et conditions. Le moteur d’évaluation des politiques examine les détails de l’utilisateur, de la ressource et de l’environnement pour déterminer si l’accès doit être accordé.
L’ABAC complète le RBAC en offrant une approche plus fine et dynamique du contrôle d’accès. Il permet des décisions de contrôle d’accès plus flexibles et contextuelles basées sur une combinaison d’attributs.
6. Listes de contrôle d’accès (ACL)Les listes de contrôle d’accès (ACL) sont un autre mécanisme pour contrôler l’accès aux ressources. Les ACL sont utilisées pour spécifier les permissions pour des utilisateurs ou groupes individuels sur des objets ou ressources spécifiques.
Dans Oracle, les ACL sont souvent utilisées pour gérer l’accès aux ressources réseau externes telles que les services web ou les bases de données distantes. Oracle propose un mécanisme ACL intégré via le package DBMS_NETWORK_ACL_ADMIN.
Voici un exemple de la manière de créer une ACL et d’accorder des permissions à l’aide du package DBMS_NETWORK_ACL_ADMIN :
-- Créer une ACL
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
acl => 'my_acl.xml',
description => 'ACL pour accéder à un service web externe',
principal => 'HR_USER',
is_grant => TRUE,
privilege => 'connect'
);
END;
/ -- Assigner l'ACL à un hôte réseau BEGIN
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (
acl => 'my_acl.xml',
host => 'www.example.com',
lower_port => 80,
upper_port => 80
);
END;
/
Dans cet exemple, nous créons une ACL nommée “my_acl.xml” à l’aide de la procédure DBMS_NETWORK_ACL_ADMIN.CREATE_ACL. Nous spécifions le principal (utilisateur ou rôle) auquel l’ACL s’applique, dans ce cas, ‘HR_USER’. Nous définissons également la permission ‘connect’, qui permet au principal d’établir une connexion à la ressource externe.
Ensuite, nous attribuons l’ACL à un hôte réseau spécifique en utilisant la procédure DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL. Nous spécifions le nom de l’ACL, le nom d’hôte ou l’adresse IP, et la plage de ports à laquelle l’ACL s’applique.
Avec cette ACL en place, ‘HR_USER’ pourra se connecter à l’hôte réseau spécifié sur la plage de ports désignée.
Les ACL aident à contrôler l’accès aux ressources externes de manière détaillée, en travaillant aux côtés des mécanismes de contrôle d’accès de la base de données. Elles sont utiles pour gérer les ressources réseau et s’assurer que seuls les utilisateurs ou les applications autorisés peuvent y accéder.
Ceci conclut la Partie 2. Dans la dernière Partie 3, nous allons couvrir les rôles en détail.
Recherchez-vous des solutions professionnelles de sécurité des bases de données ? Rejoignez-nous en ligne pour une session de démonstration complète sur la gestion des utilisateurs et des rôles dans DataSunrise, offrant des solutions avancées pour les bases de données Oracle. Découvrez comment simplifier le contrôle d’accès et renforcer la sécurité avec notre plateforme intuitive.
Suivant
