Мар 112011
 

Использование команды ALTER SESSION SET current_schema может быть удобным, например, когда мы вручную что-то делаем с объектами другого пользователя и нам лень каждый раз предварять имя объекта именем другой схемы, а также чтобы избежать использования публичных синонимов, которые Том Кайт считает злом.

Нужно помнить, что эта команда не переключает пользователя (это было бы неправильно с точки зрения безопасности), а просто автоматически подставляет имя пользователя перед именем объекта, поэтому, как и в случае использования синонимов, нужно позаботиться о предоставлении прав на объект.

Рассмотрим пример (выполнять в SQL*Plus):
Пусть у нас есть пользователи cube и cube2

-- Сначала от имени пользователя cube дадим cube2 право делать запросы к таблице emp:
CONN cube/cube
GRANT SELECT ON emp TO cube2;
 
CONN cube2/cube2
-- В схеме cube2 нет таблицы emp, поэтому получим ошибку ORA-00942: table or view does not exist
SELECT COUNT(*) FROM emp;
-- Теперь поменяем схему по умолчанию:
ALTER SESSION SET current_schema=cube;
-- И попробуем снова выполнить наш запрос, на этот раз успешно:
SELECT COUNT(*) FROM emp;

Если бы мы забыли дать права на select пользователю cube2, то при попытке выполнения запроса узрели бы ту же самую ошибку: ORA-00942: table or view does not exist.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)