資料庫複習5——安全性,資料庫複習安全性
資料庫複習CH7 安全性7.1 資料庫安全性介紹
如果說完整性是針對授權使用者的資料庫保護措施,那麼安全性就是針對非授權使用者的資料庫保護措施
安全性問題涉及的層面很多,非法使用者可以從以下各層面對資料庫的竊取或篡改:
層面 |
竊取或篡改行為 |
應對措施 |
資料庫系統 |
擷取進階使用者資料庫許可權 |
身分識別驗證,許可權和可擷取資料對等 |
作業系統 |
擷取作業系統root許可權想幹啥就能幹啥,不僅僅限於對資料庫的操作了 |
提升作業系統安全層級 |
網路 |
通過網路竊聽和身份偽裝也能竊取線上機密資料 |
身分識別驗證和加密傳輸 |
物理 |
物理上竊取和破壞存放裝置 |
機柜上鎖和其他安全防護,備份措施 |
7.2 許可權管理
一般資料庫安全性管理從三個角度入手:
- 伺服器OS登陸身分識別驗證
- 資料庫DBMS登陸身分識別驗證
- 資料庫DBMS許可權管理
許可權管理屬於自訂式(Discretionary)的存取控制,還有一種機制是強制(Mandatory)存取控制(從安全模型、資料對象標籤等角度)
我們主要討論資料庫的許可權管理,不難想到,資料庫有以下一些許可權:
- 讀資料許可權
- 插入資料許可權
- 修改資料許可權
- 刪除資料許可權
- 建立刪除索引許可權
- 關聯建立許可權
- 關係修改許可權
- 關係刪除許可權
- 等等
前面提到的視圖算是一種許可權管理機制(使用者訪問符合授權的視圖),除此之外用授權圖來表示許可權管理等級也是常用方法(使用者和DBA均參與,略)
7.3 SQL安全性
概念性的部分結束,下面進入複習基礎的SQL資料庫安全管理操作
(1)授權
SQL基本授權語句的文法如下,執行授權語句的使用者必須已經擷取相應操作的授權權力才能授權(DBA有所有權力):
grant <privilege list> on <relation name or view name> to <user list>;
包括了:
- select
- insert
- update
- delete
- references,即外鍵聲明許可權
- usage,允許使用特殊的域(某些自訂網域?)
- all privileges,即所有可能的許可權
- with grant option(尾碼),即對某操作的授權權力
可以是以下三種格式:
- user-id:使用者唯一標識編號
- public:所有有效使用者
- role:角色
角色(Role)是SQL-99中引入的概念,它用於使用者組別許可權管理和許可權層次管理(by the way,這兩個是根據我理解自己造的詞)
我們先看一個role分配許可權的例子:
create role worker;create role manager;grant select on Staff_Account to worker;grant update, insert, delete on Staff_Account to manager;grant worker to manager;grant worker to U1, U2, U3;grant manager to U0;
create role worker;
和create role manager;
建立普通員工和經理兩個角色,接著授予普通員工在表Staff_Account上的select許可權,然後授予經理在表Staff_Account上的update、insert和delete許可權
接下來grant worker to manager;
是角色間的授權,也就是把worker的所有權力都賦予manager,然後最後授予U1、U2、U3普通員工的角色以及授予U0經理的角色(即賦予他們相應角色的權利)
那麼上例中,
使用者組別許可權管理是指把現實身份相同的U1、U2、U3分成一組,直接分配給他們worker的權力。那麼如果新來一個普通員工U4就不必再去思考賦予給他什麼權力而是直接授予他worker的身份即可。涉及多個表的不同的許可權分配可能會很複雜,我們只用對同一個組別的統一的身份授權,再去系統管理使用者身份即可管理複雜的許可權分配。而許可權層次管理是利用使用者現實身份的層次關係,藉助面對對象設計中繼承的思想來劃分許可權的層次,讓許可權層次清晰分明的管理方法。具體到上例來說就是經理也是員工,只是是特殊身份的員工,那麼manager身份的人可以繼承worker身份已經分配的權力。許可權層次管理的好處在於讓我們對待manager角色時只需要考慮他的特殊許可權即可。
另外需要注意的是,授予關於視圖的許可權並不意味著授予其基本表的響應許可權
(2)取消授權
SQL取消授權的基礎文法是:
revoke <privilege list> on <relation name or view name> from <user list> [restrict|cascade];
和和上小節定義一致,而restrict(限制)和cascade(級聯)尾碼的含義和我們在學習外鍵時的含義相同:restrict就是不向後傳播,cascade就是說使用者X授予Y許可權A,一旦revoke了X的A許可權那麼Y的A許可權也被取消
(3)SQL許可權管理的局限性
SQL的許可權管理有自己的缺陷,其中主要有:
- 許可權的粒度不夠細化,即無法細緻到某個關係中某個元組的許可權:比如學生只能查看成績表中自己的成績,這個需求SQL的許可權管理就無法很好的滿足
- 某一個應用的所有端系統使用者都映射到同一個資料庫使用者,即角色劃分很難根據使用者定製
7.4 其他安全管理措施
還有一個常見的資料庫安全管理措施叫做審計跟蹤(Audit Trail),即DBMS在特殊檔案或資料庫中記錄每個使用者的具體操作,那麼DBA可以查看記錄是否越權等,在資料庫恢複中我們也經常使用審計跟蹤的手段(見後續章節)