2015-10-09 4 views
0

У меня 2 пользователя в OracleXE db: ALICE и BOB. После последовательности шагов успешно на моей локальной машине:Почему тип Oracle, созданный одним пользователем, не отображается другим пользователем?

  • подключиться как ALICE
  • создать тип верхнего уровня: create or replace type testtype as object(x number(16));(EDIT: исправление от неправильного имени Foo, который misleaded Мэтью Макпик)
  • подключения, как BOB
  • BOB видит на тип ALICE «S:
    • select * from all_types возвращается строка
    • declare x ALICE.testtype; begin null; end; компилирует

Те же действия, применяемые к нашей доходности базы данных развития в ситуации, когда тип является невидимым для BOB, т.е. выбрать не возвращает строку для типа, PLSQL блок компиляции терпит неудачу с ошибкой PLS-00201: identifier 'ALICE.TESTTYPE' must be declared.

Мне нужно сделать вид видимым, поэтому я спрашиваю: Что может вызвать эту разницу? (Я догадывался о необходимости предоставления грантов по типам или общественным синонимам, однако этот минималистский пример доказывает обратное.) Некоторое свойство пользователя/сессии? Я сделал все возможное в поиске по Google и сейчас застрял, хотя я надеюсь, что решение будет тривиальным. Обе базы данных - это Oracle 11g (11.2.0.1.0 dev, 11.2.0.2.0 local).

Спасибо!

+2

Вероятно, что у Боба и Алисы разные роли и права из одной базы данных в другую – kevinsky

ответ

0

Я предполагаю, что это больше, чем просто тот факт, что вы назвали свой тип foo, но попытались использовать его как testtype.

Если foo это правильное название, то, как ALICE:

grant execute on foo to bob; 

Боб, вероятно, имеет EXECUTE ANY TYPE или подобную систему привилегий в 1-й базе данных.

+0

Извините, foo был не прав, я не обратил внимания на эту опечатку при переписывании с почты. Thnks, я попробую это на моем рабочем компьютере в ближайшее время. –

+0

Решенные. На моей локальной машине Боб был создан системным пользователем и инициализирован скриптом, который исходит из этого запроса: 'select 'grant' || привилегия || 'to BOB' from session_privs'. Следовательно, у него действительно была привилегия «ВЫПОЛНИТЬ ЛЮБЫЕ ТИПЫ». После ограничения привилегий все вернулось к нормальному состоянию, и 'grant execute на TESTTYPE to BOB' /' revoke execute на TESTTYPE from BOB' включает/отключает доступ, соответственно. –