vendredi 28 mai 2010

Colonne TYPE# de la table SYS.USER$

Dans un article précédent, je disais ceci concernant la colonne TYPE# de la table SYS.USER$:
-- Ceci s'applique aux versions 11g

- Si la colonne TYPE# a la valeur 1 alors il s'agit d'usagers. Dans ce cas, la colonne PASSWORD est renseignée.
- Si la colonne TYPE# a la valeur 0 alors il s'agit d'un ROLE ou "PUBLIC".
   Dans ce cas, la colonne PASSWORD n'est pas renseignée pour un rôle sans mot de passe.
Lorsque le role est créé avec un mot de passe la colonne est renseignée avec le mot de passe crypté. Pour un "Application role" la colonne est renseignée avec le mot "APPLICATION".
- Si la colonne SPARE4 n'est pas nulle, alors la colonne PASSWORD est renseignée avec un mot de passe crypté pour un usager ou un role .

Dans cet article, j'aimerais vous faire partager deux choses:

  • Comment masquer un usager pour qu'il ne soit pas visible par la vue DBA_USERS?
  • Comment rendre les objets du schéma PUBLIC exportables (par expdp)?

1- Comment masquer un usager?

Voyons la valeur de la colonne type# dans la table sys.user$

SYS@DUPL> select name,type# from sys.user$ where name='HETCHE';
NAME TYPE#
---------- ----------
HETCHE 1

Vérifions que l'usager hetche est bien visible en interrogeant la vue DBA_USERS:

SYS@DUPL> select username from dba_users where username='HETCHE';
USERNAME
------------------------------
HETCHE

Modifions la valeur de la colonne type# pour la mettre à 2:

SYS@DUPL > update sys.user$ set type#=2 where name='HETCHE';
1 row updated.

SYS@DUPL> commit;
Commit complete.


Vérifions si hetche est toujours visible en interrogeant la vue DBA_USERS

SYS@DUPL > select username from dba_users where username='HETCHE';
no rows selected


On voit bien qu'en mettant la valeur du champ type# de la table sys.user$ à 2, l'on ne voit plus l'usager hetche par la vue dba_users. À chacun de définir l'utilisation qu'il peut en faire.

Remettons la valeur à 1:

SYS@DUPL > update sys.user$ set type#=1 where name='HETCHE';
1 row updated.

SYS@DUPL> commit;
Commit complete.
SYS@DUPL > select name,type# from sys.user$ where name='HETCHE';
NAME TYPE#
----------- ----------
HETCHE 1


Vérifions dans la vue:

SYS@DUPL > select username from dba_users where username='HETCHE';
USERNAME
------------------------------
HETCHE

2- Comment rendre les objets du schéma PUBLIC exportables?

Voyons la valeur du champ type#:

SYS@DUPL > select name,type# from sys.user$ where name='PUBLIC';
NAME TYPE#
----------- ----------
PUBLIC 0

Faisons un export avec le paramètre «schemas=PUBLIC»:

oracle@udl001:/udl001_u01/home/dba/oracle> expdp system schemas=PUBLIC dumpfile=public_test.dmp logfile=public_test.log
Export: Release 11.2.0.1.0 - Production on Ven. Mai 28 18:08:00 2010
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Password:
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, Oracle Label Security, OLAP,
Data Mining and Real Application Testing options
ORA-39001: valeur d'argument non valide
ORA-39170: L'expression de schéma 'PUBLIC' ne correspond à aucun schéma.
oracle@udl001:/udl001_u01/home/dba/oracle>

Mettons la valeur du champ type# à 1 et essayons de nouveau:

SYS@DUPL > update sys.user$ set type#=1 where name='PUBLIC';
1 row updated.SYS@DUPL> commit;
Commit complete.


Essayons l'export de nouveau:

oracle@udl001:/udl001_u01/home/dba/oracle> expdp system schemas=PUBLIC dumpfile=public_test.dmp logfile=public_test.log
Export: Release 11.2.0.1.0 - Production on Ven. Mai 28 18:08:53 2010
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Password:
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, Oracle Label Security, OLAP,
Data Mining and Real Application Testing options
Démarrage de "SYSTEM"."SYS_EXPORT_SCHEMA_01" : system/******** schemas=PUBLIC dumpfile=public_test.dmp logfile=public_test.log
Estimation en cours à l'aide de la méthode BLOCKS ...
Traitement du type d'objet SCHEMA_EXPORT/TABLE/TABLE_DATA
Estimation totale à l'aide le la méthode BLOCKS : 0 KB
Traitement du type d'objet SCHEMA_EXPORT/USER
Traitement du type d'objet SCHEMA_EXPORT/DEFAULT_ROLE
Traitement du type d'objet SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Traitement du type d'objet SCHEMA_EXPORT/SYNONYM/SYNONYM
Traitement du type d'objet SCHEMA_EXPORT/DB_LINK
Table maître "SYSTEM"."SYS_EXPORT_SCHEMA_01" chargée/déchargée avec succès
******************************************************************************
L'ensemble de fichiers de vidage de SYSTEM.SYS_EXPORT_SCHEMA_01 est :
/u01/home/dba/oracle/dpdump/public_test.dmp
L'exécution du travail "SYSTEM"."SYS_EXPORT_SCHEMA_01" a abouti à 18:12:06
oracle@udl001:/udl001_u01/home/dba/oracle>

Ceci peut être utile si l'on souhaite exporter des objets appartenant à PUBLIC. Sait-on jamais !!!

Aucun commentaire:

Enregistrer un commentaire