
FAQ OracleConsultez toutes les FAQ
Nombre d'auteurs : 16, nombre de questions : 138, dernière mise à jour : 16 février 2013
Sommaire→Administration→Sécurité- Comment empecher un utilisateur de se connecter avec un outil spécifique ?
- Comment empêcher un utilisateur d'effectuer certaines opérations sous Sql*Plus ?
- Comment autoriser/interdire une connexion Net*8 ?
- Comment interdire le changement de mot de passe à un utilisateur ?
- Je suis administrateur et pourtant j'ai une erreur de privilèges insuffisants ?
- Comment me connecter en tant que SYS, cela me retourne une erreur ?
- Comment sécuriser la gestion des mots de passe ?
Via un trigger de type AFTER LOGON :
L'exemple suivant concerne l'outil Toad :
create or replace trigger interdire_toad after logon on database
declare
v_sid sys.v_$session.sid%TYPE;
v_isdba sys.v_$session.username%TYPE;
v_program sys.v_$session.program%TYPE;
begin
execute immediate
'select distinct sid from sys.v_$mystat' into v_sid;
execute immediate
'select program from sys.v_$session where sid = :b1' into v_program using v_sid;
execute immediate
'select username from sys.v_$session where sid = :b1' into v_isdba using v_sid;
if upper(v_program) like 'TOAD%' and v_isdba = 'USERNAME'
then
RAISE_APPLICATION_ERROR
(-20001,'Connexion avec '||v_isdba||' sous TOAD interdite,contactez le DBA ',TRUE);
end if;
end;
/
Ce trigger a deux limitations qu'il est important de connaître :
- il n'a pas d'effet si l'utilisateur posséde le privilége ADMINISTER DATABASE TRIGGER.
- il n'a pas d'effet si on renomme l'utilitaire, le contrôle se faisant via une comparaison entre le champ v_program et le nom du programme.
Comment désactiver - activer la sécurité :
alter trigger interdire_toad disable ;
alter trigger interdire_toad enable ;
Il suffit d'effectuer une insertion dans la table product_user_profile :
INSERT INTO product_user_profile (product, userid, attribute, char_value)
VALUES ('SQL*Plus', 'SCOTT', 'CREATE', 'DISABLED');
COMMIT ;
Comment voir les interdictions :
set linesize 250
col CHAR_VALUE format a15
col ATTRIBUTE format a15
select product, userid, attribute, char_value from product_user_profile ;
Voici un exemple de mise en oeuvre, où l'attribut CREATE est désactivé pour l'utilisateur FORMATION :
SQL> conn system
Entrez le mot de passe : ********
Connecté.
SQL> INSERT INTO product_user_profile (product, userid, attribute, char_value) VALUES
2 ('SQL*Plus', 'FORMATION', 'CREATE', 'DISABLED');
1 ligne créée.
SQL> commit ;
Validation effectuée.
SQL> conn formation/formation
Connecté.
SQL> create table dvp ( a varchar2(10)) ;
SP2-0544: commande non valide : create
SQL> conn system
Entrez le mot de passe : ********
Connecté.
SQL> delete from product_user_profile where userid='FORMATION' ;
1 ligne supprimée.
SQL> commit ;
Validation effectuée.
SQL> conn formation/formation
Connecté.
SQL> create table dvp ( a varchar2(10)) ;
Table créée.
A placer dans le fichier Sqlnet.ora ( sur le serveur hébergeant le SGBDR ) Autoriser les personnes suivantes :
TCP.VALIDNODE_CHECKING=yes
TCP.INVITED_NODES=(xxx.x.x.xxx,xxx.x.x.xxx)
Interdire les personnes suivantes :
TCP.VALIDNODE_CHECKING=yes
TCP.EXCLUDED_NODES=(xxx.x.x.xxx,xxx.x.x.xxx)
Vous trouverez plus de détails dans cet article : Filtrage global au niveau du serveur
À l'aide de la fonction suivante :
REATE OR REPLACE FUNCTION restrict_pwd_change (username VARCHAR2,
password VARCHAR2,
old_password VARCHAR2)
RETURN boolean IS
BEGIN
raise_application_error(-20009, 'ERROR: Modification du mot de passe impossible');
END;
/
et de la commande suivante :
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION restrict_pwd_change;
Pour désactiver cette restriction, utilisez cette commande :
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION null;
Vérifiez que l'utilisateur avec lequel vous vous connectez à les droits nécessaires pour faire l'action que vous souhaitez
en vous aidant de ce tutoriel : http://oracle.developpez.com/guide/administration/adminrole/#L8
Par exemple, pour voir toutes les tables de la base, il vous faudra avoir le privilège SELECT ANY TABLE.
Depuis la 9i, il est impossible de se connecter avec l'utilisateur SYS si on ne précise pas AS SYSDBA ou AS SYSOPER
SQLPLUS /NOLOG
CONNECT SYS/pwd@db AS SYSDBA
Via la gestion de profils dédiés, qui peuvent gérer les paramètres suivants :
- FAILED_LOGIN_ATTEMPTS : Nombre d'erreurs permises à la saisie du mot de passe avant que le compte soit verrouillé,
- PASSWORD_GRACE_TIME : En cas de péremption d'un mot de passe dû à un délai fixé par l'administrateur, cette option permet de paramétrer une durée (en jours) pendant laquelle l'utilisateur pourra tout de même se connceter, mais recevra un avertissement,
- PASSWORD_LIFE_TIME : Durée (en jours) de vie maximum d'un mot de passe,
- PASSWORD_LOCK_TIME : Durée (en jours) pendant laquelle un compte sera verrouillé après qu'il ait atteint le nombre d'erreurs permises à la saisie de son mot de passe (FAILED_LOGIN_ATTEMPTS),
- PASSWORD_REUSE_MAX : Nombre de changement de mots de passe requis avant de pouvoir ré-utiliser un mot de passe déjà utilisé,
- PASSWORD_REUSE_TIME : Durée (en jours) minimum pendant laquellel'utilisateur ne peut pas ré-utiliser un mot de passe déjà utilisé, à partir du moment où celui-ci a été changé,
- PASSWORD_VERIFY_FUNCTION : permet de préciser une fonction (PL/SQL) vérifiant la compexité du mot de passe.
Voici un exemple de mise en application :
1. Créons un utilisateur TEST :
CREATE USER TEST
IDENTIFIED BY TEST
DEFAULT TABLESPACE TBSTEST;
2. Créons un profil :
SQL> CREATE PROFILE Profil_Test LIMIT PASSWORD_LIFE_TIME 60;
Profil créé.
SQL> ALTER PROFILE Profil_Test LIMIT FAILED_LOGIN_ATTEMPTS 2;
Profil modifié.
3. Attribuons ce profil à notre utilisateur :
SQL> ALTER USER TEST PROFILE Profil_Test;
Utilisateur modifié.
4. Vérifions que le paramètre FAILED_LOGIN_ATTEMPTS est bien actif :
SQL> connect test/test2@db
ERROR:
ORA-01017: invalid username/password; logon denied
Avertissement : vous n'êtes plus connecté à ORACLE.
SQL> connect test/test3@db
ERROR:
ORA-01017: invalid username/password; logon denied
SQL> connect test/test@db
ERROR:
ORA-28000: the account is locked
Il est possible de consulter les profils existants à l'aide de la requête suivante :
SQL> SELECT profile, resource_name, limit
2 FROM Dba_Profiles
3 WHERE resource_type = 'PASSWORD'
4 ORDER BY profile;
PROFILE RESOURCE_NAME LIMIT
--------------- ------------------------- ---------------
DEFAULT FAILED_LOGIN_ATTEMPTS UNLIMITED
DEFAULT PASSWORD_LIFE_TIME UNLIMITED
DEFAULT PASSWORD_REUSE_MAX UNLIMITED
DEFAULT PASSWORD_LOCK_TIME UNLIMITED
DEFAULT PASSWORD_GRACE_TIME UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION NULL
DEFAULT PASSWORD_REUSE_TIME UNLIMITED
PROFIL_TEST FAILED_LOGIN_ATTEMPTS 2
PROFIL_TEST PASSWORD_LIFE_TIME 60
PROFIL_TEST PASSWORD_REUSE_MAX DEFAULT
PROFIL_TEST PASSWORD_LOCK_TIME DEFAULT
PROFIL_TEST PASSWORD_GRACE_TIME DEFAULT
PROFIL_TEST PASSWORD_VERIFY_FUNCTION DEFAULT
PROFIL_TEST PASSWORD_REUSE_TIME DEFAULT
14 ligne(s) sélectionnée(s).
Lien : Gestion des ProfilsGestion des Profils
Lien : Sécurisation d'une base OracleSécurisation d'une base Oracle



