|
建立新的使用者
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 來得知目前的使用者所擁有的表格與其存放的表空間:
|
|
|
|
|
主要是用來更改使用者的密碼、內定表空間、暫存表空間、表空間的空間限制等等設定。操作者修改自己的密碼時不需要額外的權限,但修改其他使用者則必須有
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 來得知目前的使用者所擁有的表格與其存放的表空間: |
|
|
|
|
主要用來刪除資料庫中的使用者並且刪除該使用者所擁有的資料庫物件。而操作者本身必須具備 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
系統的安全,這也是必須的。 |
|
|