![Free-eBooks.net](/resources/img/logo-nfe.png)
![All New Design](/resources/img/allnew.png)
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...
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 propose une solution efficace
et pratique pour mettre en place ce type d'action : Les PROFILS.
L’ordre SQL CREATE PROFILE permet de créer un nouveau 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. Il existe deux types de limitation :
· Les limitations des mots de passe
· Les limitations des ressources système
Les limitations liées au mot de passe offrent un certain nombre d'options permettant
d'augmenter la sécurité des mots de passe. Voici la liste des différentes options disponibles :
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.
99
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 donnez 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éutilisations
du même mot de passe (consécutive ou non). Si vous donnez 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 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 tous 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érêt de ce
paramètre est d'ajouter une période de grâce pendant laquelle l'utilisateur sera en
mesure de ne pas changer son mot de passe. Cela revient à 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 saisis. 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.
Note :
· 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.
100
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.
Les limitations des ressources système permettent de mettre en place les limitations système.
Il faut 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.
Exemple :
CREATE PROFILE exploit LIMIT
SESSIONS_PER_USER 3
IDLE_TIME 60
101
FAILED_LOGIN_ATTEMPS 3
PASSWORD_LIFE_TIME 30
PASSWORD_REUSE_TIME 180
PASSWORD_LOCK_TIME UNLIMITED
PASSWORD_GRACE_TIME 3
PASSWORD_VERIFY_FONCTION vretif_fonc_exploit
Un profil peut être attribué à un utilisateur :
· Lors de la création de l’utilisateur (CREATE USER)
· Lors de la modification de l’utilisateur (ALTER USER)
L’affectation d’un nouveau profil à des utilisateurs ne prend effet qu’à leur prochaine
connexion. Par défaut, un utilisateur est créé avec le profil DEFAULT.
Trouver des informations sur les profils
Plusieurs vues du dictionnaire de données permettent d’obtenir des informations sur les
profils :
· DBA_USERS : Informations sur les utilisateurs, dont le profil attribué (colonne PROFILE)
· DBA_PROFILES : Informations sur les profils
Gérer les droits
Privilège système
Un privilège système est le droit d’exécuter un ordre SQL en général, par exemple créer une
table. Chaque ordre SQL a généralement au moins un privilège système associé qui porte le
même nom que l’ordre SQL. Par exemple, l’ordre SQL CREATE TABLE possède un privilège
associé CREATE TABLE (donne le droit de créer une table dans son propre schéma).
Certains privilèges système reprennent le nom de l’ordre SQL avec le mot clé ANY. Dans ce
cas, le privilège système permet d’exécuter l’ordre dans n’importe quel schéma de la base de
données. Par exemple, le privilège système CREATE ANY TABLE donne le droit de créer une
table dans n’importe quel schéma de la base de données.
Lorsqu'un utilisateur est créé avec l'instruction CREATE USER, il ne dispose encore d'aucun
droit, car aucun privilège ne lui a encore été assigné Il ne peut même pas se connecter à la
base !
Il faut donc lui assigner les privilèges nécessaires. Il doit pouvoir se connecter, créer des
tables, des vues, des séquences. Pour lui assigner ces privilèges de niveau système, il faut
utiliser l'instruction GRANT. L’ordre SQL GRANT permettant d’attribuer un privilège système.
GRANT { nom_privilege | role | ALL PRIVILEGES }
TO { nom_utilisateur | PUBLIC } [,…]
[ WITH ADMIN OPTION ] ;
nom_privilege représente un privilège système (liste en annexe 1)
role représente un rôle préalablement créé
ALL PRIVILEGES représente tous les privilèges système (à l'exception de
SELECT
ANY DICTIONARY)
La clause WITH ADMIN OPTION donne au bénéficiaire le droit de transmettre le privilège
système. Attention avec l'option ALL PRIVILEGES. Celle-ci accorde des droits quasi illimités
à l'utilisateur qui en hérite, avec les risques de sécurité que cela implique.
102
Pour que l'utilisateur puisse simplement se connecter à la base, il doit bénéficier du privilège
système CREATE SESSION.
Révocation d’un privilège système à un utilisateur : L’ordre SQL REVOKE permet de révoquer un
privilège système.
REVOKE nom_privilège [,…]
FROM { nom_utilisateur | PUBLIC } [,…] ;
Le privilège est immédiatement révoqué et ne peut plus être exercé.
Tous les privilèges système peuvent être révoqués d’un seul coup avec le
mot clé ALL
PRIVILEGES (REVOKE ALL PRIVILEGE FROM ….).
Privilège objet
Un privilège objet est le droit d’accéder à un objet d’un autre utilisateur : Par exemple, mettre
à jour les données de la base ARTICLE. Par défaut, seul le propriétaire d’un objet a le droit
d’y accéder. Pour qu’un autre utilisateur puisse accéder à l’objet, le propriétaire de l’objet doit
lui donner un privilège objet. Les principaux privilèges objet sont les suivants :
Avoir un droit sur un objet ne dispense pas de devoir qualifier l’objet par le nom du
propriétaire si l’on souhaite y accéder, sinon Oracle pense que vous cherchez à accéder à un
objet dans votre schéma.
Pour faciliter l’écriture des requêtes et rendre le schéma propriétaire plus transparent, il faut
utiliser des synonymes, en l’occurrence plutôt des synonymes publics. Réciproquement,
l’existence d’un synonyme, même public, ne donne aucun droit sur l’objet sous-jacent.
Les privilèges objet sont destinés à contrôler l’accès à des objets bien identifiés. Ils sont
principalement employés pour permettre aux utilisateurs finaux d’une application d’accéder,
directement via une interface utilisateur, aux objets de l’application créés dans un compte «
propriétaire » de l’application, car par défaut, seul le propriétaire d’un objet a le droit d’y
accéder.
Le message d’erreur retourné par Oracle, lorsqu’un utilisateur n’a pas le privilège requis pour
réaliser une action sur un objet, est déterminé différemment si l’utilisateur possède ou non au
moins un privilège sur l’objet :
· Si l’utilisateur n’a aucun privilège sur l’objet, Oracle retourne le message d’erreur suivant :
ORA-00942 : Table ou vue inexistante
103
· Si l’utilisateur a au moins un privilège sur l’objet, Oracle retourne le message d’erreur
suivant : ORA-10131 : privilèges insuffisants