Проблема с доступом пользователей в Oracle 11G - PullRequest
2 голосов
/ 20 сентября 2011

В моей оракулярной БД у меня есть пользователь с именем test, у этого пользователя есть DML_ROLE в БД. И я предоставил доступ для вставки / обновления / удаления / выбора к DML_ROLE в таблице с именем hdr_detail.

Но когда пользователь test выполняет запрос на обновление таблицы hdr_detail, он получает сообщение об ошибке как Returned error: ORA-01031: insufficient privileges. Он работает нормально, когда я предоставляю доступ непосредственно пользователю.

Я запутался, почему эта ошибка появляется только тогда, когда я предоставляю доступ через роль.

Структура таблицы:

COLUMN NAME          DATA TYPE
PERIOD               NUMBER
HDR_ID               VARCHAR2(50)

Запрос, который я использую для обновления:

update test_sch.hdr_detail set period=201108 where hdr_id = 'check';

Заявление, которое я использую для предоставления:

grant insert,select,update,delete on test_sch.hdr_detail to dml_role;

select * from dba_role_privs where grantee like 'TEST' возвращает следующий результат

GRANTEE GRANTED_ROLE  ADMIN_OPTION  DEFAULT_ROLE
TEST    DML_ROLE      NO            NO

select * from dba_tab_privs where table_name like 'HDR_DETAIL' возвращает следующий результат

GRANTEE    OWNER       TABLE_NAME   GRANTOR     PRIVILEGE   GRANTABLE    HIERARCHY
DML_ROLE   TEST_SCH    HDR_DETAIL   TEST_SCH    DELETE      NO           NO
DML_ROLE   TEST_SCH    HDR_DETAIL   TEST_SCH    INSERT      NO           NO
DML_ROLE   TEST_SCH    HDR_DETAIL   TEST_SCH    SELECT      NO           NO
DML_ROLE   TEST_SCH    HDR_DETAIL   TEST_SCH    UPDATE      NO           NO

Пожалуйста, помогите мне решить эту проблему. Ответьте в комментарии, если вам нужна дополнительная информация по этому вопросу.

Ответы [ 3 ]

2 голосов
/ 20 сентября 2011

Попробуйте установить роль в качестве роли по умолчанию для пользователей:

ALTER USER test DEFAULT ROLE dml_role;
0 голосов
/ 20 сентября 2011

Это кажется невозможным.Вы уверены, что ваш пользователь подключается к правильной БД, схеме и запрашивает правильную таблицу?Я ошеломлен.

Пожалуйста, попробуйте

select * from test_sch.hdr_detail 

с тестовым пользователем.

0 голосов
/ 20 сентября 2011

Может быть проблема с доступом к объекту базы данных HDR_DETAIL.

От Дона Берлесона (http://www.dba -oracle.com / concepts / role_security.htm):

Роли Oracle имеют некоторые ограничения. В частности объектные привилегии, предоставляемые через роли Oracle, нельзя использовать при написании кода PL / SQL. При написании кода PL / SQL у вас должны быть прямые права доступа к объектам в базе данных, к которой обращается ваш код.

Если ваш пользователь выдает UPDATE через приложение или блок PL / SQL, он не будет использовать разрешения на основе ролей. Если это так, вам придется предоставить разрешения напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...