1. 程式人生 > >第13講:數據庫安全性

第13講:數據庫安全性

控制 技術分享 height 員工 定義 idt 分享圖片 pub 其他

大綱:

  1. 數據庫安全性的概念及分類
  2. SQL語言實現自主安全性

一、前言

1. 數據庫安全性是數據庫的一種特性(免受非法或非授權用戶的使用、泄露、破壞),其由DBMS保證實現

2. 數據庫系統的安全級別涉及多個方面,如網絡控制、操作系統控制、DBMS控制等,我們只在DBMS上進行控制

二、數據庫安全性概述

1. DBMS的安全機制可包括自主安全性機制、強制安全性機制、數據加密存儲機制等

①自主安全性機制:通過授權機制(讓權限在用戶之間傳遞,使用戶自主管理數據庫安全性)來實現

②強制安全性機制:對數據和用戶進行分類,不同類用戶能看到不同類別的數據

2. 數據庫自主安全性機制

  • DBMS專門提供一個DBA賬戶,DBA利用該賬戶的特權可以進行用戶賬戶的創建以及權限授予和撤消、安全級別控制調整等
  • 用戶在使用數據庫前必須從DBA處獲得一個賬戶,並由DBA授予該賬戶一定的權限,該賬戶的用戶依據其所擁有的權限對數據庫進行操作,同時,該賬戶的用戶也可將其所擁有的權利轉授給其他的用戶,由此實現權限在用戶之間的傳播和控制

3. DBMS如何實現數據庫自主安全性

  1. DBA定義安全性控制規則(安全性訪問規則)
  2. 當用戶請求訪問數據時,DBMS將依據安全性控制規則來檢查是否符合規則,進而決定是否允許訪問

三、安全性訪問規則的表達

1. 安全性訪問規則的一般形式:(S,O,t,P),即用戶S在滿足條件P時,以權利t來訪問對象O

  • S:請求主體,即用戶或用戶組
  • O:訪問的對象,即要訪問的數據庫、表、元組、屬性等
  • t:訪問權利,包括創建、增、刪、改、查等
  • P:謂詞,即擁有權利需要滿足的條件

四、自主安全性的兩種實現方式

1. 存儲矩陣

①只包含S、O、t,不能表達P

技術分享圖片

2. 視圖

①包含S、O、t、P,因為視圖可將數據訪問對象與謂詞結合起來

②可以限制用戶訪問和操作關系中的哪些數據,如定義不同的視圖給不同的用戶來使用

五、利用SQL語言實現自主安全性

1. SQL中的用戶分級

①超級用戶:DBA

②賬戶級別:程序員

③關系級別:普通用戶

2. SQL中的權利分級

①1級(讀):select

②2級(更新):insert、update、delete

③3級(創建):create、alter、drop

註:級別高的權利自動包含級別低的權利,一般將級別3的權利稱為賬戶級別的權利,而將級別1和2的權利稱為關系級別的權利。

3. 授權命令

grant {all privileges | privilege [, privilege ... ]} on [table] 表名 | 視圖名

to {public | user-id [, user-id ... ]} [with grant option];

①privilege可以是select、insert、update、delete

②user-id是某一個由DBA創建的用戶賬號,而public則是所有有效用戶

③with grant option選項表示允許被授權者傳播這些權利

④授予的權利必須是授權者已擁有的權利

【示例】現有一關系Employee(P#, Pname, Page, Psex, Psalary, D#, HEAD),並創建了4個視圖EmpV1、EmpV2、EmpV3、EmpV4,現假定高級領導為Emp0001,部門領導為Emp0021,員工管理員為Emp2001,收發員為Emp5001(均為UserId, 也即員工的P#):

  • createEmpV1asselect*fromEmployee;
  • createEmpV2asselectPname,D#fromEmployee;
  • createEmpV3asselect*fromEmployeewhereP#=UserId;
  • createEmpV4asselect*fromEmployeewhereHead=UserId;
  • grant all priviledges on Employee to Emp2001; // 授予Emp2001“所有權利”去訪問Employee表
  • grant select on EmpV2 to Emp5001 ; // 授予Emp5001“select”權利去訪問視圖EmpV2
  • grant select on EmpV3 to public; // 授予public“select”權利去訪問視圖EmpV3
  • grant select on EmpV4 to Emp0021; // 授予Emp0021“select”權利去訪問視圖EmpV4
  • 上面4條grant語句就是授權(grant)機制與視圖結合而實現自主安全性的典例

4. 收回授權命令

revoke {all privileges | privilege [, privilege ... ]} on [table] 表名 | 視圖名 from {public | user-id [, user-id ... ]};

  • 示例:revoke select on Employee from UserB;

第13講:數據庫安全性