官术网_书友最值得收藏!

4.9 數據控制語言(DCL)

SQL語言除了包含數據定義、數據查詢和數據更新的語言外,還提供了保證數據庫安全的數據控制語言。由于數據庫管理系統是一個多用戶系統,為了控制用戶對數據的存取權利、保持數據的共享及完全性,SQL語言提供了一系列的數據控制功能。其中,主要包括安全性控制、完整性控制、事務控制和并發控制。

本節首先簡單介紹數據庫的安全問題,然后討論如何利用DCL提供的語句進行數據庫的安全訪問控制。完整性控制主要是由數據定義語言完成的,本節不再重復,此外本節會簡單介紹事務控制和并發控制,如果讀者想對這方面進行深入了解,可參考其他數據庫理論的專著。

4.9.1 數據庫安全

數據庫安全性是指保護數據庫以防止不合法的使用所造成的數據泄露、更改或破壞。在DBMS中一般都會提供一些保證數據安全的手段,供DBA選用。常用的手段如下。

● 視圖定義:為不同的用戶定義不同的視圖,可以限制各個用戶的訪問范圍,這在介紹視圖的特點時講解過。

● 訪問控制:控制各個用戶對數據庫資源的控制權利。

● 數據加密:以上兩種方法都是防止從數據庫系統中竊取數據,而對數據進行加密,則可以防止數據被竊取后數據的保密性。

● 跟蹤審查:該手段是一種監視措施,它對保密數據進行跟蹤并記錄所有的訪問活動。

在SQL語言的數據控制語言中提供了訪問控制的語句,下面會具體討論。關于數據加密和跟蹤審查,讀者可以參考其他書籍。

4.9.2 訪問控制

訪問控制(Access Control)是對用戶訪問數據庫各種資源(包括基表、視圖、各種目錄以及實用程序等)的權利(包括創建、撤銷、查詢、增、刪、改、執行等)的控制。這是數據庫安全的基本手段。幾乎每種DBMS都提供這方面的功能。在同一個DBMS下可能建立多個數據庫,訪問控制在這些數據庫之間是互相獨立的,一個用戶在一個數據庫所獲得的訪問權不能用于其他數據庫。數據庫的用戶按其訪問權利的大小,一般可以分為以下3類。

1.一般數據庫用戶

在SQL中,一般數據庫用戶稱為“具有CONNECT特權的用戶”。這類用戶可以與數據庫連接,并具有如下權限:

● 按照授權可以查詢或更新數據庫中的數據;

● 可以創建視圖或定義數據的別名。

2.具有部分數據庫特權的數據庫用戶

這類用戶稱為“具有RESOURCE特權的用戶”,除了具有一般用戶所有的權限外,還有下列權限:

● 可以創建表、索引;

● 可以授予或收回其他數據庫用戶對其所創建的數據對象所擁有的訪問權;

● 有權對其所創建的數據對象跟蹤審查。

3.具有DBA特權的數據庫用戶

DBA擁有支配整個數據庫資料的特權。這種用戶除了具有上面兩種用戶的權限外,還有如下權限:

● 有權訪問數據庫中的任何數據;

● 不但可以授予和收回數據庫用戶對數據對象的訪問權,還可以批準或收回數據庫用戶;

● 有權對數據庫進行調整、重組和重構;

● 有權對整個數據庫進行跟蹤審查。

具有DBA特權的用戶對數據庫擁有最大的特權,因此也對數據庫負有特別的責任。DBA權限不得任意擴散。

不同的用戶對數據庫有不同的訪問權,DBMS從下列兩個方面來控制用戶的訪問:

● 用戶的標識和鑒別:標識用戶使用唯一的標識符;鑒別用戶的真偽使用密碼或只有用戶具有的物品(例如IC卡)或者利用用戶的個人特征鑒別(例如簽名、指紋等)。

● 授權:授權就是規定和限制用戶的權限。

SQL的數據控制語言提供了訪問控制的功能。SQL利用GRANT和REVOKE語句完成對用戶權限的設定。下面一節將詳細介紹這兩種語句。

4.9.3 授權操作和收回權限操作

1.授權

授權就是給予用戶一定的特權,這是對用戶訪問權限的規定和限制。SQL語言使用GRANT語句為用戶授予系統權限,其語法格式為:

    GRANT <權限>[,<權限>…]
    [ON <對象類型><對象名>]
    TO <用戶名>|PUBLIC[,<用戶名>…]
    [WITH GRANT OPTION];

其中<權限>可以是SELECT、INSERT、DELETE、UPDATE這些操作權限,或者可以用ALL PRIVILEGES表示以上所有操作權限。

<對象類型>一般是TABLE,表示表或視圖。<對象類型>還可以是數據庫,用DATABASE表示,對數據庫可以有建立表(CREATETAB)的權限,該權限屬于DBA,可由DBA授予普通用戶,普通用戶被授予此權限后,可以創建基本表。

<用戶名>用來指定被授予權限的個人,可以把權限同時授予多個用戶。如果<用戶名>是PUBLIC表示則該權限授予所有用戶。

如果使用了WITH GRANT OPTION選項,則獲得該權限的用戶還可以把這種權限再授予其他用戶。如果沒有指定WITH GRANT OPTION選項,則被授予該權限的用戶只能使用該權限,而不能授予其他人。

例如,把修改STUDENTS表的權限授予用戶USER1,但他不能授予該權限給他人。SQL語句表示如下:

    GRANT UPDATE
    ON TABLE STUDENT
    TO USER1;

再例如,把對COURSE和SC表的所有權限都授予用戶USER2,SQL語句表示如下:

    GRANT ALL PRIVILEGES
    ON TABLE COURSE,SC
    TO USER2
    WITH GRANT OPTION;

2.收回權限

數據庫管理員(DBA)或其他授權者可以使用REVOKE語句收回權限,其語法格式為:

    REVOKE <權限>|<角色> [,<權限>…]
    ON <對象類型><對象名>]
    FROM <用戶名>|PUBLIC[,<用戶名>…];

在授權操作中,利用WITH GRANT OPTION可以傳遞權限。在收回特權時,不但從語句中指明的用戶收回了權限,而且還要收回由這個用戶轉授出去的權限。

例如,收回用戶USER2對SC表的所有權限,用SQL語句表示如下:

    REVOKE ALL PRIVILEGES
    ON TABLE SC
    FROM USER2;

此語句的作用不僅收回了USER2的權限,而且如果USER2曾經把權限授予給其他用戶,那么該語句也會收回該權限。

DBMS為每個數據庫在其數據目錄中設一張授權表。此表的主要內容有用戶標識、數據對象和訪問特權。這里的用戶不一定是用戶個人,也可以是團體、程序或終端。

用戶對自己建立的基表和視圖擁有完全的操作權限,可以用GRANT語句授予某些權限給其他用戶,并且權限可以傳播。所有授予出去的權限在必要時又都可以用REVOKE語句收回,可見SQL的數據控制語言對權限的管理提供了靈活的操作。

4.9.4 事務控制和并發控制簡介

事務是并發控制的基本單位,也是恢復的基本單位。在SQL中支持事務的概念,所謂事務,是用戶定義的一個操作序列(集合)。這些操作要么都做,要么一個都不做,是一個不可分割的整體。SQL提供了事務提交和事務撤銷兩種命令。

1.事務提交

事務提交的命令為:COMMIT[WORK]。

事務提交標志著對數據庫的某種應用操作成功地完成,所有對數據庫的操作都必須作為事務提交給系統時才有效。事務一經提交就不能撤銷。

2.事務撤銷

事務撤銷的命令是:ROLLBACK[WORK]。

事務撤銷標志著相應事務對數據庫操作失敗,因而要撤銷對數據庫的改變,即要“回滾”到相應事務開始時的狀態。當系統非正常結束時(如掉電、系統死機),將自動執行ROLLBACK命令。

數據庫作為共享的資源,允許多個用戶程序并行地存取數據。當多個用戶并行地操作數據庫時,需要通過并發控制對它們加以協調、控制,以保證并發操作的正確執行,并保證數據庫的一致性。

在SQL中,并發控制采用封鎖技術實現。當一個事務欲對某個數據對象操作時,可申請對該對象加鎖,取得對數據對象的一定控制,以限制其他事務對該對象的操作。

主站蜘蛛池模板: 东阳市| 嵩明县| 涿州市| 阜康市| 衡阳县| 泾源县| 蒙山县| 吕梁市| 南昌市| 普安县| 改则县| 乌拉特前旗| 淳化县| 调兵山市| 冕宁县| 防城港市| 镇坪县| 于田县| 海淀区| 鄂伦春自治旗| 库尔勒市| 乐清市| 长乐市| 砀山县| 四会市| 新丰县| 上蔡县| 偃师市| 怀宁县| 花莲县| 洛川县| 建宁县| 凉城县| 萨嘎县| 桐城市| 通山县| 巩义市| 阿荣旗| 永新县| 盐池县| 泰宁县|