Гранты по ролям изменились в Oracle 11g? - PullRequest
0 голосов
/ 17 февраля 2010

Я пытался предоставить CONNECT пользователю через роль:

CREATE ROLE my_role IDENTIFIED BY "passwd";
GRANT CONNECT TO my_role;

CREATE USER my_user IDENTIFIED BY "passwd";
GRANT my_role TO my_user;

Когда я пытаюсь это сделать в 10g , он работает нормально, а в 11g вход в систему отклоняется:

ORA-01045:user MY_USER lacks CREATE SESSION privilege; logon denied

Предоставление CREATE SESSION роли не имеет значения.
Я могу войти в систему только после прямого предоставления CONNECT (или CREATE SESSION) пользователю.

Oracle изменил это поведение или я что-то не так делаю?

Ответы [ 3 ]

6 голосов
/ 17 февраля 2010

Я думаю, что вы, возможно, избежали "функции" безопасности в 10g. То, как я читаю Справочник по SQL и Руководство по безопасности для 11g, указывает на то, что роли с включенным паролем требуют использования SET ROLE my_role IDENTIFIED BY passwd, прежде чем какие-либо права, предоставленные этой ролью, вступят в силу.

Вы не можете CREATE SESSION, пока у вас нет роли, и вы не можете иметь эту роль, пока не наберете SET ROLE.

Уловка-22.

2 голосов
/ 15 декабря 2011

База знаний Oracle [ID 745407.1] объясняет это.

Предложение DEFAULT в:

изменение пользовательских ролей по умолчанию; определяет роли, предоставленные по умолчанию пользователю при входе в систему. Это предложение может содержать только роли, которые были предоставлены непосредственно пользователю с помощью инструкции GRANT, или роли, созданные пользователем с привилегией CREATE ROLE. Вы не можете использовать предложение DEFAULT ROLE для включения:

  1. Роли, не предоставленные пользователю

  2. Роли, предоставленные через другие роли

  3. Роли, управляемые внешней службой (например, операционной системой) или Oracle Internet Directory

  4. Роли с аутентификацией по паролю.

  5. Роли, которые реализованы как роли защищенных приложений.

Для ролей, прошедших проверку подлинности по паролю, изменение было внесено в версии 10.2.0.5 и 11.1.0.7. Для защищенных ролей приложений это изменение было введено в версиях Oracle 10.2.0.4 и 11.1.0.7 Эти изменения будут применяться ко всем будущим релизам. Вышеупомянутые ограничения будут введены в будущей документации.

Можно легко превратить роли с включенным паролем в стандартные роли, запустив скрипт, следующий из:

выберите «изменить роль» || роль || ' не опознан;' из dba_roles, где password_required = 'YES', а роль не в (выберите роль из dba_application_roles);

1 голос
/ 11 мая 2011

Активация ролей по умолчанию (предоставленных пользователю по умолчанию), которые также защищены паролем, изменена в Oracle 10g, версия 10.2.0.5 (по крайней мере, для нашей копии). В выпуске 10.2.0.5 защищенная паролем роль больше не будет активирована по умолчанию. Его нужно было специально включить с помощью соответствующего пароля.

Насколько мы могли судить, это не было задокументировано. Но когда наши системы были обновлены с 10.2.0.4 до 10.2.0.5, это изменение сломало несколько наших систем, и нам пришлось создавать параллельные незащищенные роли для наших функциональных учетных записей, у которых не было никакого механизма для активации ролей по умолчанию. Мы в основном создали old_role_batch без пароля, поскольку копия old_role была защищена паролем.

...