2010-02-17 2 views
0

Я пытался предоставить CONNECT пользователю через роли:Гранты от роли изменены в Oracle 11g?

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; 

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

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

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

Имеет ли Oracle такое поведение, или я делаю что-то неправильно?

ответ

6

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

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

Catch-22.

+0

Отлично, спасибо большое! У вас есть ссылка, где это указано? –

+0

У меня нет ссылки на документацию tahiti.oracle.com, так как ее доступность ненадежна. CREATE ROLE и SET ROLE Синтаксис приведен в справочнике SQL Server SQL Server Reference 11g Release 2 (E10592-04) на страницах 15-59 и 19-60 соответственно. –

1

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

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

2

Ознакомиться с базой знаний Oracle [ID 745407.1].

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

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

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

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

  3. ролей под управлением внешней службы (такие как операционная система) или в Интернет-каталоге Oracle

  4. Роли, которые аутентифицированы по паролю.

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

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

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

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