Cинонимы Oracle

Синонимы (synonyms) Oracle Database — это псевдонимы объектов базы данных, которые служат в основном для облегчения пользователям доступа к объектам, принадлежащим другим пользователям, а также в целях безопасности. Синонимы скрывают идентичность лежащих в их основе объектов и могут быть как приватными (private), так и общедоступными (public). Общедоступные синонимы доступны всем пользователям базы данных,а приватные синонимы являются составной частью схемы отдельного пользователя, и другим пользователям базы следует выдавать права доступа для использования приватных синонимов. Синонимы Oracle могут быть созданы для таблиц, представлений, материализованных представлений и хранимого кода — пакетов и процедур.

Синонимы Oracle — очень мощное средство с точки зрения обеспечения пользователям доступа к объектам, которые не принадлежат к их схемам. Все синонимы должны создаваться явно командой CREATE SYNONYM, а лежащие в основе объекты могут находиться в той же базе данных или в других базах, подключенных по связям баз данных.

 

Сфера применения синонимов Oracle

Есть два основных применения синонимов.

  • Для обеспечения прозрачности объектов. Синонимы могут быть созданы для обеспечения прозрачности исходных объектов для пользователя.
  • Для прозрачности расположения. Синонимы могут быть созданы как псевдонимы таблиц и прочих объектов, относящихся к нелокальной базе данных.

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


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

SQL> SHOW USER
USER is "SYSTEM"
SQL> DESC employees
ERROR:
ORA-04043: object employees does not exist
ORA-04043: объект employees не существует
SQL> DESC hr.employees
Name               Null?      Type
---------------    --------   --------------
EMPLOYEE_ID        NOT NULL   NUMBER(6)
FIRST_NAME                    VARCHAR2(20)
LAST_NAME          NOT NULL   VARCHAR2(25)
EMAIL              NOT NULL   VARCHAR2(25)
PHONE_NUMBER                  VARCHAR2(20)
HIRE_DATE          NOT NULL   DATE
JOB_ID             NOT NULL   VARCHAR2(10)
SALARY                        NUMBER(8,2)
COMMISSION_PCT                NUMBER(2,2)
MANAGER_ID                    NUMBER(6)
DEPARTMENT_ID                 NUMBER(4)
SQL>

Как видите, когда пользователь SYSTEM пытается получить структуру таблицы без префикса — имени схемы, Oracle выдает ошибку, сообщающую об отсутствии таблицы. Чтобы обойти это, владелец схемы должен создать синоним с тем же именем, что и у таблицы. Как только пользователь SYSTEM применит нотацию схема.таблица, он сможет увидеть содержимое таблицы.

 

Создание общедоступного синонима

Общедоступные (public) синонимы относятся к специальной схеме базы данных Oracle, именуемой PUBLIC. Как упоминалось ранее, общедоступные синонимы видны всем пользователям базы данных. Общедоступные синонимы обычно создаются владельцем приложения для таблиц и прочих объектов, таких как процедуры и пакеты,чтобы пользователи приложения могли видеть эти объекты.

В следующем коде показано, как создается общедоступный синоним для таблицы employees

SQL> CREATE PUBLIC SYNONYM employees FOR hr.employees;
Synonym created.
SQL>

Теперь любой пользователь сможет видеть таблицу, просто набрав ее исходное имя. При желании с помощью оператора CREATE SYNONYM таблице можно дать другое имя. Помните, что администратор базы данных должен явно выдать привилегию CREATE PUBLIC SYNONYM пользователю hr, чтобы тот мог создавать общедоступные синонимы.

Возможность видеть таблицу через общедоступный (или приватный) синоним, еще не означает возможность выполнения над ней операций SELECT, INSERT, UPDATE или DELETE. Для выполнения таких операций пользователю нужны специальные привилегии для доступа к исходному объекту, выданные владельцем приложения непосредственно или через роли. 

 

Создание приватного синонима

Приватные синонимы, в отличие от общедоступных, видны только в схеме, владеющей таблицей или объектом. Приватные синонимы можно создать, когда нужно обращаться к одной и той же таблице в разных контекстах под разными именами. Они создаются точно так же, как и общедоступные, но без ключевого слова PUBLIC в операторе CREATE.

В следующем примере показано, как создать приватный синоним по имени addresses для таблицы locations. Обратите внимание, что после создания к приватному синониму можно обращаться как к первоначальному имени таблицы. 

SQL> CREATE SYNONYM addresses FOR hr.locations;
Synonym created.
SQL> SELECT * FROM addresses;

 

Уничтожение синонима

И приватный, и общедоступный синонимы уничтожаются командой DROP SYNONYM,но есть одно отличие. При уничтожении общедоступного синонима после ключевого слова DROP должно находиться ключевое слово PUBLIC.

Ниже показан пример уничтожения приватного синонима:

SQL> DROP SYNONYM addresses;
Synonym dropped.
SQL>

 

Управление синонимами

Представление DBA_SYNONYMS содержит информацию обо всех синонимах в вашей базе данных. Синонимы основаны на лежащих в основе базовых таблицах, и узнать имена базовых объектов можно, запустив запрос, подобный следующему: 

SQL> SELECT TABLE_NAME, SYNONYM_NAME
FROM dba_synonyms
WHERE OWNER = 'SALAPATI';
TABLE_NAME  SYNONYM_NAME
----------  ------------
DEPT        DEPT
EMP         EMP
SQL>

Используйте представление DBA_SYNONYMS для выяснения имен базовых таблиц,скрывающихся за синонимами.

 

Переключение к другой схеме

Если вы постоянно используете таблицы, принадлежащие другой схеме, и в этой схеме нет никаких синонимов, придется перед каждым именем таблицы указывать квалификатор схемы. Например, для обращения к таблице emp, принадлежащей пользователю scott, понадобится указывать emp.scott. Чтобы избежать этого, можно применить следующий оператор ALTER SESSION SET SCHEMA

SQL> CONNECT samalapati/sammyy1
SQL> ALTER SESSION SET CURRENT_SCHEMA = scott;
SQL> SELECT * FROM emp;

Использование оператора ALTER SESSION не приводит к автоматической выдаче каких-либо привилегий. Для того чтобы запросить таблицу emp без квалификатора схемы, как показано в предыдущем примере, пользователь должен иметь привилегию SELECT на таблице emp.

Вас заинтересует / Intresting for you:

Создание базы данных Oracle
Создание базы данных Oracle 18710 просмотров Александров Попков Wed, 14 Nov 2018, 12:44:39
Видеокурс по администрированию...
Видеокурс по администрированию... 10462 просмотров Илья Дергунов Mon, 14 May 2018, 05:08:47
Поддерживаемые Oracle типы дан...
Поддерживаемые Oracle типы дан... 5653 просмотров Валерий Павлюков Wed, 24 Oct 2018, 08:00:37
Oracle и непроцедурный доступ ...
Oracle и непроцедурный доступ ... 7382 просмотров Antoni Tue, 21 Nov 2017, 13:32:50
Войдите чтобы комментировать