IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Schéma ou utilisateur "PUBLIC" ?


Sujet :

Oracle

  1. #1
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 112
    Points : 55
    Points
    55
    Par défaut Schéma ou utilisateur "PUBLIC" ?
    Bonjour à tous

    Lorsque l'on crée un synonym par exemple via l'ordre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CREATE PUBLIC SYNONYM ...
    veut dire que le synonyme en question ne figure ni dans son propre schéma ni dans le schéma SYS ni dans le schéma SYSTEM, mais dans un schéma appelé : PUBLIC
    la vue DBA_SYNONYMS à travers sa colonne OWNER faisant foi,


    par ailleurs,
    Sachant que les schémas correspondent de manière bi-univoque aux utilisateurs, c'est à dire qu'à chaque utilisateur correspond un schéma et vice versa

    j'aimerais savoir quel est l'utilisateur qui correspond à ce schéma du nom de "PUBLIC" ?
    autrement dit , c'est quoi cette histoire de schéma qui n'est pas vraiment un schéma ?


    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 331
    Points : 394
    Points
    394
    Par défaut
    Je vais essayer de répondre à ta question mais ce n'est pas gagné
    D'abord, tu dis :
    ... mais dans un schéma appelé : PUBLIC
    Or, PUBLIC n'est pas un schéma mais un rôle. Pour s'en rendre compte, tu peux utiliser la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT name, type# FROM user$;
    Tu remarqueras que TYPE# est égal à 1 pour les utilisateurs et à 0 pour les rôles.
    Sinon tu pourras aussi consulter le script : $ORACLE_HOME/rdbms/admin/sql.bsq
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    create role public
    /
    ....
    D'un autre côté, le "rôle" PUBLIC est assimilé à une sorte de "groupe d'utilisateurs" (la doc Oracle parle de user group), auquel tous les utilisateurs de la base appartiennent. Ce "user group" n'a le droit que de créer des synonymes et des dblinks (des rollback segments aussi mais c'est une autre histoire).

    J'espère que c'est assez clair et que ça répond à tes interrogations.

    Rachid A.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 112
    Points : 55
    Points
    55
    Par défaut
    Merci Rachid
    ce que tu dis est trés clair,
    par contre, ce qui m'intrigue, c'est ce que tu ne dis pas ! et c'est à propos de cette entité nommée PUBLIC qui est tantôt assimilée à un role, tantôt à un groupe de USERS, ...
    mais elle est aussi assimilée à un schéma, sinon comment expliquer son occurence dans une colonne du nom de OWNER (propriétaire)
    par exemple, un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT OWNER, synonym_name 
    FROM dba_synonyms
    afficherait beacoup de synonymes appartenant à PUBLIC,
    ça veut dire que PUBLIC est un propriétaire d'objets, un Schéma

    Sinon voilà, je vais poser poser ma question autrement :
    à quel schéma appartiennent les synonymes publiques ?
    Merci

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 331
    Points : 394
    Points
    394
    Par défaut
    Une partie de la réponse se trouve dans mon précédent post. Je m'explique :
    Même si la colonne TYPE# de la table USER$ contient la valeur 0, Oracle ne considère pas PUBLIC comme un rôle. La preuve c'est que la vue DBA_ROLES ne contient aucune entrée PUBLIC, et pour cause : si tu regardes la définition de la vue DBA_ROLES, voilà ce que tu vas y trouver :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT text FROM dba_views WHERE view_name='DBA_TABLES';
    TEXT
    --------------------------------------------------------------------------------
    select name, decode(password, null, 'NO', 'EXTERNAL', 'EXTERNAL',
    'GLOBAL', 'GLOBAL', 'YES')
    from  user$
    where type# = 0 and name not in ('PUBLIC', '_NEXT_USER')
    Donc, personnellement je penche pour la notion de "user group" qui a le droit de détenir certains types d'objets. Il y en a qui regrettent qu'Oracle n'aie pas poussé ce concept de "user group" un peu plus loin

    Rachid A.

  5. #5
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 112
    Points : 55
    Points
    55
    Par défaut
    Donc moi, qui ai toujours cru, dur comme fer, que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jamais un objet oracle ne peut exister en dehors d'un schéma
    je dois revoir ce principe que des experts m'ont inculqué depuis des années !!

    C'est à dire que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    le propriétaire d'un objet n'est pas forcément un utilisateur,
    il peut parfois s'agir du fameux groupe d'utilisateurs nommé PUBLIC
    et que c'est la seule exception, je suppose ?

    Merci

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 331
    Points : 394
    Points
    394
    Par défaut
    Citation Envoyé par Isabella Voir le message
    Donc moi, qui ai toujours cru, dur comme fer, que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jamais un objet oracle ne peut exister en dehors d'un schéma
    je dois revoir ce principe que des experts m'ont inculqué depuis des années !!
    Les exceptions confirment la règle

    Citation Envoyé par Isabella Voir le message
    et que c'est la seule exception, je suppose ?
    J'en connais pas d'autres

    Rachid A.

  7. #7
    Membre du Club
    Inscrit en
    Mai 2002
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 112
    Points : 55
    Points
    55
    Par défaut
    Merci pour tout Rachid

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo