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