Почему тип Oracle, созданный одним пользователем, не виден другому пользователю?
У меня есть 2 пользователя в OracleXE DB: ALICE
а также BOB
, Следующая последовательность шагов успешна на моей локальной машине:
- подключиться как
ALICE
- создать тип верхнего уровня:
create or replace type testtype as object(x number(16));
(РЕДАКТИРОВАТЬ: исправление от неправильного имени foo, которое ввело в заблуждение Мэтью Макпик) - подключиться как
BOB
BOB
видитALICE
тип:select * from all_types
возвращает строкуdeclare x ALICE.testtype; begin null; end;
компилирует
Те же самые шаги, примененные к нашей базе данных разработки, дают в ситуации, когда тип невидим для BOB
, т.е. select не возвращает строку для типа, компиляция блока PLSQL завершается неудачно с PLS-00201: identifier 'ALICE.TESTTYPE' must be declared
ошибка.
Мне нужно сделать тип видимым, поэтому я спрашиваю: что может вызвать эту разницу? (Я догадывался о некоторой необходимости предоставления грантов для типов или общедоступных синонимов, однако этот минималистический пример доказывает обратное.) Какое свойство пользователя / сеанса? Я сделал все возможное в поиске в Google и застрял сейчас, хотя я надеюсь, что решение будет тривиальным. Обе базы данных - Oracle 11g (11.2.0.1.0 dev, 11.2.0.2.0 local).
Спасибо!
1 ответ
Я предполагаю, что это больше, чем просто факт, что вы назвали свой тип foo
но пытался использовать его как testtype
,
Если foo
правильное имя, то, как ALICE
:
grant execute on foo to bob;
Боб, вероятно, имеет EXECUTE ANY TYPE
или аналогичные системные привилегии в 1-й базе данных.