Afin d'augmenter la sécurité de la base de données il peut être très interessant de mettre en place une gestion
des mots de passe comme le nombre maximal de tentatives de connexion à la base, le temps de vérouillage d'une 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.
1. 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 a 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 mots de passe
Les limitations des ressources système
1.1. Les limitations
1.1.1. Les limitations du mots de passe
Les limitations liées au mot de passe vous offrent un certains 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 connexion donné par le paramètre
FAILED_LOGIN_ATTEMPTS est atteint le compte sera alors vérouillé 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.
Si vous donner une valeur numérique au paramètre PASSWORD_REUSE_TIME vous devrez alors donner la valeur UNLIMITED
au paramètre PASSWORD_REUSE_MAX .
PASSWORD_REUSE_MAX
Ce paramètre permet de définir le nombre de réutilisation du même mot de passe (consécutive ou non).
Si vous donner une valeur numérique au paramètre PASSWORD_REUSE_MAX vous devrez alors donner la valeur UNLIMITED
au paramètre PASSWORD_REUSE_TIME.
PASSWORD_LOCK_TIME
Ce paramètre permettra de définir la durée de vérouillage du compte utilisateur après avoir
bloqué le compte avec le paramètre FAILED_LOGIN_ATTEMPTS. Le compte sera alors automatiquement dévérouillé 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 vérouillage définitif et donc une action d'un adminstrateur pour débloquer le compte)
PASSWORD_GRACE_TIME
Ce paramètre permet de définir en jours le temps de grace 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 3 demandes.
L'intêret de ce paramètre est d'ajouter une période de grace pendant laquelle l'utilisateur sera en mesure de ne pas changer son mot de passe.
Cela reviens à donner un délai supplémentaire à l'utilisateur pour changer son mot de passe.
PASSWORD_VERIFY_FUNCTION
Ce paramètre devra contenir le nom d'une fonction PL/SQL qui servira à vérifier les mots de passe saisi.
Vous pouvez utiliser celle fournie par Oracle (script utlpwdmg.sql). La fonction fournie en argument devra avoir cette définition :
<nom de la fonction> (username varchar2, password varchar2, old_password varchar2) RETURN boolean
Si vous ne souhaitez pas utiliser de fonction de vérification utiliser la valeur NULL.
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 2 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.
1.1.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émentaire
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 session 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 appelera "appel serveur" un parssage de requête, une execution de requête ou la recupé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. A 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. A 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 bloc 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 bloc 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ée pour une session.
Oracle calcule le coût total de toute les ressources à partir du poids attribué aux paramètres CPU_PER_SESSION, CONNECT_TIME, LOGICAL_READS_PER_SESSION, et PRIVATE_SGA.
Vous pourrez changer le poids associé à chaque limitations système avec la commande ALTER RESOURCE COST.
PRIVATE_SGA
Ce paramètre va vous permettre de définir la taille en Kbytes ou MBytes que pourra utiliser une session.
1.2. Mise en place d'un profil
La méthode pour mettre en place est très simple :
Etablir 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 :
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;
1.3. 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é (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.
2. Modification d'un profil
2.1. 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 seule 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.
2.2. 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 tentative 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 à 1 jour.
2.3. 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 nouveau mots clé (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.
3. Suppression d'un profil
3.1. Comment ça marche
Pour supprimer un profil vous devez disposer du privilège DROP PROFILE. Il existe 2 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 à tout 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.
3.2. Syntaxe complète de l'ordre DROP PROFILE
Voici la syntaxe complète d'un ordre DROP PROFILE :
Voici l'explication des quelques nouveau mots clé
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.
Le guide Oracle par Orafrance, Helyos et SheikYerbouti
Responsable bénévole de la rubrique Oracle : Vincent Rogier - Contacter par EMail :