Le carnet
Chapitre 1

SPARC : le niveau externe

Comment Oracle isole chaque utilisateur derrière son propre filtre sur la base.

~ 25 min de lecture TP1 — Cinéma 12 flashcards

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.

Schéma externe Schéma externe Schéma externe Schéma conceptuel Schéma physique Niveau externe Niveau conceptuel Niveau physique

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;
⚠️ À sa naissance, un utilisateur ne peut rien faire.
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

Définition Un rôle est un ensemble nommé de privilèges. Un privilège est la possibilité d'exécuter une action sur la BD. Un rôle peut être attribué à des utilisateurs ou à d'autres rôles.

Attribuer / Retirer

GRANT privilege | role TO role;
REVOKE privilege | role FROM role;

Deux familles de rôles

🔧 Rôle d'application
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.
👤 Rôle utilisateur
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ôlePrivilèges système
CONNECTALTER SESSION, CREATE CLUSTER, CREATE DATABASE LINK, CREATE SEQUENCE, CREATE SESSION, CREATE SYNONYM, CREATE TABLE, CREATE VIEW
RESOURCECREATE CLUSTER, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER, UNLIMITED TABLESPACE
DBATous les privilèges
EXP_FULL_DATABASESELECT ANY TABLE, BACKUP ANY TABLE
IMP_FULL_DATABASEBECOME 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ègeALTERCREATEDROP
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ègeTableVueSéquenceProc / Fct / PkgVue 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 :

🪟 Vue logique
Une requête SQL ré-exécutée à chaque appel. Aucun stockage physique.
💾 Vue matérialisée (VM)
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 ON sur 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;
💡 Conseil Il est fortement conseillé que la vue matérialisée contienne la clé primaire des tables sources.

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éthodeCommentPrérequis
FASTNe rafraîchit que les changements (la plus rapide)Nécessite un MATERIALIZED VIEW LOG sur les tables sources
COMPLETEOracle réexécute la requête en entier
FORCEEssaie FAST, sinon COMPLETEMé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 →
CONNECT · RESOURCE · DBA
(et EXP_FULL_DATABASE, IMP_FULL_DATABASE)

Vue logique

Définition en une phrase.

tourne →
Une requête SQL ré-exécutée à chaque appel.
Aucun stockage physique.

Vue matérialisée

Définition en une phrase.

tourne →
Une requête dont le contenu est dupliqué à la création et rafraîchi régulièrement. Stockage physique présent.

Créer une VM

Syntaxe minimale ?

tourne →
CREATE MATERIALIZED VIEW MV_Client
AS SELECT * FROM Client;
← retourne

3 modes de refresh

Cite-les.

tourne →
ON DEMAND (défaut, via dbms_mview.refresh)
ON COMMIT (à chaque commit)
START WITH … NEXT (intervalle)

3 méthodes de refresh

Avec leurs spécificités.

tourne →
FAST — incrémental, requiert un VIEW LOG
COMPLETE — réexécute la requête
FORCE — défaut, FAST si possible sinon COMPLETE

Architecture SPARC

Les 3 niveaux ?

tourne →
Externe (vues utilisateurs)
Conceptuel (modèle global)
Physique (stockage disque)

Rôle d'application

Particularité d'activation ?

tourne →
Activé automatiquement à l'exécution d'un élément du package associé. C'est l'unique façon de l'activer.

Privilège objet SELECT

Sur quels objets s'applique-t-il ?

tourne →
Table · Vue · Séquence · Vue matérialisée
(pas sur procédure/fonction/package : c'est EXECUTE)

Privilèges pour créer une VM

Système + objet ?

tourne →
Système : CREATE MATERIALIZED
Objet : GRANT SELECT ON sur les tables de la requête

✎ Quiz éclair

test rapide · 6 questions
0 / 6
1.Que peut faire un utilisateur juste après CREATE USER … IDENTIFIED BY … ?
  • Créer ses propres tables tout de suite
  • Se connecter, mais sans privilèges objet
  • Rien — il n'a aucun rôle ni privilège
  • Devenir DBA automatiquement
À la création, un user n'a aucun rôle — pas même CREATE SESSION. Il faut au minimum lui donner CONNECT.
2.Lequel n'est pas un rôle prédéfini Oracle ?
  • CONNECT
  • ADMIN
  • DBA
  • RESOURCE
Les rôles prédéfinis du cours : CONNECT, RESOURCE, DBA, EXP_FULL_DATABASE, IMP_FULL_DATABASE. ADMIN n'en fait pas partie.
3.Quelle est la méthode de rafraîchissement par défaut d'une vue matérialisée ?
  • FAST
  • FORCE
  • COMPLETE
  • ON COMMIT
FORCE est le défaut : Oracle essaie FAST, sinon COMPLETE.
4.Un rôle d'application est activé :
  • Automatiquement à l'exécution d'un élément du package associé
  • Par SET ROLE … IDENTIFIED BY …
  • Au login de l'utilisateur
  • Manuellement via le DBA
C'est l'unique façon d'activer un rôle d'application : exécuter quelque chose du package.
5.Quel privilège objet est nécessaire pour exécuter une procédure stockée ?
  • SELECT
  • ALTER
  • REFERENCES
  • EXECUTE
SELECT s'applique aux tables/vues/séquences. Pour exécuter du code (procédure, fonction, package) → EXECUTE.
6.Sur quelle condition technique repose la méthode FAST de rafraîchissement ?
  • Une vue matérialisée avec clé primaire uniquement
  • Un index B-tree sur la table source
  • Un MATERIALIZED VIEW LOG sur les tables sources
  • Une transaction READ ONLY
FAST est incrémental — il a besoin du journal des changements (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 + objet GRANT SELECT sources
  • BD bien construite = normalisée ; VM = dénormalisation pour performance