Как найти имя схемы в Oracle? когда вы подключены в сеансе sql, используя только для чтения пользователя

Вопрос:Я подключен к базе данных оракула с пользователем только для чтения, и я использовал имя службы при настройке соединения в sql-разработчике, поэтому я не знаю SID (схему). Как я могу узнать имя схемы, с которой я подключен? Я ищу это, потому что хочу генерировать диаграмму ER и в этом процессе на одном шаге он запрашивает

Вопрос:

Я подключен к базе данных оракула с пользователем только для чтения, и я использовал имя службы при настройке соединения в sql-разработчике, поэтому я не знаю SID (схему).

Как я могу узнать имя схемы, с которой я подключен?

Я ищу это, потому что хочу генерировать диаграмму ER и в этом процессе на одном шаге он запрашивает выбор схемы. Когда я попытался выбрать свое имя пользователя, я получаю любые таблицы, так как я думаю, что все таблицы сопоставляются с пользователем схемы.

Изменить: я получил свой ответ частично с помощью приведенного ниже кода sql Frank, который дал мне имя владельца, которое является схемой в моем случае. Но я не уверен, что это универсальное решение, применимое ко всем случаям.

select owner, table_name from all_tables.

Изменить. Я думаю, что над sql это правильное решение во всех случаях, потому что схема является владельцем всех объектов db. Таким образом, либо я получаю схему, либо владелец, оба они одинаковы. Раньше мое понимание схемы было неправильным, и я прошел через другой question, и найденная схема также является пользователем.

Frank/a_horse_with_no_name Поместите это в ответ, чтобы я мог его принять.

Лучший ответ:

Чтобы создать пользователя, доступного только для чтения, вам нужно настроить другого пользователя, кроме того, у кого есть таблицы, к которым вы хотите получить доступ.

Если вы просто создаете пользователя и предоставляете разрешение SELECT для пользователя только для чтения, вам нужно добавить имя схемы к каждому имени таблицы. Чтобы этого избежать, у вас есть в основном два варианта:

  • Установите текущую схему в сеансе:

ALTER SESSION SET CURRENT_SCHEMA=XYZ

  1. Создание синонимов для всех таблиц:

CREATE SYNONYM READER_USER.TABLE1 FOR XYZ.TABLE1

Итак, если вам не сказали имя схемы владельца, у вас есть три варианта. Последний должен всегда работать:

  • Запросить текущий параметр схемы:

SELECT SYS_CONTEXT(‘USERENV’,’CURRENT_SCHEMA’) FROM DUAL

  1. Перечислите свои синонимы:

SELECT * FROM ALL_SYNONYMS WHERE OWNER = USER

  1. Исследуйте все таблицы (за исключением некоторых известных стандартных схем):

SELECT * FROM ALL_TABLES WHERE OWNER NOT IN (‘SYS’, ‘SYSTEM’, ‘CTXSYS’, ‘MDSYS’); Ответ №1

Вызовите SYS_CONTEXT, чтобы получить текущую схему. Из Спросите Tom” Как получить текущую схему:

select sys_context( ‘userenv’, ‘current_schema’ ) from dual;

Оцените статью
Добавить комментарий