數據控制機制
資料庫管理系統通過以下三懂烏蒸步來實現數據控制:
授權定義
具有授權資格的用戶,如
資料庫管理員(Database Administrators,DBA)或建表戶(Database Owner,DBO),通過
數據控制語言(Data Control Language,DCL),將授權決定告知
資料庫管理系統。
存權處理
資料庫管理系統把授權的結果編譯後存入數據字典中。數據字典是由系統自動生成、維護的一組表,記錄著用戶標識、基本表、視圖和各表的列描述以及系統的授權情況。
查權操作
當用戶提出操作請求時,系統首先要在數據字典中查找用戶的數據操作許可權,當用戶擁有該操作權時才能執行其操作,否則系統將拒絕其操作。
許可權與角色
許可權
在SQL系統中,安全機制一共有兩種。一種是視圖機制,當用戶通過試圖訪問資料庫時,此視圖外的數據不能再訪問,試圖機制提供了一定的安全性。另外一種是許可權機制,是實際中主要使用的安全機制。給用戶授予不同類型的許可權是許可權機制的思想所在,在必要時,授權需要被收回,使用戶能夠進行的資料庫操作以及所操作的數據限定在指定範圍內,禁止盛船催院用戶超越許可權對
資料庫進行非法的操作,使得資料庫的安全性得到保證。
在資料庫中,許可權可分為系統許可權與對象許可權。系統許可權是指資料庫用戶能夠對資料庫系統進行某種特定操作的權力,它可由
資料庫管理員授予其他用戶,如一個基本表的創建。對象許可權是指資料庫用戶在指定的資料庫對象上進行某種特定能力的權力,對象許可權由創建基本表、視圖等資料庫捉愚辨對象的用戶授予其他用戶,如查詢、添加、修改、刪除等操作。
角色
角色是多種許可權的集合,可以把角色授予用戶或其它角色。當要為某一用戶同時授予或收回多項許可權時,則可以把這些許可權定義為一個角色,對此角色進行相關操作。這樣許多重複性的工作得以有效避免,資料庫用戶的許可權管理工作在一定程度上得以簡化。
數據控制語言
數據操作許可權的設定語句包括授權語句、收權語句和拒絕訪問3種。
授權語句
授權分對系統特權和對對象特權的兩種方式。系統特權又稱為語句特權,是允許用戶在資料庫內部實施管理行為的特權,主要包括創建或刪除用戶、刪除或修改資料庫對象等。對象特權類似於資料庫操作語言DML的許可權,指用戶對資料庫中的
表、
視圖、存儲過程等對象的操作許可權。
(1)系統許可權與角色的授予
使用SQL的GRANT語句為用戶授予系統許可權,其語法格式為:
GRANT<系統許可權>|<角色>[,<系統許可權>|<角色>]...
TO<NPZ>|<角色駝蘭協己>|PUBLIC[,<用戶名>|<角色>]...
[WITH ADMIN OPTION]
其語義是:將指定的系統許可權授予指定的用戶或角色。其中,資料庫中的全部用戶是由PUBLIC代表的;WITH ADMIN OPTION為可選項,指定後則允許被授權的用戶將指定的系統特權或角色再授予其他用戶或角色。
(2)對象許可權與角色的授予
資料庫管理員擁有系統許可權,而作為資料庫的普通用戶,只對自己創建的基本表、視圖等資料庫對象擁有對象許可權。如果要共享櫃估棄其他的資料庫對象,則必須授予普通用戶一定的對象許可權。類似於系統許可權的授予方法,SQL使用GRANT語句為用戶授予對象許可權,其語法格式為:
GRANT ALL|<對象許可權>[(列名[,列名]…)][,對象許可權]…
ON<對象名>
TO<用戶名>|<角色>|PUBLIC[,<用戶名>|<角色>]...
[WITH GRANT OPTION]
其語義是:將指定的操作對象的對象許可權授予指定的用戶或角色。其中,所有的對象許可權是由ALL代表的;列名用於指定要授權的
資料庫對象的一列或多列。如果列名未指定的話,被授權的用戶將在資料庫對象的所有列上均擁有指定的特權。實際上,只有當授權INSERT和UPDATE許可權時才需要指定列名。ON子句用於指定要授權的資料庫對象名,可以是基本表名、視圖名等。WITH GRANT OPTION為可選項,指定後則允許被授權的用戶將許可權再授予其他用戶或角色。
收權語句
資料庫管理員是DBA、資料庫擁有者(建庫者)DBO或資料庫對象擁有者DBOO(資料庫對象主要是基本表)可以通過邀汽REVOKE語句將其他用戶的數據操作權收回。
(1)系統許可權與角色的收回
資料庫管理員可以使用SQL的REVOKE語句回收系統許可權,其語法格式為:
REVOKE<系統許可權>|<角色>[,<系統許可權>|<角色>]...
FROM<用戶名>希棵朽|<角色>|PUBLIC[,<用戶名>|<角色>]...
(2)對象許可權與角色的收回
所有授予出去的許可權在一定的情況下都可以由資料庫管理員和授權者收回,收回對象許可權仍然使用REVOKE語句,其語法格式為:
REVOKE<對象許可權>|<角色>[,<對象許可權>|<角色>]...
FROM<用戶名>|<角色>|PUBLIC[,<用戶名>|<角色>]...
拒絕訪問
拒絕訪問的一般格式為:
DENY ALL[PRIVILIGES]|<許可權組>[ON<對象名>]TO<用戶組>|PUBLIC;
其中,ON子句用於說明對象特權的對象名,對象名指的是表名、視圖名、視圖和表的列名或者過程名。
[WITH ADMIN OPTION]
其語義是:將指定的系統許可權授予指定的用戶或角色。其中,資料庫中的全部用戶是由PUBLIC代表的;WITH ADMIN OPTION為可選項,指定後則允許被授權的用戶將指定的系統特權或角色再授予其他用戶或角色。
(2)對象許可權與角色的授予
資料庫管理員擁有系統許可權,而作為資料庫的普通用戶,只對自己創建的基本表、視圖等資料庫對象擁有對象許可權。如果要共享其他的資料庫對象,則必須授予普通用戶一定的對象許可權。類似於系統許可權的授予方法,SQL使用GRANT語句為用戶授予對象許可權,其語法格式為:
GRANT ALL|<對象許可權>[(列名[,列名]…)][,對象許可權]…
ON<對象名>
TO<用戶名>|<角色>|PUBLIC[,<用戶名>|<角色>]...
[WITH GRANT OPTION]
其語義是:將指定的操作對象的對象許可權授予指定的用戶或角色。其中,所有的對象許可權是由ALL代表的;列名用於指定要授權的
資料庫對象的一列或多列。如果列名未指定的話,被授權的用戶將在資料庫對象的所有列上均擁有指定的特權。實際上,只有當授權INSERT和UPDATE許可權時才需要指定列名。ON子句用於指定要授權的資料庫對象名,可以是基本表名、視圖名等。WITH GRANT OPTION為可選項,指定後則允許被授權的用戶將許可權再授予其他用戶或角色。
收權語句
資料庫管理員是DBA、資料庫擁有者(建庫者)DBO或資料庫對象擁有者DBOO(資料庫對象主要是基本表)可以通過REVOKE語句將其他用戶的數據操作權收回。
(1)系統許可權與角色的收回
資料庫管理員可以使用SQL的REVOKE語句回收系統許可權,其語法格式為:
REVOKE<系統許可權>|<角色>[,<系統許可權>|<角色>]...
FROM<用戶名>|<角色>|PUBLIC[,<用戶名>|<角色>]...
(2)對象許可權與角色的收回
所有授予出去的許可權在一定的情況下都可以由資料庫管理員和授權者收回,收回對象許可權仍然使用REVOKE語句,其語法格式為:
REVOKE<對象許可權>|<角色>[,<對象許可權>|<角色>]...
FROM<用戶名>|<角色>|PUBLIC[,<用戶名>|<角色>]...
拒絕訪問
拒絕訪問的一般格式為:
DENY ALL[PRIVILIGES]|<許可權組>[ON<對象名>]TO<用戶組>|PUBLIC;
其中,ON子句用於說明對象特權的對象名,對象名指的是表名、視圖名、視圖和表的列名或者過程名。