IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Administration > Les Utilisateurs
        Comment afficher la liste des utilisateurs ?
        Comment migrer vers un utilisateur identifié par le système d'exploitation ?
        Comment mettre en place l'authentification OS sous Windows ?
        Comment créer un utilisateur via un script SQL

rechercher
precedent    sommaire    suivant    telechargermiroir


Comment afficher la liste des utilisateurs ?
auteur : Laurent Schneider
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

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

Comment migrer vers un utilisateur identifié par le système d'exploitation ?
auteur : Fred_D
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'attibution des droits à donner à cette utilisateur.

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

Le script Migrate2OPS$.sql génére 4 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).

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

Comment mettre en place l'authentification OS sous Windows ?
auteur : Pomalaix
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 :

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

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

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

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

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 :

CONNECT /@labase

Comment créer un utilisateur via un script SQL
auteur : Xavier Vlieghe
Via la commande CREATE USER, donc voici un exemple :

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 :

GRANT CONNECT TO TEST;

rechercher
precedent    sommaire    suivant    telechargermiroir

Consultez les autres F.A.Q's


Valid XHTML 1.1!Valid CSS!

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 © 2006 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni 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.