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;
Объекты базы данных принадлежат тем пользователям, которые их создали, и доступны лишь в схеме конкретного пользователя, если только пользователь явным образом не предоставил право на доступ к объектам другим пользователям или ролям, назначенным другим пользователям. Но даже предоставив полномочия на использование объекта, пользователь должен отдавать себе отчет в том, что владение схемой ограничивает доступ к объектам данных Oracle. Допустим, что таблица STUDENT существует в схеме пользователя STUD, а пользователь USER1 пытается обратиться к этой таблице:
SELECT * FROM studentWHERE 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), он доступен любому пользователю базы данных. Частный и общий синонимы создаются с помощью команд CREATESYNONYM и 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;