420-PK6-SL Banques de données Avancées Gestion des UTILISATEURS (suite)
RÉCAPITULATIF Un UTILISATEUR ORACLE est donc une combinaison de deux concepts usuels des banques de données. Un objet de contrôle d'accès à Oracle Un lieu "contenant" pour un schéma. Le cours précédent nous avons vu comment créer un utilisateur. Le cours précédent nous avons vu comment créer un utilisateur. Pour ce faire, il faut : Se connecter à un compte possédant le privilège DBA Faire appel à la commande CREATE USER où : nous pouvons spécifier les Espacesde travail, temporaire3 et autres.
CRÉATION D'UN UTILISATEUR De base, l'énoncé CREATE USER permet de : nommer le nouvel utilisateur choisir le mode de connexion par mot de passe (requiert une authentification pour ouvrir une session). de façon externe (via la connexion du poste local) de façon globale (via la connexion réseau)
AUTRES PARAMÈTRES DE L'UTILISATEUR En plus de ces paramètres de base, Oracle nous permet de gérer les paramètres énumérés dans la figure ci-haut. Nous avons vu la gestion des espaces-tables.
AUTRES PARAMÈTRES DE L'UTILISATEUR Finalement on peux aussi définir les éléments suivants : Un Quota ou espace mémoire maximum pour l'usager. Un Profil pour l'usager. Des paramètres d'utilisation pour le mot-de-passe. Déterminer si le compte est verrouilléou non.
QUOTAS Afin de bien gérer les ressources du système, Oracle nous permet de fixer un Quota d'utilisation pour chaque utilisateur. La rétro-flèche nous montre que cette clause peux être appliquée plus d'une fois lors de la création d'un utilisateur. Il est donc possible d'appliquer un Quotaà plusieurs espaces tables pour un même utilisateur sauf pour l'espace table temporaire.
QUOTAS (suite) Exemples : QUOTA 100M ON monespacetable QUOTA 500K ON sonespacetable QUOTA UNLIMITED ON autreespacetable QUOTA UNLIMITED : N'appose aucune limite (sauf celles des ressources du système) pour l'espace table où il est appliqué.
PROFILS Afin d'augmenter la sécurité de la base de données il peut être très intéressant de mettre en place : une gestion des mots de passe un nombre maximal de tentatives de connexion à la base le temps de verrouillage d'une compte Il peut parfois aussi être intéressant de limiter les ressources système allouées à un utilisateur afin d'éviter une surcharge inutile du serveur. Oracle nous propose une solution efficace et pratique pour mettre en place ce type d'action : les PROFILS. Bien entendu, à défaut d'être DBA vous devrez avoir le privilège CREATE PROFILE afin de créer et gérer des profils.
PROFILS (suite) CREATE PROFILE nomduprofil LIMIT critère critère critère etc ; Les critères d'un profil se divisent en deux catégories : les critères de gestion des mots de passes les critères de gestion des ressources
PROFILS (mots de passes) FAILED_LOGIN_ATTEMPT Spécifie le nombre de tentatives de connexion échouées avant de verrouiller le système. PASSWORD_LOCK_TIME Spécifie le nombre de jours où l'utilisateur sera verrouillé après un dépassement de tentatives de connexion. PASSWORD_LIFE_TIME Détermine le nombre de jours de vie du mot de passe. PASSWORD_GRACE_TIME Ajoute un délai de gracepour permettre à l'utilisateur de changer son mot de passe (défaut = 180 jours).
PROFILS (mots de passes) PASSWORD_REUSE_TIME Nombre de jours minimum avant qu'un mot de passe puisse être réutilisé. PASSWORD_REUSE_MAX Nombre de changements de mot de passe avant qu'un mot de passe puisse être réutilisé. Ces deux derniers paramètres doivent êtres utilisés ensemble. Si l'un de ces paramètres (peu importe lequel) est fixé à UNLIMITED alors les mots de passes ne pourront jamais êtres réutilisés.
PASSWORD_VERIFY_FUNCTION Ce paramètre permet de passer un script PL/SQL au profil. PROFILS (mots de passes) CREATE PROFILE app_user2 LIMIT FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LIFE_TIME 60 PASSWORD_REUSE_TIME 60 PASSWORD_REUSE_MAX 5 PASSWORD_VERIFY_FUNCTION mafonctiontest PASSWORD_LOCK_TIME 1/24 -- une heure PASSWORD_GRACE_TIME 10;
PROFILS (ressources) SESSION_PER_USER Détermine le nombre de connexion consécutives peuvent êtres accomplies pour un même utilisateur. CPU_PER_SESSION Détermine le temps d'utilisation du processeur pour une session avant qu'il ne passe à une autre tâche. Exprimé en 1/100 de secondes. CPU_PER_CALL Détermine le temps d'utilisation du processeur pour un appel avant qu'il ne passe à une autre tâche. Exprimé en 1/100 de secondes.
PROFILS (ressources) CONNECT_TIME Temps maximum de connexion pour une session. Exprimé en minutes. IDLE_TIME Temps maximum d'inactivité alloué à une session. Les grandes requêtes ne sont pas affectées par ça. LOGICAL_READS_PER_SESSION Nombre maximum de lecture de blocs de donnéestant en mémoire qu'au disque pour une session. LOGICAL_READS_PER_CALL Nombre maximum de lecture de blocs de donnéestant en mémoire qu'au disque pour un appel.
PROFILS (ressources) PRIVATE_SGA Spécifie la quantité d'espace privé qu'une session peux allouer au poold'espace commun global du système. System Global Area (SGA) Il s'agit d'un espace mémoire utilisé par Oracle pour gérer la plupart de ses objets. Une instance de notre banque, par exemple, est considéré comme un objet qu'oracle logera dans le SGA. Voir http://www.dba-oracle.com/concepts/sga_system_global_area.htm pour plus de détails sur le SGA.
CONTRÔLE D'ACCÈS & VERROUILLAGE Les paramètres de gestion de mots de passes peuvent être définis à même la commande CREATEUSER mais comme ils sont couverts par les profils, nous aurions recours à les gérer ici seulement s'il s'agit d'un petit nombre de ces paramètres comme pour forcer le changement de mot de passe : CREATE USER moi IDENTIFIED BY Secret PASSWORD EXPIRES: Par défaut, un utilisateurn'a pas le privilège de CONNEXION à sa création. Celui-ci peux lui être accordé par la commande : GRANT CONNECT TO nomutilisateur; Cependant, la commande CREATE USER nous fournis un niveau supplémentaire de contrôle d'accès en permettant de verrouiller le compte à sa création en ajoutant ACCOUNT LOCK à l'instruction de création. ALTER USER nomutilisateur ACCOUNT UNLOCK; Déverrouillera l'utilisateur.
PRIVILÈGES et RÔLES Une fois l'utilisateur créé, il faut lui attribuer des privilèges. A la création, le privilège lui permettant de se connecter ne lui est pas attribué. Il faudra donc le faire par l'attribution du rôle CONNECT GRANT CONNECT TO nomutilisateur Les rôlessont des assemblage de privilèges permettant d'alléger la tâche consistant à attribuer une série de privilèges à une suite d'utilisateurs. Oracle fournis les rôles suivants : Oracle fournis les rôles suivants : CONNECT ALTER SESSION, CREATE CLUSTER, CREATE DATABASE LINK, CREATE SEQUENCE, CREATE SESSION, CREATE SYNONYM, CREATE TABLE, CREATE VIEW RESOURCE CREATE CLUSTER, CREATE INDEXTYPE, CREATE OPERATOR, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER, CREATE TYPE DBA Tous les privilèges d'ordre administratifs.
PRIVILÈGES et RÔLES Oracle fournis aussi les rôles suivants (à titre d'information) : EXP_FULL_DATABASE Tous les privilèges nécessaire pour accomplir une sauvegarde SELECT ANY TABLE, BACKUP ANY TABLE, EXECUTE ANY PROCEDURE, EXECUTE ANY TYPE, ADMINISTER RESOURCE MANAGER, and INSERT, DELETE, and UPDATE on the tables SYS.INCVID, SYS.INCFIL, and SYS.INCEXP. IMP_FULL_DATABASE Tous les privilèges nécessaire pour accomplir une restauration Utilisez la vue DBA_SYS_PRIVS pour voir les privilèges et ajoutez-y les rôles : EXECUTE_CATALOG_ROLE et SELECT_CATALOG_ROLE.
PRIVILÈGES et RÔLES SELECT_CATALOG_ROLE EXECUTE_CATALOG_ROLE DELETE_CATALOG_ROLE Permettent les requêtes, l'exécution de PL/SQL et la suppression dans les tables "dictionnaires" d'oracle. Donnent aussi accès au rôle HS_ADMIN_ROLE. HS_ADMIN_ROLE Sert à protéger l'accès aux HS (services hétérogènes) Aux données dictionnaire (grant SELECT) Aux paquetages (grant EXECUTE)
PRIVILÈGES et RÔLES RECOVERY_CATALOG_OWNER Donne accès au catalogue de récupération et aux privilèges suivants : CREATE SESSION, ALTER SESSION, CREATE SYNONYM, CREATE VIEW, CREATE DATABASE LINK, CREATE TABLE, CREATE CLUSTER, CREATE SEQUENCE, CREATE TRIGGER, and CREATE PROCEDURE AQ_ADMINISTRATOR_ROLE Permet d'administrer les files (advanced queing) et aux privilèges suivants : ENQUEUE ANY QUEUE, // Enfiler n'importe quelle file DEQUEUE ANY QUEUE, // Supprimer n'importe quelle file MANAGE ANY QUEUE, // Gérer n'importe quelle file SELECT privileges on AQ tables EXECUTE privileges on AQ packages. http://docs.oracle.com/cd/b10500_01/appdev.920/a96587/qintro.htm
PRIVILÈGES et RÔLES AQ_USER_ROLE Option périmée et déconseillée par Oracle. Oracle suggère de créer vos propres Rôles pour mieux gérer la sécurité de vos installations. Fournis un privilège d'exécution sur les queues avancées DBMS SNMPAGENT Utilisé par : Enterprise Manager (gestionnaire d'entreprise) Intelligent Agent (Agent"intelligent") Fournis les privilèges suivants: ANALYSE ANY SELECT sur une variété de vues.
CRÉATION DE RÔLES La création de «rôles» s'effectue en deux étapes : On crée le rôle On lui ajoute / retire des privilèges avec la commande GRANT La commande CREATE ROLE est utilisée pour créer les rôles.
CRÉATION DE RÔLES La commande CREATE ROLE a la syntaxe suivante : CREATE ROLE sonnom; CREATE ROLE sonnom NOT IDENTIFIED; Crée une coquille de «rôle» sans aucun attributs. CREATE ROLE sonnom IDENTIFIED BY Secret; Crée une coquille de «rôle» protégé par mot de passe. CREATE ROLE sonnom IDENTIFIED EXTERNALLY; CREATE ROLE sonnom IDENTIFIED GLOBALLY; Crée une coquille de «rôle» accessible par la sécurité du poste local ou du réseau (comme pour les «utilisateurs»).
CRÉATION DE RÔLES La commande CREATE ROLE a la syntaxe suivante (suite) : CREATE ROLE sonnom USING SCHEMA schema, package; CREATE ROLE sonnom USING package; Ces commandes créent un rôle associé à une application défini par un certain «package» La commande SET ROLE active ou désactive un ROLE pour une La commande SET ROLE active ou désactive un ROLE pour une session. SET ROLE ALL [EXCEPT role1, role2.rolen]; Active tous les rôles pour la présente session. SET ROLE unrole[ IDENTIFIED BY Secret ]; Active le rôles «unrole» pour la présente session. SET ROLE NONE; Désactive tous les rôles pour la présente session.
CRÉATION DE RÔLES Une fois le rôle créé, on lui associe des privièges. CREATE ROLE unrole; GRANT CREATE SESSION TO unrole; Cet énoncé ajoute le privilège de se connecter au rôle unrole. GRANT CREATE, UPDATE, SELECT on objet to unrole; Ce dernier énoncé ajoute les privilèges de CREATE, UPDATE et SELECT pour une table en particulier au rôle. Puis finalement, une fois que les rôles sont créés, on peux les attribuer à des usagers avec la commande GRANT. GRANT unrole TO Joe; GRANT unrole TO Alex; GRANT unrole TO Phil;
ATTRIBUTION / RÉVOCATION DE PRIVILÈGES Les privilèges et rôles s'attribuent par la commande GRANT. Plusieurs privilèges SYSTEM ont besoin de l'option ADMIN en plus d'être DBA pour êtres manipulés. Ainsi, la commande : GRAND SYSDBA TO monusager WITH ADMIN OPTION; donnera tout les droits à monusager. Utiliser avec prudence. De même que GRANT ALL PRIVILEGES TO monusager; donne accès à tout pour un utilisateur donné.
ATTRIBUTION / RÉVOCATION DE PRIVILÈGES Il existe deux types de privilèges sous Oracle : Les privilèges et les rôles SYSTEM Les privilèges SYSTEM peuvent se diviser en plusieurs catégories. Nous élaboreront ici sur certains de ces groupes seulement, les plus pertinents pour l'usage intermédiaire. Les privilèges OBJETS Les privilèges OBJETS Attribués aux utilisateurs, ils leurs donnent les privilèges d'agir sur certains objets de la banque.
PRIVILÈGES SYSTEM Ces catégories sont : CLUSTERS CONTEXTS DATABASE DATABASE LINK DEBUGGING DIMENSION DIRECTORIES INDEX TYPES INDEXES LIBRAIRIES MATERIALIZED VIEWS OPERATORS OUTLINES PROCEDURES PROFILES ROLES ROLLBACK SEGMENTS SEQUENCES SESSIONS SNAPSHOTS SYNONYMS TABLES TABLESPACE TRIGGERS TYPES USERS VIEWS MISCELLANEOUS
PRIVILÈGES OBJETS
EXEMPLES GRANT CREATE SESSION TO hr; Permet à l'utilisateur hr d'ouvrir(créer) une session. GRANT CREATE ANY MATERIALIZED VIEW, ALTER ANY MATERIALIZED VIEW, DROP ANY MATERIALIZED VIEW, QUERY REWRITE, GLOBAL QUERY REWRITE TO dw_manager WITH ADMIN OPTION; Alloue tous les privilèges nécessaire à dw_managerafin qu'il puisse gérer les "Entrepôts de données (data warehouse)". Concept utilisé dans les systèmes d'aide à la décision.
RÉVOCATION (Exemples) La commande inverse de GRANT est REVOKE. Elle permet de retirer (révoquer) un privilège. Exemples : REVOKE SELECT ON hr.employees FROM clark; Retire la possibilité pour l'utilisateur clarkd'effectuer des SELECT sur la table employees de l'utilisateur hr. REVOKE REFERENCES ON dept FROM clark CASCADE CONSTRAINTS; Retire la possibilité de référencer des éléments (clés étrangères). Cependant, s'il existe déjà des clés étrangères pour cet utilisateur, l'option CASCADE CONSTRAINTS devra être utilisé pour ne pas créer de violation de contraintes.
PRIVILÈGES SUR OBJETS L'allocation de privilèges (et de rôles) peux s'attribuer à des usagers mais aussi à des objets de schéma pour un utilisateur. Ainsi : GRANT SELECT, INSERT, UPDATE ON matable TO Joe; Donnera les permissions d'effectuer des SELECT, INSERT et des UPDATE pour une table précise même si cet utilisateur n'a pas ces privilèges comme tel. On pourrait aussi limiter les droits d'un utilisateur pour une table en particulier tel : GRANT ALL TO Joe; REVOKE SELECT, INSERT, UPDATE ON Salaires TO Joe; Ainsi, l'utilisateur «Joe» pourra opérer des GRANT SELECT, INSERT et des UPDATE sur toutes les tables de son schéma sauf la table «Salaires»
INFORMATION Afin d'interroger Oracle, voici quelques requêtes utiles: SELECT USERNAME AS "Nom", USER_ID AS "ID.", DEFAULT_TABLESPACE AS "Def. Tb.Space", TEMPORARY_TABLESPACE AS "Def. Temp.Space" FROM USER_USERS; Pour l'usager "CLASSE" Nom ID. Def. Tb.Space Def. Temp.Space ---------- ----- ------------------ ----------------------- CLASSE 39 USERS TEMP
INFORMATION SET LINES 200 COLUMN TABLE_NAME FORMAT A30 COLUMN DESC FORMAT A50 SPOOL C:/TEMP/nomFichier.txt SELECT * FROM dict; SPOOL OFF Liste le contenu de la table dictdans un fichier. dict contiens la liste des tables "dictionnaires" du schéma d'oracle.
INFORMATION Si je choisis une de ces tables et que j'effectue une requête : SQL> SELECT * FROM DBA_ROLE_PRIVS; GRANTEE GRANTED_ROLE ADM DEF ------------------------------------------------------------------ ------ ------ SYS XDBADMIN YES YES SYS IMP_FULL_DATABASE YES YES DBA SCHEDULER_ADMIN YES YES SYSTEM AQ_ADMINISTRATOR_ROLE YES YES TSMSYS RESOURCE NO YES SYS RECOVERY_CATALOG_OWNER YES YES SYS DELETE_CATALOG_ROLE YES YES DBA DELETE_CATALOG_ROLE YES YES DBA EXECUTE_CATALOG_ROLE YES YES XDBADMIN XDBWEBSERVICES NO YES HR RESOURCE NO YES
EXERCICES Créez un rôle «unrole» Associez les privilèges suivants à ce rôle : CONNECT Tous les privilèges agissant sur les données Aucun privilège agissant sur le schéma Associez ce rôle aux deux usagers créés la semaine passée.
RÉFÉRENCES Liste complète des privilèges et des rôles Oracle http://docs.oracle.com/cd/b10500_01/server.920/a96540/statements_912a.htm#sqlrf01603 Pour plus d'informations sur les rôles : http://www.dba-ora.fr/article-create-role-82706661.html