FAQ OracleConsultez toutes les FAQ
Nombre d'auteurs : 17, nombre de questions : 139, dernière mise à jour : 30 mai 2016 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.
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 : | Sélectionner tout |
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 |
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 : | Sélectionner tout |
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 |
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 : | Sélectionner tout |
SQLNET.AUTHENTICATION_SERVICES=(NTS)
Code sql : | Sélectionner tout |
REMOTE_OS_AUTHENT=TRUE
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 : | Sélectionner tout |
1 2 3 | CREATE USER "OPS$STAGIAIRE" IDENTIFIED EXTERNALLY; GRANT CREATE SESSION TO "OPS$STAGIAIRE"; |
Code sql : | Sélectionner tout |
1 2 3 | CREATE USER "OPS$PARIS\STAGIAIRE" IDENTIFIED EXTERNALLY; GRANT CREATE SESSION TO "OPS$PARIS\STAGIAIRE"; |
Code sql : | Sélectionner tout |
sqlplusw /@labase
Ou si on est déjà dans SQL*Plus :
Code sql : | Sélectionner tout |
CONNECT /@labase
Via la commande CREATE USER, donc voici un exemple :
Code sql : | Sélectionner tout |
1 2 3 4 | 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é */ |
Code sql : | Sélectionner tout |
GRANT CONNECT TO TEST;
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 çaLes 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 © 2024 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.