2010-11-19 1 views
2

У меня есть 3 пользователя Oracle A, B, C и вы хотите использовать B (как промежуточное звено) для импорта таблицы с C на A. При подключении к B я могу запустить «create table A.T1 as select * from T1 @ C». Но когда я ставлю оператор sql в процедуру, которую создает B/владеет, я продолжаю получать «ORA-01031: недостаточно привилегий». Как sysdba, я предоставил все права (dba) B. Так что мне здесь не хватает? Спасибо.Выполняет ли процедура Oracle наследование привилегий своего создателя?

ответ

2

Предопределил ли вы следующее: B?

sql> grant create any table to b; 
5

В правах того или DEFINER, хранящихся процедуру (по умолчанию), только привилегии, которые доступны являются те, которые предоставлены непосредственно пользователем, а не те, которые были предоставлены через роль (как DBA). Поэтому Пабло прав, что B должен будет иметь привилегию CREATE ANY TABLE в качестве прямого гранта.

+1

По умолчанию это «Права владельца», а не invokers. – redcayuga

+1

@redcayuga - +1 и спасибо за улов! Вы абсолютно правы. Я обновил свой ответ, чтобы отразить вашу коррекцию. –

+0

"AUTHID DEFINER" ...;) Это значение по умолчанию. Альтернативой является «AUTHID CURRENT_USER», который я всегда хочу попробовать ...! –

Смежные вопросы