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負責。