пятница, 11 января 2019 г.

CREATE SYNONYM

Объекты базы данных принадлежат тем пользователям, которые их создали, и доступны лишь в схеме конкретного пользователя, если только пользователь явным образом не предоставил право на доступ к объектам другим пользователям или ролям, назначенным другим пользователям. Но даже предоставив полномочия на использование объекта, пользователь должен отдавать себе отчет в том, что владение схемой ограничивает доступ к объектам данных Oracle. Допустим, что таблица STUDENT существует в схеме пользователя STUD, а пользователь USER1 пытается обратиться к этой таблице:
SELECT * FROM student  WHERE kod_stud = 256;
В этом случае появляется следующее сообщение
SELECT * FROM student
*
ORA-00942: table or view does not exist
(таблица или представление не существует)
Oracle не возвращает данные, связанные с KOD_STUD= 256, а сообщает пользователю о том, что объект не существует. Причина, по которой USER1 не может видеть таб­лицу в схеме STUD, заключается в том, что пользователь USER1 не обратился к таблице как к находящейся в схеме STUD. Покажем, как оператор select может быть успешно выполнен:
SELECT * FROM stud.student WHERE kod_stud = 256;
Помнить о том, какому пользователю какая таблица принадлежит, чересчур слож­но, поэтому в базе данных можно применить синонимы, устраняющие необходимость указания владельца схемы (делающие ее «прозрачной»).
Синоним — это альтерна­тивный способ обращения к существующей таблице со стороны пользователей. Синонимы позволяют обращаться к объекту базы данных или по другому имени, или без обязательной ссылки на владельца объекта. Однако синоним не изменяет харак­теристики описания таблицы. Таким образом, с помощью синонимов пользователи могут обращаться к таблице, не предваряя ее имени именем владельца.
Синонимы могут быть общими или частными. К частному (private) синониму может обращаться только тот пользователь, который создал его и владеет им. Если же синоним общий (public), он доступен любому пользователю базы данных.  Частный и общий синонимы создаются с помощью команд  CREATE SYNONYM и  CREATE PUBLIC SYNONYM. Причем на создание общих синонимов нужно иметь специальную привилегию.
Общий синоним создается привилегированным пользователем и позволяет другим пользователям базы данных обращаться к конкретной таблице, не предваряя ссылку на нее именем схемы.
Пример: Пользователь STUD может создать общий синоним для таблицы STUDENT.
— Выполняется пользователем STUD
CREATE PUBLIC SYNONYM student FOR stud.student;
После создания этого синонима пользователь USER1 может обратиться к таблице с его помощью:
—Выполняется пользователем USER1
SELECT * FROM student WHERE kod_stud = 256;
Другим типом синонимов являются частные синонимы, создаваемые пользовате­лями для себя и позволяющие только им обращаться к таблице в другой схеме по одному ее имени. Пользователь не может обратиться к таблице с помощью частного синонима другого пользователя; он должен создать свой собственный.
Пример: В следующем программном блоке пользователь USER1 получает тот же результат, что и раньше, но с помощью частного синонима.
—Выполняется пользователем USER1
CREATE SYNONYM student FOR stud.student;
—Выполняется пользователем USER1
SELECT * FROM student WHERE kod_stud = 256;
Для удаления синонимов используется команда DROP SYNONYM:
DROP SYNONYM student;
DROP PUBLIC SYNONYM student;