Vous êtes sur la page 1sur 33

Bases de données et sites WEB

Cours2 : Sécurité et contrôles d’accès

Anne Doucet

1
Plan
• Authentification
• Autorisation
– Privilèges
– Rôles
– Profils
– Limitations de ressources
• Audit
• Contrôle d’accès via les vues

2
Sécurité
• Confidentialité
– L’information ne doit pas être accessible aux utilisateurs
non autorisés
• Intégrité
– Les données ne peuvent être modifiées que par les
utilisateurs habilités à le faire.
• Disponibilité
– Les utilisateurs ayant le droit de faire certaines actions
doivent pouvoir accéder aux données correspondantes.
• Les SGBD fournissent différents moyens pour garantir la
sécurité : authentification, contrôle d’accès, mécanismes
d’audit, vues.
3
Authentification
• Chaque BD Oracle possède une liste de noms d’utilisateurs, et un mot de
passe associé.
– Vérifié quand un utilisateur veut utiliser des données, des ressources,
des applications, par le système d’exploitation, le réseau, la base
Oracle.
– Authentification dans Oracle : cryptage du mot de passe, verrouillage
des comptes, expiration du mot de passe, vérification de la complexité
du mot de passe.
• A la création d’un nouvel utilisateur, on définit
– un espace de stockage des tables par défaut (default tablespace),
– un espace de stockage de tables temporaire (temporary tablespace),
– des quotas sur ces espaces.
– Un profil délimitant l’accès aux ressources

4
Autorisation
• Tous les éléments SQL ont un propriétaire. Un propriétaire
d’un objet possède tous les droits (privilèges) sur cet objet.

• On peut donner des droits à d’autres utilisateurs pour accéder


aux données, pour les modifier, pour obtenir des ressources, …

• Les droits sont accordés (ou refusés) à différents niveaux


(objets, schémas, tables, tuples, CPU, …).

• On peut accorder des droits individuellement, ou par groupes.

5
Privilèges
• Un privilège est un droit accordé pour utiliser un type
d’instruction SQL, ou pour accéder à un objet.
• Principe :
– Accorder des privilèges aux utilisateurs pour qu’ils puissent
travailler.
– N’accorder aux utilisateurs que les privilèges dont ils ont
besoin. Trop de privilèges peut compromettre la sécurité.
• Les privilèges sont accordés individuellement ou par groupe
d’utilisateurs (role)
• Deux types de privilèges :
– System privilege
– Schema Object Privilege

6
System Privileges
Droits d’effectuer certaines actions :

GRANT <system_privilege> TO <user_list> | PUBLIC [WITH


GRANT OPTION]

GRANT : Accorder
<System privilege> : liste de privilèges
Exemples : CREATE INDEX, CREATE PROCEDURE, DELETE ANY
TABLE, ALTER USER, CREATE VIEW, DROP ANY VIEW, DROP
USER, …
TO <user_list> : liste d’utilisateurs autorisés
TO PUBLIC donne les droits à tous les utilisateurs.
WITH GRANT OPTION:permet d’accorder(transmettre) le privilège à d’autres
utilisateurs.

Ex: GRANT CREATE TABLE, CREATE TRIGGER TO user1,


user2;
7
Object Privileges
Droits d’effectuer des actions sur des objets du schéma:

GRANT <privilege_list> ON <database object> TO


<user_list>|PUBLIC [WITH GRANT OPTION]

<Privilege list> : opérations du langage de manipulation de données


Ex: ALTER, DELETE, EXECUTE, INSERT, UPDATE,…

<Database_object> : tables, vues, procedures, row, etc.

Ex: GRANT insert, update(Fonction, Salaire) ON EMP


TO user2;
GRANT all ON dept TO user3;

8
Utilisation des privilèges

• Pour créer une vue, il faut :


– Avoir obtenu un des privilèges système suivants
(explicitement ou par un rôle) :
• CREATE VIEW (créer une vue dans son propre schéma)
• CREATE ANY VIEW (créer une vue dans un autre
schéma)
– Avoir un des privilèges suivants :
• SELECT, INSERT, UPDATE, DELETE sur tous les
objets impliqués dans la vue
• SELECT ANY TABLE, INSERT ANY TABLE,
UPDATE ANY TABLE, DELETE ANY TABLE
9
Transmission des privilèges

Pour accorder un privilège à un autre utilisateur, il faut posséder


le privilège avec l’option GRANT.

Ex :
EMP(ID_EMP, NOM, SALAIRE, ID_SERVICE)
SERVICE(ID_SERV, INTITULE, ID_DIR)

Max possède le droit SELECT sur EMP. Il peut le transmettre à


un autre utilisateur (Jules), avec ou sans l’option GRANT.
Si Jules a l’option GRANT, il peut également transmettre ce
droit, sinon, il en a seulement l’usage.

10
Transmission des privilèges

On peut transmettre un privilège moins général que celui qu’on


possède.
Max possède le droit INSERT sur EMP, avec l’option GRANT.
Il peut transmettre INSERT(NOM) sur EMP à un autre
utilisateur.

Un utilisateur peut obtenir le même privilège de la part de


plusieurs utilisateurs différents, et le posséder de plusieurs
manières (par ex. avec ou sans option GRANT).

11
Exemple
Max est le propriétaire du schéma Emp, Service.
Il effectue les ordres :
GRANT SELECT, INSERT ON emp TO jules, lulu WITH
GRANT OPTION;
GRANT SELECT, INSERT ON Service TO jules, lulu
WITH GRANT OPTION;
Jules effectue les ordres suivants :
GRANT SELECT, INSERT ON emp TO zoe;
GRANT SELECT ON service TO zoe;
Lulu effectue les ordres suivants :
GRANT SELECT, INSERT(NOM) ON emp TO zoe;
GRANT SELECT ON service TO zoe;
Zoé a reçu les droits SELECT sur Emp et Service de deux
utilisateurs différents. Elle a aussi reçu le droit
INSERT(NOM) de deux façons différentes.
12
Diagramme des droits

Max Max Max


Max INSERT SELECT
SELECT INSERT
On Serv On Emp on Emp
on Serv Lulu
** ** ** SELECT
**
On Serv
* Lulu
Jules
SELECT
SELECT
On Emp
On Serv
* *

Lulu
INSERT
Jules On Emp
SELECT *
OnEmp
*
Jules Zoé
INSERT Zoé INSERT
On Emp Zoé Zoé SELECT On Emp
* INSERT(NOM) SELECT On Emp
onEmp onServ
*: with grant option
13
** : propriétaire
Annulation des privilèges
La transmission des droits conduit à un recouvrement des privilèges. SQL
maintient un graphe des privilèges gardant la trace des privilèges et de leurs
origines (utile pour l’annulation des privilèges).

Pour annuler des privilèges, on utilise la commande REVOKE :


REVOKE <system_privilege> FROM <user_list>;
REVOKE <object_privilege list> ON <database object>
FROM <user_list>;

Ex: REVOKE update ON emp FROM user1;


Si l’utilisateur a transmis ces privilèges à d’autres, le système
renvoie une erreur et ne supprime pas les privilèges. Pour les
supprimer, il faut utiliser l’option CASCADE.

14
REVOKE

• REVOKE peut prendre 2 options RESTRICT et CASCADE.

• Lorsqu'on utilise REVOKE CASCADE, on supprime tous les


privilèges transmis en cascade. (Un privilège obtenu par
transmission (grant option) est abandonné si on supprime le
privilège à celui qui l’a transmis).
• L’option REVOKE RESTRICT ne supprime que les privilèges
qui n’ont pas été transmis. S’ils ont été transmis, le système
renvoie une erreur.

15
Exemple
Max Max Max
Max INSERT SELECT
SELECT INSERT
On Serv On Emp on Emp
on Serv Lulu
** ** ** SELECT
**
On Serv
* Lulu
Jules
SELECT
SELECT
On Emp
On Serv
* *

Lulu
INSERT
Jules On Emp
SELECT *
OnEmp
*
Jules Zoé
INSERT Zoé INSERT
On Emp Zoé Zoé SELECT On Emp
* INSERT(NOM) SELECT On Emp
onEmp onServ
REVOKE SELECT,INSERT ON emp FROM lulu; 16
Renvoie error
Exemple
Max Max Max
Max INSERT SELECT
SELECT INSERT
On Serv On Emp on Emp
on Serv Lulu
** ** ** SELECT
**
On Serv
* Lulu
Jules
SELECT
SELECT
On Emp
On Serv
* *

Lulu
INSERT
Jules On Emp
SELECT *
OnEmp
*
Jules Zoé
INSERT Zoé INSERT
On Emp Zoé Zoé SELECT On Emp
* INSERT(NOM) SELECT On Emp
onEmp onServ
17
REVOKE SELECT,INSERT ON emp FROM lulu CASCADE;
Rôles

• Les rôles sont des groupes nommés de privilèges,


qu’on accorde, en groupe, à des utilisateurs ou à
d’autres rôles.
• Permet de gérer les privilèges
– pour une application (ex: ensemble de privilèges
nécessaires pour exécuter l’application Paye)
– Pour un groupe d’utilisateurs (privilèges des
directeurs de département, des responsables de la
paye, etc.)

18
Exemple

Définition du role ‘manager’ :


CREATE ROLE manager;
GRANT CREATE VIEW, CREATE PROCEDURE TO manager;
GRANT SELECT, INSERT, UPDATE(SAL) ON emp TO manager;
GRANT SELECT, INSERT, UPDATE ON dept TO manager;
GRANT manager TO user1, user2, user3;
Pour annuler :
REVOKE manager FROM user1;
REVOKE INSERT ON emp FROM manager;
Pour annuler un role, il faut avoir le privilège GRANT ANY ROLE,
ou avoir les privilèges WITH ADMIN OPTION.

19
Roles prédéfinis

• Oracle a des rôles prédéfinis :


– CONNECT : INSERT, UPDATE, DELETE, SELECT sur les
relations dont on a les privilèges. Permet de créer des vues.
– RESOURCE : crée les tables, les vues, les triggers, les
procédures.
– DBA : tous les privilèges système avec ADMIN OPTION
– EXP_FULL_DATABASE : tous les privilèges pour
exporter les données de la base
– IMP_FULL_DATABASE : tous les privilèges pour
importer des données.

20
Profils
• Chaque utilisateur a un profil qui spécifie les ressources
auxquelles il a droit.
• Permet de réguler la charge, quand il y a beaucoup
d’utilisateurs.
• Plusieurs types de ressources
– Ressources système (nombre des sessions concurrentes,
temps CPU, temps de connexion, …)
– Restrictions concernant le mot de passe
• Blocage après un nombre d’essais sans succès
• Délai d’expiration du mot de passe
• Réutilisation du mot de passe

CREATE PROFILE profil LIMIT <resource parameters>


|<password parameters>;

21
Ressources système (1)
• SESSIONS_PER_USER
– Une session créée à chaque connexion
– Consomme du temps CPU, et de la mémoire
• CPU_PER_SESSION
– Limite le temps CPU par session (en centièmes de
secondes)
– Permet d’éviter de trop grandes consommations, qui
pénalisent les autres utilisateurs
• CPU_PER_CALL
– Limite le temps CPU par appel

22
Ressources système (2)
• CONNECT_TIME
– Limite le temps de connection d’un utilisateur
• IDLE_TIME
– Limite le temps d’inactivité
• LOGICAL_READS_PER_SESSION
– L’accès disque est une des opérations les plus coûteuses
– Limite le nombre d’accès disque autorisés pour une session
• LOGICAL_READS_PER_CALL
– Limite le nombre d’accès disque autorisés pour une
instruction

23
Ressources système (3)
• PRIVATE_SGA (system global area),
– Limite la taille de l’espace système privé
– exprimée en bits.

• COMPOSITE_LIMIT
– Permet de définir une limite globale d’un ensemble de
ressources pour une session. Le coût total d’une session est
calculé en faisant une moyenne pondérée des paramètres
suivants : CPU_PER_SESSION, CONNECT_TIME,
PRIVATE_SGA, LOGICAL_READS_PER_SESSION

24
Ressources ‘Password’
• FAILED_LOGIN_ATTEMPTS
– Limite le nombre d’essais infructueux
• PASSWORD_LIFE_TIME
– Limite la durée d’expiration du mot de passe (en nb de jours)
• PASSWORD_REUSE_TIME
– Limite le nombre de jour avant que le mot de passe puisse être réutilisé
• PASSWORD_REUSE_MAX
– Limite le nombre de changements de mots de passe avant de pouvoir
réutiliser celui-ci.

Réutilisation du mot de passe :


Si PASSWORD_REUSE_TIME est 30 et PASSWORD_REUSE_MAX est
10, l’utilisateur peut réutiliser son mot de passe au bout de 30 jours, s’il a
été changé 10 fois.
Si on spécifie UNLIMITED pour un des deux paramètres, l’utilisateur ne peut
jamais réutiliser un mot de passe.
25
Exemples
CREATE PROFILE app_user LIMIT
SESSIONS_PER_USER UNLIMITED
CPU_PER_SESSION UNLIMITED
CPU_PER_CALL 3000
CONNECT_TIME 45
LOGICAL_READS_PER_SESSION DEFAULT
LOGICAL_READS_PER_CALL 1000
PRIVATE_SGA 15K
COMPOSITE_LIMIT 5000000;

CREATE PROFILE new_profile


LIMIT PASSWORD_REUSE_MAX 10
PASSWORD_REUSE_TIME 30;

26
Dépassement des limites

Dépassement de CONNECT_TIME ou IDLE_TIME :


- la transaction est défaite
- la session est terminée
- le système renvoie une erreur en cas de nouvelle instruction
Dépassement des autres limites :
- l’opération est annulée
- l’instruction en cours est défaite,
- le système renvoie une erreur.
- l’utilisateur peut valider ou annuler la transaction en cours, et
doit terminer la session.

27
Surveillance (Audit)

• Prévoir les ressources nécessaires pour des actions


particulières
• Détecter des activités anormales (ex: suppression de données,
d’objets du schéma par des utilisateurs non autorisés)
• Collecter des informations (statistiques) sur les différentes
activités (fréquence des modifications de chaque table, nombre
d’accès disque, nombre de sessions concurrentes, nombre
d’exécutions réussies, nombre d’échecs, activités d’un
utilisateur précis, etc.).
• Permet d’ajuster les paramètres pour améliorer les
performances (tuning).

28
Vues

• Trois visions d’une BD :


– Vues (BD virtuelle)
– Relations (niveau conceptuel)
– Pages physiques (stockage des données)
• Pourquoi utiliser des vues ?
– Pour faciliter certaines requêtes (ou les exprimer plus
simplement)
– Pour la modularité (niveau d’abstraction plus élevé)
– Pour protéger des données

29
Vues
• Une vue est une relation virtuelle, qui contient le résultat d’une
requête Q sur la base.
• Syntaxe :
CREATE VIEW nom_vue [(att1, att2...)]
AS requête_SQL [ WITH CHECK OPTION ]

– nom_vue désigne le nom de la relation virtuelle


– att1, ... (optionnel) permet de nommer les attributs de la
vue (attributs de la requête par défaut)
– requête_SQL désigne une requête SQL standard qui définit
le contenu de la vue (définition de la vue)
– WITH CHECK OPTION : protège des mises à jour
intempestives
30
Exemple
ENS(ID_ENS,NOM,GRADE,DOMAINE,SALAIRE,ADRESSE,TEL)
COURS(ID_COURS,TITRE,NIVEAU,ID_ENS)

CREATE VIEW ProfsdeL3 (ID, NOM) AS


SELECT ID_ENS,NOM FROM ENS E,COURS C
WHERE E.GRADE = ‘Professeur’
AND E.ID_ENS=C.ID_ENS
AND NIVEAU=‘L3’

31
Confidentialité et vues

• Les vues permettent de cacher de l’information à des


utilisateurs non autorisés. On peut cacher des
attributs, ou/et des nuplets.
Ex1 : Cacher le salaire, l’adresse, le téléphone des enseignants
CREATE VIEW Enseignants AS
SELECT ID_ENS,NOM,GRADE,DOMAINE FROM ENS

Ex2 : Enseignants informaticiens


CREATE VIEW EnseignantsInformaticiens AS
SELECT ID_ENS,NOM,GRADE FROM ENS E
WHERE E.DOMAINE = ‘Informatique’

32
Conclusion

• La protection des données de la base est un enjeu


important.
• Plusieurs moyens
– Filtrer les connexions
– Donner des droits spécifiques aux utilisateurs
– Surveiller l’utilisation des données
– Cacher des informations à l’aide de vues
– Cryptage des données

33

Vous aimerez peut-être aussi