| 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
|
|
| 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. 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
|
|
| 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 :
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 :
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 :
|
| auteur : Xavier Vlieghe |
Via la commande CREATE USER, donc voici un exemple :
CREATE USER TEST
IDENTIFIED BY mypassword
DEFAULT TABLESPACE TBSTEST
TEMPORARY TABLESPACE TEMP;
|
Il est ensuite possible de lui assigner des droits via la commande GRANT :
|
Consultez les autres F.A.Q's
|
|