安全性控制的層次結構
Sybase數據庫為開發者提供了有效的安全性控制策略,既注重數據訪問的安全性和監督用戶的登錄,又兼顧了用戶在使用數據時對速度的要求。Sybase中的安全性是依靠分層解決的,它的安全措施也是一級一級層層設置的,真正做到了層層設防。第一層是注冊和用戶許可,保護對服務器的基本存取;第二層是存取控制,對不同用戶設定不同的權限,使數據庫得到最大限度的保護;第三層是增加限制數據存取的視圖和存儲過程,在數據庫與用戶之間建立一道屏障。
安全性問題的基本原則
Sybase基於上述層次結構的安全體系,提出以下幾點實施安全的原則:
1、選擇性訪問控制(Discretionary Access Controls DAC),DAC用來決定用戶是否有權訪問數據庫對象;
2、驗證,驗證就是保證只有授權的合法用戶才能注冊和訪問;
3、授權,對不同的用戶訪問數據庫授予不同的權限;
4、審計,監視系統發生的一切事件。
Sybase的安全控制策略
基於上述四點原則,Sybase提供了四種基本策略進行安全性控制。
在創建服務器時,Sybase將所有權限都分配給系統管理員,系統管理員可以在服務器上增加注冊者(Logins)(只有系統管理員有此權限)。Logins可以登錄服務器但不能訪問數據庫。數據庫屬主(DBO)有權增加用戶(users),users可以使用分配給它的數據庫。當users訪數據庫時,首先以Logins身份進入服務器,系統自動打開默認數據庫,Logins身份轉化為users身份。
在用戶登錄後,系統要通過口令進行驗證,以防止非法用戶盜用他人的用戶名進行登錄。這一驗證步驟在登錄時的注冊對話框中出現,注冊與驗證同時進行,用戶名與口令有一個不符,登錄請求被拒絕。
權限使得用戶在數據庫中活動范圍僅被容許在小范圍內,大大提高了數據庫的安全性。在Sybase系統中,對象的所有者或創建者自動被授予對對象的許可權。所有者則有權決定把許可權授予其他用戶。Sybase提供了GRANT和REVOKE命令,以便授予或取消許可權。數據庫所有者和系統管理員享有特殊許可權,包括數據庫所有者(Database Owner,DBO)對自己所擁有的數據庫中的一切對象具有全部許可權;系統管理員(System Administrantion,SA)享有服務器內的所有數據庫的一切對象的許可權。
Sybase提供了Audit Server,它是能夠全面審計跟蹤服務器上一切活動的工具,在某些情況下,我們難以阻止非法操作的發生,但至少可以監視非法操作,並采取跟蹤措施,找出非法執行操作的人。
除了以上四點基本策略,Sybase數據庫中還提供了兩種對象——視圖和存儲過程用於增強系統的安全性。
視圖和存儲過程像數據庫中的其他對象,也要進行權限設定,這樣用戶只能取得對視圖和存儲過程的授權,而無法訪問底層表。視圖可以限制底層表的可見列,從而限制用戶能查詢的數據列的種類,還能通過應用Where子句限制表返回的行。
下面以具體實例說明Sybase的安全性控制策略。假設開發一個新項目,需要建一個服務器,命名為Server,系統自動產生SA,並要求輸入口令(在此我們均假設口令為Null)。SA通過Logins對話框(或用SQL語句)為服務器增加注冊Logins,則Logins有權訪問Sybase,SA創建數據庫DB(SA在數據庫DB中的身份為數據庫所有者DBO),同時創建兩個用戶USER1(設置登錄名為Login,默認服務器為DB)和USER2這兩個用戶只能訪問數據庫DB。DB中有兩張表TABLE1(COLUMN1 INT,COLUMN2 CHAR(5))和TABLE 2。
USER1要訪問DB時,首先以Login登錄服務器,默認數據庫DB被打開,Login的身份就會化為USER-1。在完成了登錄和驗證後,我們可以通過授權進行安全性控制。授權命令要由數據庫屬主SA發出:GRANT ALL ON TABLE-1,TABLE-2 TO USER-1則USER-1擁有對TABLE-1,TABLE-2的所有權限。當然,SA也可以收回權限:REVODE DELETE ON TABLE1 FROM USER-1,樣,USER-1就不能對TABLE-1進行刪除操作。
視圖和存儲過程就象架設在用戶與底層表之間的一道橋梁,用戶只能對視圖和存儲過程進行操作,而無法直接訪問底層表。下面創建一個視圖人為例子。
CREATE VIEW VIEW-1 AS SELECT COLUMN-1 FROM TABLE-1 GRANT ALL ON VIEW-1 TO USER-2
USER-2通過VIEW-1可以訪問COLUMN-1而無法訪問COLUMN-2,這就是VIEW-1的屏作用。再用存儲過程舉一個屏蔽行的例子。
CREATE PROCEDURE PROC-1 AS SELECT FROM TABLE-1 WHERE (COLUMN-11) GRANT EXECUTE ON PROC-1 TO USER-2
當用戶查詢時,只能看到COLUMN-1列值為1的行,其他行已經被PROC-1屏蔽掉了。