2010-02-17 73 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克它工作得很好,而在11克登錄被拒絕:

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

授予CREATE SESSION這個角色並沒有什麼區別。
我只能在向用戶直接授予CONNECT(或CREATE SESSION)後才能登錄。

Oracle是否改變了這種行爲或者我做錯了什麼?

回答

6

我想你可能已經在10g中獲得了安全「功能」。我讀取SQL參考和安全指南11g的方式表明,在該角色授予的任何權限有效之前,啓用密碼的角色需要使用SET ROLE my_role IDENTIFIED BY passwd

您不能CREATE SESSION直到您擁有角色,並且在發出SET ROLE之前您不能擁有該角色。

Catch-22。

+0

非常好,非常感謝!你有鏈接在哪裏顯示? –

+0

我沒有tahiti.oracle.com文檔的鏈接,因爲它的可用性不可靠。 CREATE ROLE和SET ROLE語法分別位於第15-59頁和第19-60頁的Oracle數據庫SQL語言參考11g第2版(E10592-04)中。 –

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子句:

ALTER USER默認角色; 指定在登錄時默認授予用戶的角色。該子句只能包含已通過GRANT語句直接授予用戶的角色或具有CREATE 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中引入更改 這些更改將適用於所有未來版本。上述限制將在未來的文件中介紹。

可以很容易地通過運行所產生的腳本打開密碼啓用角色爲標準角色:

選擇「改變角色‘||角色||’未確定;' from dba_roles where password_required ='YES'and role not in(select role from dba_application_roles);