2014-04-10 20 views
2

我在我的Oracle 11g數據庫中創建了一個名爲TestUserRole的角色,該角色最終擁有更多權限,但目前只有創建會話權限。我已將該角色分配給用戶,TestUser。這是他們唯一的角色。爲什麼Oracle在我嘗試連接時不認爲我的用戶具有「創建會話」特權?

我創造了這個如下:

CREATE ROLE TestUserRole IDENTIFIED BY somepassword; 
GRANT Create Session TO TestUserRole; 
CREATE USER TestUser IDENTIFIED BY somepassword; 
GRANT TestUserRole TO TestUser; 

當我嘗試連接到數據庫,我得到:

ORA-01045:用戶TESTUSER缺乏CREATE SESSION權限;登錄被拒絕

我已驗證(我認爲)用戶和角色安裝成功。如果我查詢

select * from dba_role_privs where grantee = 'TESTUSER' 

我得到

| Grantee | Granted_Role | Admin_Option | Default_Role | 
--------------------------------------------------------- 
| TESTUSER | TESTUSERROLE | NO   | YES   | 

然後,如果我查詢

select * from role_sys_privs where role = 'TESTUSERROLE' 

我得到

| Role   | Privilege  | Admin_Option | 
------------------------------------------------ 
| TESTUSERROLE | CREATE SESSION | NO   | 

這樣看來,我已經創建用戶和角色成功地,用戶具有角色,而角色具有該角色創建會話權限。但是,當我嘗試登錄時,Oracle告訴我用戶沒有創建會話權限。我哪裏錯了?我是否必須將此特權直接分配給用戶而不是通過角色?

回答

10

您可以嘗試在沒有「IDENTIFIED BY password」子句的情況下創建角色嗎?

Here它說以下內容:

的BY password子句允許您創建一個本地角色,並表示啓用角色時,用戶必須指定密碼到數據庫。

那麼問題是因爲在角色登錄時尚未啓用,用戶必須使用「設置作用」語句中指定here但是這隻能在登錄後進行啓用。

-1

解決方案

  1. 授予CREATE SESSION用戶
  2. 進入用戶>用戶
  3. 在列表中選擇用戶
  4. 右鍵單擊該用戶並選擇編輯用戶
  5. 下服務器權限選項卡,選中「CREATE SESSION
  6. 比單擊保存

enter image description here

相關問題