8-1 Oracle 系統架構

8-2 資料字典

8-3 使用者(User)

8-4 資料庫安全性

8-5 權限與角色

 
   

資料庫使用者是指可登錄到資料庫的使用者。每一個使用者都有一獨特的名字標識,透過密碼來確認使用者。此外為了讓使用者能執行資料庫操作必須授予使用者權限(Privilege)。在新建立使用者時,使用者是沒有任何權限的。
 

(1) 建立使用者指令─CREATE USER
主要是用來建立新的使用者,操作者必須具有 CREATE USER 的系統權限,其語法如下:
         CREATE USER <使用者名>
         IDENTIFIED BY <密碼>
         [ DEFAULT TABLESPACE <表空間名> ]
         [ TEMPORARY TABLESPACE <表空間名> ]
         [ QUOTA <空間大小> ]

其中 DEFAULT TABLESPACE 為設定使用者建立物件的預設表空間。若忽略之,則內定的表空間為 SYSTEM 表空間。TEMPORARY TABLESPACE 為設定使用者臨時暫存表空間,若忽略之,則內定的表空間為 SYSTEM。QUOTA 則是設定使用者在表空間內所能使用的最大空間。

 

建立新的使用者 GUEST。其內定的表空間為 MY_SPACE,其暫存表空間為 TEMP。

 

此時若嘗試以 GUEST 登錄 ORACLE 系統,則系統會回覆以下的錯誤訊息:

 

ERROR:
ORA-01045:user GUEST lacks CREATE SESSION privilege; Logon denied

 


為什麼會出現以上的錯誤呢?因為雖然建立了 GUEST 帳號,也指定了表空間的位置,但是我們並沒有給予 GUEST 任何權限。在 ORACLE 系統中,有帳號並不表示你能登錄系統,你必須擁有 CREATE SESSION 的系統權限才能登錄系統。有關於權限的問題,我們將於後面介紹。

假設 GUEST 擁有 CONNECT 與 RESOURCE 的角色 (此角色部份將於後面章節中介紹),因為 CONNECT 的角色中包括了 CREATE SESSION 的系統權限了,所以我們可以以 GUEST 帳號登錄系統,並查詢資料字典 USER_USERS 來知道目前的內定表空間(Default tablespace) 與暫存表空間(Temporary tablespace)。由於當我們建立 GUEST 帳號時,已指定了內定表空間(Default tablespace) 為 MY_SPACE 與暫存表空間(Temporary tablespace) 為 TEMP,所以其查詢的結果也是如此。
 

 

 


因為我們有授予使用者 GUEST 有 RESOURCE 的角色,而該角色中包括了 CREATE TABLE 的系統權限,所以使用者 GUEST 可以在此表空間 MY_SPACE 中建立新的資料庫物件 (如表格):

 


 


我們可以查詢資料字典 USER_TABLES 來得知目前的使用者所擁有的表格與其存放的表空間:
 

 


 

(2) 更改使用者指令-ALTER USER

 

主要是用來更改使用者的密碼、內定表空間、暫存表空間、表空間的空間限制等等設定。操作者修改自己的密碼時不需要額外的權限,但修改其他使用者則必須有 ALTER USER 的系統權限才行。其語法如下:
         ALTER USER <使用者>
         IDENTIFIED BY <密碼>
         [ DEFAULT TABLESPACE <表空間> ]
         [ TEMPORARY TABLESPACE <表空間> ]
         [ QUOTA <空間大小> ]

   

更改使用者 GUEST 的內定表空間(Default tablespace) 為 USERS,並且更改密碼。(當然你必須以 DBA 的身份如 SYSTEM 登錄 ORACLE 系統。)

 


 

我們可以用 GUEST 的身份查詢資料字典 USER_USERS 來得知目前的內定表空間(Default tablespace) 為 USERS:

 


 


同樣地,我們可以用 GUEST 的身份建立新的資料庫物件 (如表格):

 



 

 

因為我們更改了使用者 GUEST 的內定表空間(Default tablespace) 為 USERS,所以當使用者 GUEST 建立表格時,其內定存放的表空間即為新的表空間 USERS,因此新建立的表格 MYTABLE2 是存放於表空間 USERS 中。此時,我們可以查詢資料字典 USER_TABLES 來得知目前的使用者所擁有的表格與其存放的表空間:

 



 

(3) 刪除使用者指令-DROP USER

 

主要用來刪除資料庫中的使用者並且刪除該使用者所擁有的資料庫物件。而操作者本身必須具備 DROP USER 的系統權限。其語法如下:

DROP USER <使用者> [ CASCADE]

其中 CASCADE 為循環式地刪除其他綱要(Schema) 中全部引用的整合性限制和其所擁有的資料庫物件。若使用者在網要(Schema) 中擁有資料庫物件,則刪除時必須加上 CASCADE 參數。
 

以 DBA 的身份登錄並刪除使用者 GUEST。假設使用者 GUEST 目前正在登錄 ORACLE 系統,而且 GUEST 也擁有資料庫物件 (如表格)。

若我們直接執行 DROP USER 指令:

 


   
 

結果,系統回覆如上的錯誤訊息。原因是因為使用者 GUEST 目前正在登錄 ORACLE 系統,我們必須等使用者 GUEST 登出後,才能執行 DROP USER 指令。假設我們以 GUEST 的身份登出 ORACLE 系統,並且我們是以 SYSTEM 的身份執行以下的指令:指令:

 



 

 

又出現了如上的錯誤訊息,其原因是因為使用者 GUEST 擁有資料庫物件,例如表格,我們不能直接將使用者 GUEST 刪除,必須在刪除指令中加上 CASCADE 參數。或許如此一來,我們可能會覺得有點麻煩,但是為了 ORACLE 系統的安全,這也是必須的。