SQL語句分為三類:DML、DDL、DCL,之前已經講解完了DML和DDL,現在就差DCL操作的,DCL主要表示的是資料庫的控制語句,控制的就是操作許可權,而在DCL之中,主要有兩個文法:GRANT、REVOKE;
許可權的操作基礎是需要有使用者的,而這個時候就需要通過一個新的使用者進行示範,而要想建立新使用者則首先必須是具備管理員權限的sys、system兩個使用者操作。
範例:建立一個dog使用者,密碼為wangwang
CONN sys/change_on_install AS SYSDBA;CREATE USER dog IDENTIFIED BY wangwang;
此時一個新的使用者就建立完成了。
注意:“ORA-00988:口令缺失或無效” 錯誤,這種情況通常發生於建立 Oracle 常式時指定了非正常的全域資料庫名稱或系統使用者密碼。請注意全域資料庫名稱不能以數字開頭,口令密碼也不能由數字開頭。
Oracle對密碼的要求如下:
- 系統使用者(SYS、SYSTEM)口令長度不能小於7個字元;
- 密碼由1 到 30 個字元 (characters)組成;
- 必須以字母開頭,不能是符號或者數字;
- 只接受字母,數字,以及三個符號 "#", "_" and "$";
- 密碼不能包含像"SELECT","DELETE","CREATE"這類的 Oracle/SQL 關鍵字;
但是此時這個新建立的使用者並不能登入,會提示如下的錯誤資訊:
ORA-01045: user DOG lacks CREATE SESSION privilege; logon denied
提示使用者現在沒有建立SESSION的許可權,在之前曾經解釋過,對於sqlplusw而言,每一個使用者都表示一個SESSION,如果沒有建立SESSION的許可權就意味著不能登入,所以下面要授權。
範例:將CREATE SESSION的許可權給dog使用者
GRANT CREATE SESSION TO dog;
現在新使用者登入成功之後,下面就可以執行表的建立操作。
CREATE SEQUENCE myseq;CREATE TABLE mytab( id NUMBER PRIMARY KEY, name VARCHAR2(50));
解釋:關於資料表的儲存問題
在Oracle之中所有的資料表都是儲存在硬碟上的,但不是每一張資料表都儲存在硬碟上的,而是資料表空間儲存在硬碟上,而資料表儲存在資料表空間之中。
如果把硬碟表示成整個一個圖書館的話,那麼資料表空間就表示每一個書櫃,每一張表就表示柜子上的一本書。
範例:將建立表的許可權給dog使用者
GRANT CREATE TABLE TO dog;
此時只是將資料表的建立許可權給了dog使用者,但是並沒有把資料表空間的操作許可權給dog使用者,所以使用者仍然無法建立表,因為表沒有地方可以儲存。
為瞭解決使用者的授權操作,在Oracle之中為使用者提供了許多的角色,每一個角色會包含多個許可權,而角色主要有兩個:CONNECT、RESOURCE;
範例:將CONNECT和RESOURCE TO dog;
GRANT CONNECT,RESOURCE TO dog;
但是現在一旦存在了使用者的操作,那麼就需要有使用者的管理操作,最簡單的一個功能,使用者有可能丟掉自己的密碼。
範例:修改密碼
ALTER USER dog IDENTIFIED BY miaomiao;
但是當管理員為一個使用者重設一個密碼之後,往往會希望使用者在第一次登入的時候可以修改密碼,所以此時可以通過如下的命令讓密碼失效:
ALTER USER dog PASSWORD EXPIRE;
也可以控制一個使用者的鎖定操作:
ALTER USER dog ACCOUNT LOCK;ALTER USER dog ACCOUNT UNLOCK;
以上是針對於一個基本的使用者操作,但是在之前也學習過,不同的使用者可以訪問其他使用者的資料表,此時只需要加上完整的“使用者名稱.表名稱”即可。
範例:使用dog使用者查詢scott.emp表
SELECT * FROM scott.emp;
但是現在卻無法尋找,此時需要將scott使用者的許可權授予dog使用者才可以讓dog使用者訪問scott使用者的資源,主要的許可權有四個:INSERT、DELETE、UPDATE、SELECT。
範例:將scott.emp表的SELECT和INSERT許可權給dog使用者
GRANT SELECT,INSERT ON scott.emp TO dog;
既然現在有授權的功能,那麼就可以進行許可權的回收,許可權的回收使用REVOKE指令。
範例:回收dog使用者的許可權
REVOKE SELECT,INSERT ON scott.emp FROM dog;REVOKE CONNECT,RESOURCE,CREATE TABLE,CREATE SESSION FROM dog;
既然使用者連許可權都沒了,那麼按照中國的一句話:“捲鋪蓋走人”。
DROP USER dog CASCADE;
以上的所有操作都是由DBA負責。