FAQ OracleConsultez toutes les FAQ

Nombre d'auteurs : 15, nombre de questions : 137, dernière mise à jour : 26 octobre 2006  Ajouter une question

 

Cette F.A.Q. a été réalisée à partir des questions fréquemment posées sur le forum Oracle de www.developpez.com et de l'expérience personnelle des auteurs. Elle pourra traiter de tout type de questions portant sur les technologies Oracle.

Nous espérons que cette F.A.Q. saura répondre à un maximum de vos questions. Nous vous souhaitons une bonne lecture.

L'équipe Oracle de Developpez.


SommaireAdministrationLes Utilisateurs (4)
précédent sommaire suivant
 

La requête suivante permet de lister les utilisateurs avec les propriétés suivantes :

  • ID
  • Tablespace par défaut
  • Tablespace temporaire
  • Mot de passe (crypté)
  • État
  • Profil
  • Date de création

Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT USERNAME, 
       USER_ID, 
       DEFAULT_TABLESPACE, 
       TEMPORARY_TABLESPACE, 
       PASSWORD, 
       ACCOUNT_STATUS, 
       PROFILE, 
       CREATED 
FROM DBA_USERS 
ORDER BY USERNAME; 
  
USERNAME   USER DEFAULT TEMPORARY PASSWORD         ACCOUNT_STATUS   PROFILE CREATED 
---------- ---- ------- --------- ---------------- ---------------- ------- ---------- 
ANONYMOUS    38 SYSAUX  TEMP      anonymous        EXPIRED & LOCKED DEFAULT 2006-04-18 
CTXSYS       35 SYSAUX  TEMP      24ABAB8B06281B4C EXPIRED & LOCKED DEFAULT 2006-04-18 
DBSNMP       24 SYSAUX  TEMP      E066D214D5421CCC OPEN             DEFAULT 2006-04-18 
DIP          19 USERS   TEMP      CE4A36B8E06CA59C EXPIRED & LOCKED DEFAULT 2006-04-18 
EXFSYS       34 SYSAUX  TEMP      66F4EF5650C20355 EXPIRED & LOCKED DEFAULT 2006-04-18

Mis à jour le 18 septembre 2006 laurentschneider

L'objectif est de créer un utilisateur identifié par le système d'exploitation pour éviter la saisie des mots de passe "en dur" dans les batchs. La difficulté réside dans l'attribution des droits à donner à cette utilisateur.

Le script suivant permet de créer l'utilisateur de type OPS$ (cf. Création d'un utilisateur authentifié par le système d'exploitation ).

Le script Migrate2OPS$.sql génère quatre scripts SQL qui seront lancés automatiquement si vous le souhaitez. C'est un script interactif qui demande de saisir le nom de l'utilisateur à créer et le nom de l'utilisateur source (i.e. l'utilisateur de référence).

Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
SET verify ON  
SET feedback ON  
SET termout ON  
SET linesize 200  
ACCEPT to_user PROMPT 'Saisir le user cible (OPS$) : '  
ACCEPT from_user PROMPT 'Saisir le user source : '  
DEFINE filename = &to_user._&from_user  
SET verify off  
SET feedback off  
SET pagesize 0  
  
COL dbname NOPRINT NEW_VALUE dbname  
SELECT HOST_NAME||'-'||INSTANCE_NAME||'.UX' DBNAME FROM v$instance;  
  
SET termout ON  
SELECT 'Creating user build script...' FROM dual;  
SET termout off  
spool c:\alter_user_&filename..sql  
SELECT 'CREATE USER &to_user IDENTIFIED EXTERNALLY PROFILE ' || profile ||  
       ' DEFAULT TABLESPACE '|| default_tablespace ||  
       ' TEMPORARY TABLESPACE ' || temporary_tablespace  
  FROM sys.dba_users  
 WHERE username = UPPER('&from_user')  
     AND NOT EXISTS (SELECT 1 FROM dba_users WHERE username = UPPER('&to_user'))  
/  
  
SELECT    'ALTER USER &to_user QUOTA '  
       || DECODE (max_bytes, -1, 'Unlimited', max_bytes)  
       || ' ON '  
       || tablespace_name  
       || ';'  
  FROM sys.dba_ts_quotas  
 WHERE username = UPPER('&from_user')  
/  
spool off  
  
SET termout ON  
SELECT 'Creating grant build script...' FROM dual;  
SET termout off  
spool c:\grant_prvs_&filename..sql  
SELECT 'GRANT ' || privilege || ' TO &to_user' || admin_option  
  FROM (  
   SELECT LOWER(grantee) grantee, LOWER(granted_role) privilege,  
          DECODE(admin_option,'YES',' WITH ADMIN OPTION;',';') admin_option  
     FROM sys.dba_role_privs  
     WHERE grantee != 'SYS'  
   union  
   SELECT LOWER(grantee) grantee, LOWER(granted_role) privilege,  
          DECODE(admin_option,'YES',' WITH ADMIN OPTION;',';') admin_option  
     FROM sys.dba_role_privs  
     WHERE grantee != 'SYS'  
   union  
   SELECT LOWER(grantee) grantee, LOWER(privilege) privilege,  
          DECODE(admin_option,'YES',' WITH ADMIN OPTION;',';') admin_option  
     FROM dba_sys_privs s  
     WHERE grantee != 'SYS'  
   union  
   SELECT LOWER(grantee) grantee, LOWER(privilege) || ' ON ' ||  
         LOWER(table_name) privilege, DECODE(grantable,'YES',  
                                             ' WITH ADMIN OPTION;',';') admin_option  
     FROM dba_tab_privs t  
     WHERE grantee != 'SYS'  
       AND t.privilege !='EXECUTE'  
   union  
   SELECT LOWER(grantee) grantee, LOWER(privilege) || ' ON ' ||  
         LOWER(table_name) privilege, DECODE(grantable,'YES',  
                                               ' WITH ADMIN OPTION;',';') admin_option  
     FROM dba_tab_privs t  
     WHERE grantee != 'SYS'  
       AND t.privilege ='EXECUTE'  
   union  
   SELECT LOWER(owner) grantee, 'ALL ON ' || LOWER(owner) ||'.'||  
         LOWER(table_name) privilege, ';' admin_option  
     FROM all_tables  
    WHERE owner = upper('&from_user')  
   ORDER BY 1  
       )  
  WHERE grantee = LOWER('&from_user');  
spool off  
  
  
SET termout ON  
SELECT 'Creating synonym build script...' FROM dual;  
SET termout off  
spool c:\create_synonyms_&filename..sql  
  
SELECT DISTINCT 'CREATE SYNONYM '|| LOWER('&to_user') || '.' || LOWER(object_name) ||  
       ' FOR ' || LOWER('&from_user') || '.' || LOWER(object_name) || ';'  
  FROM sys.dba_objects  
 WHERE owner = UPPER('&from_user')  
   AND object_type IN ('CLUSTER','FUNCTION','LIBRARY','MATERIALIZED VIEW','PACKAGE','PACKAGE BODY', 
                       'PROCEDURE','SEQUENCE','TABLE','TABLE PARTITION','TYPE','TYPE BODY','VIEW')  
 ORDER BY 1  
/  
spool off  
  
SET termout ON  
SELECT 'Creating database link build script...' FROM dual;  
SET termout off  
spool c:\create_dblinks_&filename..sql  
  
SELECT 'ALTER USER &to_user IDENTIFIED BY dummypwd;' FROM dual;  
  
SELECT 'CONNECT &to_user/dummypwd@&dbname' FROM dual;  
  
SELECT  'CREATE DATABASE LINK ' || l.name ||  
   ' CONNECT TO ' || LOWER(l.userid) || ' IDENTIFIED BY ' || LOWER(l.password) ||  
   DECODE(l.host,NULL, NULL, ' USING '''||l.host) || ''';'  
  FROM     sys.link$ l, sys.user$ u  
 WHERE    l.owner# = u.user#  
   AND    u.name = UPPER('&from_user')  
 ORDER BY l.name  
/  
  
SELECT 'ALTER USER &to_user IDENTIFIED EXTERNALLY;' FROM dual;  
  
spool off  
  
SET termout ON  
  
PROMPT  
PROMPT Tapez [Ctrl+C] pour interrompre le process ou [Enter] pour continuer après avoir vérifier les scripts générés...  
PAUSE  
  
spool c:\copy_user_&filename..sql  
  
SELECT 'set feed on' FROM dual;  
  
SELECT 'spool c:\alter_user_&filename..log' FROM dual;  
SELECT '@alter_user_&filename..sql' FROM dual;  
SELECT 'spool off' FROM dual;  
  
SELECT 'spool c:\grant_prvs_&filename..log' FROM dual;  
SELECT '@grant_prvs_&filename..sql' FROM dual;  
SELECT 'spool off' FROM dual;  
  
SELECT 'spool c:\create_synonyms_&filename..log' FROM dual;  
SELECT '@create_synonyms_&filename..sql' FROM dual;  
SELECT 'spool off' FROM dual;  
  
SELECT 'spool c:\create_dblinks_&filename..log' FROM dual;  
SELECT '@create_dblinks_&filename..sql' FROM dual;  
SELECT 'spool off' FROM dual;  
  
spool off

Mis à jour le 30 novembre 2004 orafrance

Par défaut, les mots de passe des utilisateurs sont stockés dans la base Oracle, sous forme cryptée. On peut cependant souhaiter que le compte Oracle d'un utilisateur soit synchronisé avec son compte Windows.
Ceci procure deux avantages :

  • éviter de devoir gérer deux systèmes distincts de mots de passe, l'un dans la base Oracle, et l'autre dans un serveur de domaine.
  • permettre de se connecter à la base de données sans fournir de mot de passe, puisqu'il a déjà été validé par l'OS. C'est un premier pas vers l'authentification unique, connue sous le sigle SSO.

Nous décrivons ici le paramétrage nécessaire pour mettre en place cette authentification OS dans un environnement Windows.
Précisons qu'il ne suffit pas que le client soit sous Windows; le serveur Oracle doit l'être aussi.
Le principe est que chaque compte NT doit être mis en correspondance avec un compte Oracle. Le compte Oracle est identique au compte NT, sauf que le compte Oracle possède en plus un préfixe qui est identique pour tous les comptes authentifiés par l'OS. Par défaut, ce préfixe est OPS$. Ainsi, si le compte NT est TOTO, le compte Oracle correspondant doit être OPS$TOTO.

Le choix de l'authentification OS reste souple : il s'applique uniquement aux comptes choisis, si bien qu'on peut tout à fait gérer certains comptes de manière traditionnelle, avec le mot de passe dans la base, et gérer les autres grâce à l'authentification OS.

Voici la procédure :
1) Dans le SQLNET.ORA côté client et côté serveur, insérer :

Code sql :
SQLNET.AUTHENTICATION_SERVICES=(NTS)
2) Dans le fichier d'initialisation INITxxx.ORA, insérer :

Code sql :
REMOTE_OS_AUTHENT=TRUE
3) Dans l'INITxxx.ORA, noter la valeur du paramètre OS_AUTHENT_PREFIX (OPS$ par défaut), ou lui donner la valeur désirée. Le plus commode est "" (deux guillemets consécutifs, sans espace) ce qui correspond à une valeur nulle, et permet d'avoir des comptes NT et des comptes Oracle identiques.

Redémarrer l'instance si une modification a été faite au point 2 ou 3.

4) La clé de registre OSAUTH_PREFIX_DOMAIN, située côté serveur dans la branche HKLM\Software\Oracle\HomeN, permet de spécifier si l'authentification doit tenir compte ou non du nom de domaine NT.
Avec OSAUTH_PREFIX_DOMAIN à FALSE, seul le nom du compte est vérifié, indépendamment de son domaine NT. Cela signifie que 2 comptes Toto, situés dans des domaines différents, pourraient accéder à la base de données.
Avec OSAUTH_PREFIX_DOMAIN à TRUE, le domaine NT est également vérifié, ce qui améliore la sécurité.

5) Création du compte Oracle en majuscules et entre guillemets.
(Si OS_AUTHENT_PREFIX est nul, il suffit de supprimer la mention OPS$)
5.1) Dans le cas où OSAUTH_PREFIX_DOMAIN est à FALSE pour un compte NT nommé Stagiaire

Code sql :
1
2
3
  
CREATE USER "OPS$STAGIAIRE" IDENTIFIED EXTERNALLY;  
GRANT CREATE SESSION TO "OPS$STAGIAIRE";
OU 5.2) Dans le cas où OSAUTH_PREFIX_DOMAIN est à TRUE pour un compte NT nommé Stagiaire dans le domaine Paris

Code sql :
1
2
3
  
CREATE USER "OPS$PARIS\STAGIAIRE" IDENTIFIED EXTERNALLY;  
GRANT CREATE SESSION TO "OPS$PARIS\STAGIAIRE";
6) Connexion à SQL*Plus depuis l'OS :

Code sql :
sqlplusw /@labase
Il ne doit pas y avoir d'espace entre le / et le @. En effet, s'il y a un espace "labase" est considéré comme le nom d'un script à exécuter, et non comme un alias Oracle Net.

Ou si on est déjà dans SQL*Plus :

Code sql :
CONNECT /@labase

Mis à jour le 30 novembre 2004 Pomalaix

Via la commande CREATE USER, donc voici un exemple :

Code sql :
1
2
3
4
5
  
CREATE USER TEST           /* on le baptise */ 
IDENTIFIED BY mypassword   /* Attention, le password est en clair ! */ 
DEFAULT TABLESPACE TBSTEST /* Le tablespace associé */ 
TEMPORARY TABLESPACE TEMP; /* Le temporary associé */
Il est ensuite possible de lui assigner des droits via la commande GRANT :

Code sql :
GRANT CONNECT TO TEST;

Mis à jour le 15 octobre 2006 Xo

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2014 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
 
 
 
Partenaires

PlanetHoster
Ikoula