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.
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:
ALTER SESSION SET CURRENT_SCHEMA=XYZ
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:
SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL
SELECT * FROM ALL_SYNONYMS WHERE OWNER = USER
SELECT * FROM ALL_TABLES WHERE OWNER NOT IN ('SYS', 'SYSTEM', 'CTXSYS', 'MDSYS');
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;