Conception Et Réalisation (Oracle) by Grare Stéphane - HTML preview

PLEASE NOTE: This is an HTML preview only and some elements such as links or page numbers may be incorrect.
Download the book in PDF, ePub, Kindle for a complete version.

Utiliser les 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...

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

index-101_1.jpg

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

index-103_1.png

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