Conception Et Réalisation (Oracle) by Grare Stéphane - HTML preview

PLEASE NOTE: This is an HTML preview only and some elements such as links or page numbers may be incorrect.
Download the book in PDF, ePub, Kindle for a complete version.

Autorisations

Autorisations d’objet

Les autorisations peuvent être gérées pour des objets spécifiques, d’un type particulier ou

appartenant à un schéma spécifique, mais dépendant de la portée (voir schéma). L’accès à

tous ces objets est contrôlé en octroyant, refusant ou annulant la possibilité d’utiliser

certaines instructions ou procédures stockées ; par exemple, on peut accorder à un utilisateur

le droit de lire (SELECT), mais lui refuser le droit d’ajout (INSERT), de mise à jour

(UPDATE) et de suppression (DELETE). Il est également possible de préciser certaines

colonnes de la table dans le cas de lecture ou mise à jour : cette possibilité n’est pas

conseillée, il est préférable de passer par une vue ou une procédure stockée pour limiter la

gestion des droits.

GRANT {ALL [PRIVILEGES] | nom_privilege [(colonne, [ ,.. ]) }

ON [nom_schema].objet

TO {nom_utilisateur | PUBLIC} [ ,...]

[ WITH GRANT OPTION ]

Exemple

:

Accorder

à

l’utilisateur

Camille

tous

les

privilèges

d’utilisation de la table

sales.Store, et l’autorisation Select sur la table sales.SalesPerson

GRANT ALL ON sales.Store TO Camille ;

GRANT SELECT ON sales.SalesPerson TO Camille ;

Cette autorisation pourra par la suite être retirée par l’instruction

REVOKE.

Syntaxe:

REVOKE {ALL PRIVILEGE | nom_privilege [(colonne, [,...]) }

ON [ nom_scema.] nom_objet

FROM { nom_utilisateur | PUBLIC } [,…]

Exemple : Retirer à l’utilisateur Camille l’autorisation Select sur la table sales.SalesPerson

de la base de données AdventureWorks

REVOKE SELECT ON sales.SalesPerson FROM Camille

L’instruction DENY permet d’interdire à un utilisateur l’utilisation d’un privilège, même s’il en

reçoit l’autorisation par son appartenance à un groupe.

Privilèges sur les vues et les programmes stockés

Un utilisateur qui a un droit sur une vue n’a pas besoin d’avoir les droits sur les objets

manipulés par la vue. Il en est de même par défaut pour les programmes stockés : le

programme stocké s’exécute avec les droits du propriétaire (definer rights). Au besoin, le

programme stocké peut être conçu pour s’exécuter avec les droits de l’appelant (invoker

rights).

Le comportement souhaité se définit lors de la création du programme stocké grâce à la

clause AUTHID.

AUTHID { CURRENT_USER | DEFINER }

104

index-105_1.jpg

Le mode de fonctionnement par défaut (droit du propriétaire) est très intéressant, car il

permet d’utiliser les vues et les programmes stockés comme couche intermédiaire pour

l’accès aux objets de la base de données. Ce genre d’approche permet principalement :

- De masquer la structure réelle des tables et de pouvoir la faire évoluer avec le minimum

d’impacts sur la partie cliente.

- D’implémenter des règles de gestion (contrôle, calculs, sécurité...) côté serveur.

Nommer un objet d’un autre schéma

Même si un utilisateur a un privilège sur un objet d’un autre schéma, il doit préfixer le nom de

l’objet par le nom de son propriétaire pour pouvoir y accéder :

SELECT * FROM db01.article;

Des synonymes publics peuvent être définis pour simplifier l’écriture des requêtes et les

rendre indépendantes du nom du propriétaire

CREATE PUBLIC SYNONYM article FOR db01.article;

La technique du synonyme ne donne pas de droit en soi, ce n’est qu’une technique de

résolution de nom. Une fois que le nom est résolu, Oracle regarde si l’utilisateur a les

privilèges nécessaires pour accéder à l’objet.

Les rôles

Les rôles constituent un moyen de regrouper des utilisateurs dans une unité unique à laquelle

il est possible d’octroyer des privilèges. Les rôles permettent de simplifier la gestion des

droits.

Qu'est-ce qu'un Rôle ?

Les principales caractéristiques des rôles sont les suivantes :

· Un rôle peut être attribué à un autre rôle

· Un utilisateur peut avoir plusieurs rôles

· Un rôle n’appartient à personne.

La mise en œuvre s’effectue en trois étapes :

105

· Création du rôle

· Attribution des privilèges (système et objet) au rôle

· Attribution du rôle aux utilisateurs.

Gestion d’un rôle

Création

L’ordre SQL CREATE ROLE.

CREATE ROLE nom_role

[ IDENTIFIED { BY mot_de_passe | EXTERNALY | USING nom_package}

| not IDENTIFIED]

Exemple :

CREATE ROLE courier ;

Attribution d’un privilège à un rôle

L’ordre SQL GRANT permet d’attribuer les privilèges au rôle.

GRANT nom_privilege [,…]

TO nom_rôle [,…]

[ WITH ADMIN OPTION ] ;

Révocation d’un privilège à un rôle

L’ordre SQL REVOKE :

REVOKE {nom_privilège [,…] | ALL [PRIVILEGES] }

FROM nom_role [,…] ;

Attribution d’un rôle à un utilisateur

L’ordre SQL GRANT permet d’attribuer un rôle à un utilisateur ou à un rôle :

GRANT nom_role [,…]

TO { nom_utilisateur | PUBLIC | nom_role } [,…]

[ WITH ADMIN OPTION ] ;

Révocation d’un rôle à un utilisateur

L’ordre SQL REVOKE permet de retirer un rôle à un utilisateur ou à un rôle :

REVOKE nom_role [,…]

FROM { nom_utilisateur | PUBLIC | nom_role } [,…] ;

Activation ou désactivation d’un rôle

L’ordre SQL SET ROLE permet d’activer ou de désactiver un rôle :

SET ROLE { nom_role [,…]

| ALL | EXCEPT nom_role [,…] ] | NONE } ;

Trouver les informations sur les droits

106

index-107_1.png

index-107_2.png

index-107_3.png

Vues du dictionnaire de données privilèges système :

· DBA_SYS_PRIVS : Privilèges système attribués aux utilisateurs

select * from DBA_SYS_PRIVS where grantee='CONNECT' ;

· SESSION_PRIV : Privilèges système actuellement actifs dans la session

select * from DBA_SYS_PRIVS where grantee='RESOURCE' ;

· SYSTEM_PRIVILEGES_MAp : Liste de tous les privilèges système.

select * from DBA_SYS_PRIVS where grantee='DBA' order by PRIVILEGE ;

107

Vues du dictionnaire de données privilèges objets :

· DBA_TAB_PRIVS : Privilèges objet attribués aux utilisateurs (ou aux rôles) sur la totalité

de l’objet.

· DBA_COL_PRIVS : Privilèges objet attribués aux utilisateurs (ou aux rôles) sur certaines

colonnes de l’objet uniquement.

· TABLE_PRIVILEGE_MAP : Liste de tous les privilèges objet.

Les différents types de comptes

Une base de données Oracle contient en général trois types de comptes.

Administration : Ce type de compte détient tous les privilèges système nécessaires à la

gestion des structures de stockage et à la gestion des utilisateurs. Les comptes administrateur

ont également un accès complet au dictionnaire de données. Ces privilèges peuvent être

obtenus par l’intermédiaire du rôle DBA ou d’un rôle équivalent.

Développement/Hébergement du schéma applicatif : Ce type de compte détient des

privilèges nécessaires pour la création des différents types d’objets (table, vues, procédures

…) et il possède un quota sur au moins un tablespace. Ces privilèges peuvent être obtenus

par l’intermédiaire des rôles CONNECT et RESSOURCE ou d’un rôle équivalent.

Utilisateur final : Ce type de compte a besoin de très peu de privilèges système : CREATE

SESSION (obligatoire). Il possède des privilèges objet sur les objets du schéma applicatif,

généralement par l’intermédiaire d’un rôle.

108

Programmations SGBD

Le PL/SQL est le langage procédural d’Oracle. Il constitue une extension au SQL qui est le

langage de requête. L’objectif du PL/SQL est de pouvoir mélanger la puissance des

instructions SQL avec la souplesse d’un langage procédural dans un même traitement. Ces

traitements peuvent être exécutés, soit directement par les outils Oracle (bloc anonyme), soit

à partir d’objets de la base de données (Procédures stockées, fonctions et Triggers).