Sécurité et contrôles d`accès - Laboratoire d`Informatique de Paris 6

Transcription

Sécurité et contrôles d`accès - Laboratoire d`Informatique de Paris 6
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
SELECT
on Serv
**
Max
INSERT
On Serv
Max
SELECT
On Emp
**
**
Max
INSERT
on Emp
**
Lulu
SELECT
On Serv
*
Jules
SELECT
On Serv
*
Lulu
SELECT
On Emp
*
Lulu
INSERT
On Emp
Jules
SELECT
OnEmp
*
*
Jules
INSERT
On Emp
*
*: with grant option
** : propriétaire
Zoé
INSERT(NOM)
onEmp
Zoé
SELECT
onServ
Zoé
SELECT
On Emp
Zoé
INSERT
On Emp
13
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
SELECT
on Serv
**
Max
INSERT
On Serv
Max
SELECT
On Emp
**
**
Max
INSERT
on Emp
**
Lulu
SELECT
On Serv
*
Jules
SELECT
On Serv
*
Lulu
SELECT
On Emp
*
Lulu
INSERT
On Emp
Jules
SELECT
OnEmp
*
*
Jules
INSERT
On Emp
*
Zoé
INSERT(NOM)
onEmp
Zoé
SELECT
onServ
Zoé
SELECT
On Emp
REVOKE SELECT,INSERT ON emp FROM lulu;
Renvoie error
Zoé
INSERT
On Emp
16
Exemple
Max
SELECT
on Serv
**
Max
INSERT
On Serv
Max
SELECT
On Emp
**
**
Max
INSERT
on Emp
**
Lulu
SELECT
On Serv
*
Jules
SELECT
On Serv
*
Lulu
SELECT
On Emp
*
Lulu
INSERT
On Emp
Jules
SELECT
OnEmp
*
*
Jules
INSERT
On Emp
*
Zoé
INSERT(NOM)
onEmp
Zoé
SELECT
onServ
Zoé
SELECT
On Emp
REVOKE SELECT,INSERT ON emp FROM lulu CASCADE;
Zoé
INSERT
On Emp
17
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
CPU_PER_SESSION
CPU_PER_CALL
CONNECT_TIME
LOGICAL_READS_PER_SESSION
LOGICAL_READS_PER_CALL
PRIVATE_SGA
COMPOSITE_LIMIT
UNLIMITED
UNLIMITED
3000
45
DEFAULT
1000
15K
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