Quantcast
Jeudi 4 février 2010 4 04 /02 /Fév /2010 00:59


Appliquer les ROLES, PRIVILEGES, SYNONYM après un IMPORT USER.


Voici un petit script qui permet, à la suite d’un import User (voir plusieurs) de pouvoir recréer l’environnement stable d’origine sur la cible (ROLES, PRIVILEGES SYSTEM, OBJET, SYNONYM, GRANT) en interrogeant les vues du dictionnaire de données Oracle.

 


Contexte:

Vous avez besoin de recharger à partir d’un DUMP des user schéma provenant de la production vers votre base en environnement test ou dev ou autres.

Si vous faites plusieurs DROP USER username CASCADE; ce script peut être utile mais aussi formateur quand à l'utilisation des Vues du dictionnaire de données Oracle.


Il s’exécute (copier/coller en 1 seul bloc) sous C:\

Vous l’exécutez sur le serveur source d’ou provient le DUMP (cas de transfert) ou sur le serveur cible AVANT de faire le DROP USER CASCADE (cas de recréation).


Assurez vous de changer les parties en rouge
, SID, MDP, NOMTNS, C:\schema_constructor.txt, USER1, USER2, USER3 (USER 2 et 3 facultatif, vous supprimez si pas besoin).

 


Ce script est inoffensif (ordres SELECT), vous pouvez l’exécuter sans crainte.

Il génère un fichier texte en sortie (chemin et nom à spécifier).

Vous exécuterez ensuite très certainement la CREATION USER et ROLES en premier, puis place à votre import puis ensuite PRIVILEGES OBJETS, PRIVILEGES SYSTEM, SYNONYM 1 et 2.(Exécution script en user SYS !!).

 

 


_______________S_C_R_I_P_T_________________________________________________

set
ORACLE_SID=SID

sqlplus -s "sys/MDP@NOMTNS as sysdba"

SET pagesize 0

SET linesize 500

SET verify off

 

define batch='C:\schema_constructor.txt'

spool &batch;

 

--CREATION USER au nombre de 3 dans cet exemple

Select 'CREATE USER ' || username ||CHR(13)||

' IDENTIFIED BY VALUES '||'''' || password ||'''' ||CHR(13)||

' DEFAULT TABLESPACE ' || default_tablespace ||CHR(13)||

' TEMPORARY TABLESPACE ' || temporary_tablespace ||CHR(13)||

' PROFILE ' || profile ||CHR(13)||

' ACCOUNT UNLOCK;'

FROM DBA_USERS

WHERE username in ('USER1', 'USER2', 'USER3');

 

--ROLES

select 'GRANT ' ||drp.granted_role || ' to ' ||

drp.grantee ||';' sql

from dba_role_privs DRP

where grantee in ('USER1', 'USER2', 'USER3');

 

-- PRIVILEGES OBJETS

SELECT 'GRANT ' || sys.table_privilege_map.name ||

decode(sys.table_privilege_map.name,

'READ', ' ON DIRECTORY ',

'WRITE',' ON DIRECTORY ',

' ON ') ||

lower(uowner$.name) || '.' || lower(sys.obj$.name) ||

' TO ' || lower(ugrantee$.name) ||

decode(NVL(sys.objauth$.option$,0), 1, ' WITH GRANT OPTION;',';') sql

FROM sys.objauth$ ,

sys.obj$ ,

sys.user$ ugrantor$,

sys.table_privilege_map ,

sys.user$ ugrantee$,

sys.user$ uowner$

WHERE sys.obj$.obj# = sys.objauth$.obj#

AND sys.objauth$.privilege# = sys.table_privilege_map.privilege

AND sys.objauth$.col# IS NULL

AND sys.objauth$.grantor# = ugrantor$.user#

AND sys.objauth$.grantee# = ugrantee$.user#

AND sys.obj$.owner# = uowner$.user#

AND ugrantee$.name in ('USER1', 'USER2', 'USER3')

order by ugrantee$.name, uowner$.name, sys.obj$.name;

 

 

 

--PRIVILEGES SYSTEM

select 'GRANT ' || privilege || ' to ' ||

dsp.grantee ||';' sql

from dba_sys_privs DSP

where grantee in ('USER1', 'USER2', 'USER3');

 

--SYNONYM 1

Select 'CREATE OR REPLACE SYNONYM ' ||

owner || '.' || synonym_name ||

' for ' || table_owner || '.' ||

table_name ||' '  || decode(DB_LINK,null,';','@' || db_link || ' ;' ) sql

from dba_synonyms

where owner in ('USER1', 'USER2', 'USER3')

order by synonym_name;

 

-- SYNONYM 2

SELECT 'DROP PUBLIC SYNONYM ' || SYNONYM_NAME || ' ;' sql

FROM SYS.ALL_SYNONYMS

WHERE TABLE_OWNER in ('USER1', 'USER2', 'USER3')

AND OWNER = 'PUBLIC'

UNION ALL

SELECT 'CREATE ' || DECODE(OWNER, NULL, ' ', 'PUBLIC', 'PUBLIC ', ' ')

||'SYNONYM ' || SYNONYM_NAME || ' FOR ' ||

DECODE(TABLE_OWNER,NULL,' ', TABLE_OWNER||'.') || 

TABLE_NAME||DECODE(DB_LINK, NULL, ' ', '@'||db_link) || '  ;' sql

FROM SYS.ALL_SYNONYMS

WHERE TABLE_OWNER in ('USER1', 'USER2', 'USER3')

AND OWNER = 'PUBLIC';

 

SPOOL OFF;

EXIT;
___________________________________________________________________________


Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Dictionnaire de données et Vues DBA-All-User-V$
Par Daniel Roesch - Publié dans : IMPORT / EXPORT
Ecrire un commentaire - Voir les 0 commentaires
Retour à l'accueil

Oracle Sql et administration

Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus - Articles les plus commentés