web-dev-qa-db-fra.com

Comment trouver le nom de schéma dans Oracle? lorsque vous êtes connecté en session SQL en lecture seule

Je suis connecté à une base de données Oracle avec un utilisateur en lecture seule et j'ai utilisé le nom du service lors de la configuration de la connexion dans SQL Developer, d'où je ne connais pas le SID (schéma).

Comment puis-je trouver le nom du schéma auquel je suis connecté?

Je cherche ceci parce que je veux générer un diagramme ER et dans ce processus, il demande à une étape de sélectionner le schéma. Lorsque j’ai essayé de sélectionner mon nom d’utilisateur, j’ai cherché toutes les tables, car j’imagine que toutes les tables sont mappées avec un utilisateur de schéma.

Edit: j'ai obtenu ma réponse partiellement par le sql ci-dessous fourni par Frank, il m'a donné le nom du propriétaire qui est schéma dans mon cas. Mais je ne suis pas sûr que ce soit une solution générique applicable à tous les cas.

select owner, table_name from all_tables.

Edit : Je pense que sql est la solution correcte dans tous les cas car le schéma est le propriétaire de tous les objets de la base de données. Donc, soit je reçois schéma ou propriétaire les deux sont identiques. Auparavant, ma compréhension du schéma n’était pas correcte et j’ai parcouru un autre question et le schéma trouvé est aussi un utilisateur.

Frank / a_horse_with_no_name Mettez ceci en réponse afin que je puisse l'accepter.

19
Vipin

Pour créer un utilisateur en lecture seule, vous devez configurer un utilisateur différent de celui qui possède les tables auxquelles vous souhaitez accéder.

Si vous créez simplement l'utilisateur et accordez le droit SELECT à l'utilisateur en lecture seule, vous devez ajouter le nom du schéma à chaque nom de table. Pour éviter cela, vous avez essentiellement deux options:

  1. Définissez le schéma actuel dans votre session:
ALTER SESSION SET CURRENT_SCHEMA=XYZ
  1. Créez des synonymes pour toutes les tables:
CREATE SYNONYM READER_USER.TABLE1 FOR XYZ.TABLE1

Donc, si on ne vous a pas dit le nom du schéma propriétaire, vous avez essentiellement trois options. Le dernier devrait toujours fonctionner:

  1. Interrogez le paramètre de schéma actuel:
SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL
  1. Listez vos synonymes:
SELECT * FROM ALL_SYNONYMS WHERE OWNER = USER
  1. Examinez toutes les tables (à l'exception des schémas standard bien connus):
SELECT * FROM ALL_TABLES WHERE OWNER NOT IN ('SYS', 'SYSTEM', 'CTXSYS', 'MDSYS');
19
Codo

Appel SYS_CONTEXT pour obtenir le schéma actuel. De Demandez à Tom "Comment obtenir le schéma actuel :

select sys_context( 'userenv', 'current_schema' ) from dual;
28
Danilo Piazzalunga