SPARC : le niveau externe
Comment Oracle isole chaque utilisateur derrière son propre filtre sur la base.
1. Architecture SPARC
L'architecture ANSI/SPARC (groupe de normalisation) découpe une base de données en trois niveaux superposés. Chaque niveau a un rôle bien distinct, et l'utilisateur final ne voit que le tout premier.
L'architecture ANSI/SPARC en trois étages.
Ce chapitre traite du niveau externe, mis en œuvre dans Oracle par trois mécanismes :
- Les utilisateurs — qui se connecte
- Les rôles — ensemble de droits réutilisables
- Les vues logiques et matérialisées — filtre sur les données
2. Le concept d'utilisateur
Créer un utilisateur dans Oracle nécessite trois ingrédients : nom, mot de passe, et tablespace de travail (son espace logique sur disque).
CREATE USER nomUser IDENTIFIED BY motDePasse
DEFAULT TABLESPACE users;
Il n'a aucun rôle. C'est l'admin qui doit lui en attribuer un.
À la création d'une base, deux rôles d'administration sont définis : SYSTEM et SYS.
3. Le concept de rôle
Attribuer / Retirer
GRANT privilege | role TO role;
REVOKE privilege | role FROM role;
Deux familles de rôles
Associé à un package. Activé automatiquement lors de l'exécution d'un élément du package. C'est l'unique façon de l'activer.
Toutes les autres. Peuvent être protégés par un mot de passe.
CREATE ROLE nomRole [NOT IDENTIFIED | IDENTIFIED {by mot_de_passe}]
-- Activer un rôle protégé par mot de passe
SET ROLE nomRole IDENTIFIED BY mot_de_passe;
Rôles prédéfinis Oracle — à connaître par cœur
| Rôle | Privilèges système |
|---|---|
CONNECT | ALTER SESSION, CREATE CLUSTER, CREATE DATABASE LINK, CREATE SEQUENCE, CREATE SESSION, CREATE SYNONYM, CREATE TABLE, CREATE VIEW |
RESOURCE | CREATE CLUSTER, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER, UNLIMITED TABLESPACE |
DBA | Tous les privilèges |
EXP_FULL_DATABASE | SELECT ANY TABLE, BACKUP ANY TABLE |
IMP_FULL_DATABASE | BECOME USER |
L'exemple canonique du cours
CREATE USER Udev IDENTIFIED BY motdepasse;
CREATE ROLE Rdev;
GRANT CONNECT, RESOURCE to Rdev;
GRANT Rdev to Udev;
-- CONNECT et RESOURCE sont des rôles prédéfinis dans Oracle.
4. Les privilèges Système
Un privilège Système permet de créer des objets Oracle. Ils se combinent généralement avec les verbes ALTER, CREATE, DROP.
| Privilège | ALTER | CREATE | DROP |
|---|---|---|---|
| ANY CLUSTER | ✓ | ✓ | ✓ |
| CLUSTER | ✓ | ||
| ANY INDEX | ✓ | ✓ | ✓ |
| PROCEDURE | ✓ | ||
| ANY PROCEDURE | ✓ | ✓ | ✓ |
| ROLE | ✓ | ||
| ANY ROLE | ✓ | ✓ | |
| SEQUENCE / SNAPSHOT / TABLE / TRIGGER / VIEW | ✓ | ||
| ANY SEQUENCE / SNAPSHOT / TABLE / TRIGGER | ✓ | ✓ | ✓ |
| DATABASE | ✓ | ||
| PROFILE / ROLLBACK SEGMENT / TABLESPACE | ✓ | ✓ | ✓ |
| SESSION | ✓ | ✓ | |
| SYSTEM | ✓ | ||
| USER | ✓ | ✓ | |
| ANY VIEW / ANY SYNONYM / DATABASE LINK | ✓ | ✓ | |
| SYNONYM / PUBLIC DATABASE LINK / PUBLIC SYNONYM | ✓ | (✓ pour PUBLIC SYNONYM) |
5. Les privilèges Objet
Droit d'exécuter une action particulière sur un objet : table, vue, séquence, procédure, fonction, package, vue matérialisée.
| Privilège | Table | Vue | Séquence | Proc / Fct / Pkg | Vue matérialisée |
|---|---|---|---|---|---|
| ALTER | ✓ | ✓ | |||
| DELETE | ✓ | ✓ | |||
| EXECUTE | ✓ | ||||
| INDEX | ✓ | ||||
| INSERT | ✓ | ✓ | |||
| REFERENCES | ✓ | ||||
| SELECT | ✓ | ✓ | ✓ | ✓ | |
| UPDATE | ✓ | ✓ |
Exemples canoniques
-- Droits sur une table pour un utilisateur
GRANT SELECT, INSERT, UPDATE, DELETE ON SUPPLIERS TO SMITHJ;
-- Droits sur toutes les tables
GRANT SELECT ANY TABLE TO FRED;
-- Droit sur une clé étrangère
GRANT REFERENCES (CLI_ID) ON TABLE T_CLIENT TO DUMONT;
-- Droit d'utilisation d'une séquence (pour un rôle)
GRANT ALTER ON SEQ_ID_CLIENT TO RESPONSABLE_CLIENT;
-- Droit d'exécution d'une procédure
GRANT EXECUTE ON PROC_MAJ_PRIX TO PIERROT;
-- Droit de sélection sur une vue matérialisée
GRANT SELECT ON VM_PRODUITS TO RESPONSABLE_CLIENT;
6. Les vues
Pour limiter l'accès à des données on dispose, en plus des rôles, de vues :
Une requête SQL ré-exécutée à chaque appel. Aucun stockage physique.
Une requête SQL dont le contenu est dupliqué à la création et rafraîchi régulièrement. Stockage physique présent.
Pourquoi des vues ?
- Filtrer les données → outil essentiel des schémas externes.
- Cas de la VM : gain de performance sur les requêtes compliquées avec jointures.
- Une BD bien construite est normalisée. Créer des VM consiste en général à dénormaliser pour la performance.
-- Exemple : masquer l'âge des clients
create table Client(nom …, prenom …, age …)
create view Vue_Client as select nom, prenom from Client
Vues matérialisées (VM) — création
-- Création basique
CREATE MATERIALIZED VIEW MVue_Client AS SELECT * FROM Client;
Privilèges requis :
- Système :
CREATE MATERIALIZED - Objet :
GRANT SELECT ONsur les tables de la requête
Par défaut, la VM est créée avec le contenu de la sélection associée. Pour la remplir plus tard :
CREATE MATERIALIZED VIEW MV_Client BUILD DEFERRED
AS SELECT * FROM Client;
Trois modes de rafraîchissement
-- 1) ON DEMAND (défaut) — via dbms_mview.refresh
CREATE MATERIALIZED VIEW MV_Client REFRESH ON DEMAND
AS SELECT * FROM Client;
EXECUTE DBMS_MVIEW.REFRESH('MV_Client');
-- 2) ON COMMIT — pour toute modification validée des tables sources
CREATE MATERIALIZED VIEW MV_Client REFRESH ON COMMIT
AS SELECT * FROM Client;
-- 3) À intervalle régulier (temps_en_jour peut être fractionnaire)
CREATE MATERIALIZED VIEW MV_Client REFRESH START WITH Date_Depart
NEXT temps_en_jour AS SELECT * FROM Client;
Trois méthodes de rafraîchissement
| Méthode | Comment | Prérequis |
|---|---|---|
| FAST | Ne rafraîchit que les changements (la plus rapide) | Nécessite un MATERIALIZED VIEW LOG sur les tables sources |
| COMPLETE | Oracle réexécute la requête en entier | — |
| FORCE | Essaie FAST, sinon COMPLETE | Méthode par défaut |
-- FAST nécessite un MATERIALIZED VIEW LOG sur les sources
CREATE MATERIALIZED VIEW LOG ON MV_Client;
CREATE MATERIALIZED VIEW MV_Client
REFRESH [ON DEMAND | ON COMMIT | START WITH …] FAST
AS SELECT * FROM Client;
★ Réviser le chapitre
Pour vérifier ta compréhension
Réponds dans ta tête, puis déplie pour vérifier.
Pourquoi vaut-il mieux passer par des rôles plutôt que d'attribuer les droits directement aux utilisateurs ?
Trois raisons principales :
- Maintenance simplifiée : si un nouvel utilisateur arrive avec le même profil, on lui attribue le rôle existant en une ligne.
- Cohérence : un seul endroit centralise les permissions d'une famille d'utilisateurs.
- Réversibilité : on désactive ou retire le rôle sans toucher aux autres droits.
Quelle est la différence entre une vue logique et une vue matérialisée ?
La vue logique est un alias de requête : aucune donnée stockée, la requête est ré-exécutée à chaque SELECT. La vue matérialisée stocke physiquement le résultat de la requête et le rafraîchit (ON DEMAND, ON COMMIT, ou à intervalle). La matérialisée est utile pour la performance sur des jointures complexes — c'est une forme de dénormalisation.
Dans quel cas choisir REFRESH ON COMMIT plutôt que REFRESH ON DEMAND ?
ON COMMIT garantit que la vue est toujours à jour — chaque validation sur les tables sources la rafraîchit. C'est idéal pour des données critiques en cohérence mais lues rarement. Le coût : chaque commit devient plus lourd.
ON DEMAND laisse la vue désynchronisée et la rafraîchit à la demande (procédure ou intervalle). Idéal pour des données lues souvent mais qui peuvent tolérer un léger décalage (tableaux de bord, reporting).
Que se passe-t-il si je tente d'exécuter du SQL juste après CREATE USER … IDENTIFIED BY … sans rien d'autre ?
Rien. L'utilisateur existe mais n'a aucun rôle ni privilège — pas même celui de se connecter (CREATE SESSION fait partie du rôle CONNECT). Il faut au minimum lui accorder CONNECT.
Quelle est la méthode par défaut de rafraîchissement d'une vue matérialisée ?
FORCE : Oracle essaie d'abord FAST (incrémental, nécessite un journal sur les sources), et tombe sur COMPLETE si FAST n'est pas possible.
🃏 Flashcards éclair
Clique sur une carte pour la retourner.
Créer un user
Syntaxe minimale Oracle ?
tourne →CREATE USER nomUser
IDENTIFIED BY motDePasse
DEFAULT TABLESPACE users;
← retourne
Donner un droit
Syntaxe générique GRANT ?
tourne →GRANT privilege | role
TO user | role;
← retourne
3 rôles prédéfinis
Cite-en au moins 3.
tourne →(et EXP_FULL_DATABASE, IMP_FULL_DATABASE)
Vue logique
Définition en une phrase.
tourne →Aucun stockage physique.
Vue matérialisée
Définition en une phrase.
tourne →Créer une VM
Syntaxe minimale ?
tourne →CREATE MATERIALIZED VIEW MV_Client
AS SELECT * FROM Client;
← retourne
3 modes de refresh
Cite-les.
tourne →dbms_mview.refresh)ON COMMIT (à chaque commit)
START WITH … NEXT (intervalle)
3 méthodes de refresh
Avec leurs spécificités.
tourne →COMPLETE — réexécute la requête
FORCE — défaut, FAST si possible sinon COMPLETE
Architecture SPARC
Les 3 niveaux ?
tourne →Conceptuel (modèle global)
Physique (stockage disque)
Rôle d'application
Particularité d'activation ?
tourne →Privilège objet SELECT
Sur quels objets s'applique-t-il ?
tourne →(pas sur procédure/fonction/package : c'est EXECUTE)
Privilèges pour créer une VM
Système + objet ?
tourne →CREATE MATERIALIZEDObjet :
GRANT SELECT ON sur les tables de la requête
✎ Quiz éclair
CREATE USER … IDENTIFIED BY … ?CREATE SESSION. Il faut au minimum lui donner CONNECT.FAST de rafraîchissement ?MATERIALIZED VIEW LOG) sur chaque table source.📌 Pour la feuille recto-verso
CREATE USER … IDENTIFIED BY … DEFAULT TABLESPACE …GRANT priv|role TO user|role·REVOKE … FROM …- Rôles prédéfinis :
CONNECT,RESOURCE,DBA - Rôle protégé :
CREATE ROLE … IDENTIFIED BY …+SET ROLE - Rôle d'application : activation auto via le package — unique moyen
- Privilège objet pour proc/fct/package :
EXECUTE - 3 modes refresh VM : ON DEMAND (défaut, dbms_mview.refresh) · ON COMMIT · START WITH … NEXT
- 3 méthodes refresh : FAST (incrémental, requiert VIEW LOG) · COMPLETE · FORCE (défaut)
- VM : système
CREATE MATERIALIZED+ objetGRANT SELECTsources - BD bien construite = normalisée ; VM = dénormalisation pour performance