Gestion des 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 comme le nombre maximal de tentatives de connexion à la base, le temps de verrouillage d'un compte, etc.
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.
I. Création d'un profil▲
Un PROFIL est un ensemble de limitations système. Une fois qu'un PROFIL a été assigné à un utilisateur, celui-ci ne pourra plus dépasser les limitations imposées.
La première chose à vérifier et de savoir si vous disposez du privilège système CREATE PROFILE.
Si c'est le cas, il va falloir décider quelles limitations vous souhaitez mettre en place. Vous avez deux types de limitations :
- les limitations du mot de passe ;
- les limitations des ressources système.
I-A. Les limitations▲
I-A-1. Les limitations du mot de passe▲
Les limitations liées au mot de passe vous offrent un certain nombre d'options très intéressantes vous permettant d'augmenter la sécurité de vos mots de passe.
Voici la liste des différentes options disponibles :
Option |
Description |
---|---|
FAILED_LOGIN_ATTEMPTS |
Ce paramètre permet de définir le nombre maximal de tentatives de connexion. Si le nombre de connexions donné par le paramètre FAILED_LOGIN_ATTEMPTS est atteint le compte sera alors verrouillé pendant une période donnée par le paramètre PASSWORD_LOCK_TIME. |
PASSWORD_LIFE_TIME |
Ce paramètre permet de définir la durée d'utilisation du même mot de passe. Ce paramètre devra être défini en jours. Une fois la date limite d'utilisation, Oracle demandera alors automatiquement à l'utilisateur de bien vouloir changer son mot de passe. |
PASSWORD_REUSE_TIME |
Ce paramètre défini en nombre de jours permet de définir le délai entre deux utilisations du même mot de passe. Par exemple si celui-ci vaut 30 et que votre mot de passe actuel est toto. Il vous faudra attendre 30 jours à compter de la date de votre changement de mot de passe avant de pouvoir à nouveau utiliser toto comme mot de passe. |
PASSWORD_REUSE_MAX |
Ce paramètre permet de définir le nombre de réutilisations du même mot de passe (consécutive ou non). |
PASSWORD_LOCK_TIME |
Ce paramètre permettra de définir la durée de verrouillage du compte utilisateur après avoir bloqué le compte avec le paramètre FAILED_LOGIN_ATTEMPTS. Le compte sera alors automatiquement déverrouillé lorsque le temps défini par ce paramètre sera atteint. Ce paramètre sera défini en jours (vous pouvez aussi spécifier un nombre de minutes ou heure, par exemple 30 minutes donnera 30/1440) ou pourra avoir la valeur UNLIMITED (pour un verrouillage définitif et donc une action d'un administrateur pour débloquer le compte). |
PASSWORD_GRACE_TIME |
Ce paramètre permet de définir en jours le temps de grâce qui vous sera alloué pour changer votre mot de passe. Par exemple vous avez défini le paramètre PASSWORD_LIFE_TIME à 30 ce qui signifie que l'utilisateur devra changer son mot de passe tout les 30 jours. Cependant si celui-ci décide pour une raison ou une autre de ne pas changer son mot de passe à la fin de cette période Oracle bloquera son compte automatiquement au bout de trois demandes. |
PASSWORD_VERIFY_FUNCTION |
Ce paramètre devra contenir le nom d'une fonction PL/SQL qui servira à vérifier les mots de passe saisis. Vous pouvez utiliser celle fournie par Oracle (script utlpwdmg.sql). La fonction fournie en argument devra avoir cette définition : |
Attention
- Si le paramètre PASSWORD_REUSE_TIME a été initialisé avec une valeur numérique, alors le paramètre PASSWORD_REUSE_MAX devra être à UNLIMITED et inversement.
- Si les deux paramètres PASSWORD_REUSE_TIME et PASSWORD_REUSE_MAX possèdent la valeur UNLIMITED, alors Oracle n'utilisera aucune de ces deux limitations de mot de passe.
- Si le paramètre PASSWORD_REUSE_MAX possède la valeur DEFAULT et que le paramètre PASSWORD_REUSE_TIME est à UNLIMITED, alors Oracle utilisera le paramètre PASSWORD_REUSE_MAX avec la valeur définie dans le profil par défaut.
- Si le paramètre PASSWORD_REUSE_TIME est à DEFAULT et PASSWORD_REUSE_MAX est à UNLIMITED, alors Oracle utilisera le paramètre PASSWORD_REUSE_TIME avec la valeur définie dans le profil DEFAULT.
- Si les deux paramètres PASSWORD_REUSE_TIME et PASSWORD_REUSE_MAX sont à DEFAULT, alors Oracle utilisera les valeurs définies dans le profil DEFAULT.
La valeur DEFAULT est une valeur particulière, lorsque vous assignerez la valeur DEFAULT à une limitation alors Oracle ira récupérer la valeur de la limitation dans le profil DEFAULT.
I-A-2. Les limitations des ressources système▲
Afin de mettre en place les limitations système vous allez devoir mettre le paramètre RESOURCE_LIMIT à true, car Oracle va devoir générer des statistiques supplémentaires afin de pouvoir utiliser les valeurs des limitations.
Voici la liste des limitations que vous pourrez mettre en place.
Option |
Description |
---|---|
SESSIONS_PER_USER |
Ce paramètre va vous permettre de définir le nombre de sessions maximum qu'un utilisateur pourra ouvrir. |
CPU_PER_SESSION |
Ce paramètre va vous permettre de définir le temps de processeur maximum en centièmes de secondes qu'une session pourra utiliser. |
CPU_PER_CALL |
Ce paramètre va vous permettre de définir le temps de processeur maximum en centièmes de secondes qu'un « appel serveur » pourra utiliser. On appellera « appel serveur » un passage de requête, une exécution de requête ou la récupération d'une requête (FETCH). |
CONNECT_TIME |
Ce paramètre va vous permettre de définir le temps en minutes pour la durée de connexion maximale d'une session. À la fin du temps imparti, la session sera automatiquement déconnectée. |
IDLE_TIME |
Ce paramètre va vous permettre de définir le temps en minutes pour la durée d'inactivité maximale d'une session. À la fin du temps imparti, la session sera automatiquement déconnectée. |
LOGICAL_READS_PER_SESSION |
Ce paramètre va vous permettre de définir le nombre maximal de blocs lus durant une session. On parlera ici des blocs lus sur le disque et dans la mémoire. |
LOGICAL_READS_PER_CALL |
Ce paramètre va vous permettre de définir le nombre maximal de blocs lus durant un « appel serveur ». On parlera ici des blocs lus sur le disque et dans la mémoire. |
COMPOSITE LIMIT |
Ce paramètre va vous permettre de définir le coût total des limitations autorisées pour une session. |
PRIVATE_SGA |
Ce paramètre va vous permettre de définir la taille en Kbytes ou MBytes que pourra utiliser une session. |
I-B. Mise en place d'un profil▲
La méthode pour mettre en place est très simple :
- établir les limitations de mot de passe et les limitations système ;
- créer le profil ;
- attribuer le profil aux utilisateurs qui devront être limités.
La syntaxe de création d'un profil est très simple. Voici un exemple :
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
;
Il est tout à fait possible de combiner les deux types de limitations.
Par défaut un utilisateur se voit assigner le profil DEFAULT lors de sa création. Si vous souhaitez lui assigner un nouveau profil, cela sera possible soit lors de la création soit avec la commande ALTER USER (voir chapitre Gestion des utilisateurs)
ALTER
USER
scott PROFILE
app_user;
I-C. Syntaxe complète de l'ordre CREATE PROFILE▲
Voici la syntaxe complète d'un ordre CREATE PROFILE :
Voici la description de l'ensemble resource_parameters :
Voici la description de l'ensemble password_parameters :
Voici l'explication des quelques nouveaux mots clés (vous pourrez retrouver les explications sur les limitations dans les chapitres 1.1.1 et 1.1.2) :
profile : nom du futur profil ;
UNLIMITED : valeur infinie pour la limitation ;
DEFAULT : la valeur de la limitation sera alors issue du même paramètre dans le profil DEFAULT ;
Integer : valeur numérique pour la limitation.
II. Modification d'un profil▲
II-A. Comment ça marche▲
Avant de pouvoir modifier des limitations de ressources système, vous devez disposer du privilège système ALTER PROFILE et vous devrez disposer des privilèges ALTER PROFILE et ALTER USER pour modifier des limitations de mot de passe.
Ensuite il faut savoir que si vous modifiez une limitation les autres limitations en cours ne seront pas modifiées. Une fois la limitation modifiée seules les nouvelles sessions se verront assigner cette nouvelle limitation.
La syntaxe en elle-même est quasiment identique à la syntaxe de CREATE PROFILE.
Attention : Vous ne pouvez pas retirer une limitation du profil DEFAULT, vous pourrez juste la faire passer à la valeur UNLIMITED.
II-B. Modification d'un profil▲
Voici un exemple de modification d'un profil :
ALTER
PROFILE
app_user LIMIT
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LOCK_TIME 1
;
Dans cet exemple nous avons changé le nombre de tentatives de connexion ratées avant que le compte de l'utilisateur ne soit verrouillé. Nous avons aussi modifié la durée de blocage du compte qui passe maintenant à un jour.
II-C. Syntaxe complète de l'ordre ALTER PROFILE▲
Voici la syntaxe complète d'un ordre ALTER PROFILE :
Voici la description de l'ensemble resource_parameters :
Voici la description de l'ensemble password_parameters :
Voici l'explication des quelques nouveaux mots clés (vous pourrez retrouver les explications sur les limitations dans les chapitres 1.1.1 et 1.1.2) :
profile : nom du profil à modifier ;
UNLIMITED : valeur infinie pour la limitation ;
DEFAULT : la valeur de la limitation sera alors issue du même paramètre dans le profil DEFAULT ;
integer : valeur numérique pour la limitation.
III. Suppression d'un profil▲
III-A. Comment ça marche▲
Pour supprimer un profil vous devez disposer du privilège DROP PROFILE. Il existe deux cas de figure possibles. Le premier cas le plus simple consiste à supprimer un profil qui n'a été assigné à personne. Vous pourrez donc le supprimer sans action supplémentaire. Cependant si ce profil a été assigné à un utilisateur vous devrez alors utiliser l'option CASCADE qui demandera à Oracle de supprimer le profil et d'assigner le profil DEFAULT à tous les utilisateurs qui possédaient le profil qui vient d'être supprimé.
Par exemple :
DROP
PROFILE
app_user CASCADE
;
Ici tous les utilisateurs qui disposaient du profil app_user se verront automatiquement assigner le profil DEFAULT.
Attention : Vous ne pourrez pas supprimer le profil DEFAULT.
III-B. Syntaxe complète de l'ordre DROP PROFILE▲
Voici la syntaxe complète d'un ordre DROP PROFILE :
Voici l'explication des quelques nouveaux mots clés :
profile : nom du profil à supprimer ;
CASCADE : cette option vous permettra de supprimer le profil à tous les utilisateurs qui disposaient de ce profil et demandera au serveur de leur assigner le profil DEFAULT.