Вопрос о Grant (DCL) в Oracle SQL Developer - PullRequest
0 голосов
/ 24 апреля 2020

У меня проблема с пониманием, что именно я делаю неправильно. Невозможно предоставить доступ другому пользователю через роль. Пример:

Системный пользователь:

create table testtable (id number);--Table TESTTABLE created
create role testrole;--Role TESTROLE created
grant insert on testtable to testrole;--Grant succeeded
grant testrole to hr;--Grant succeeded

Часовой пользователь:

insert into system.testtable values(1)

SQL Ошибка: ORA-00942: таблица или представление не существует 00942. 00000 - «таблица или представление не существует»

1 Ответ

0 голосов
/ 01 мая 2020

TL; DR: это работает, просто переподключите пользователя hr.

документация говорит

"Если вы даете роли для пользователя, то база данных делает ее доступной для пользователя. Пользователь может немедленно включить роль и использовать привилегии в домене привилегий роли. "

Таким образом, ваш Пользователь hr должен активировать роль, прежде чем сможет ее использовать:

insert into a.testtable values(1);
ORA-00942: table or view does not exist

SELECT * FROM session_roles;
no rows selected

SET ROLE testrole;
Role set.

SELECT * FROM session_roles;
TESTROLE

insert into a.testtable values(1);
1 row created.

Роли обычно автоматически включаются при входе в систему, поэтому вы должны делать это, только если у hr открыт сеанс, пока он получает роль. Стандартная процедура заключается в отключении / повторном подключении пользователя в случае возникновения проблем с новыми ролями.

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