袁 勇
[摘要]SQL Server是微軟公司推出的關系數據庫管理系統,很多電子商務網站、企業內部信息化平臺等都是建立在SQL Server數據庫基礎之上。為防止不合法的使用所造成的數據泄露、更改或破壞,微軟公司建立一套靈活強大的安全管理機制。但再完美的系統都可能存在漏洞,或是使用者安全意識不強而帶來系統運行過程的不安全性。安全使用SQL Server數據庫,必須采取補丁策略、防范SQL注入攻擊策略和網絡連接策略。
[關鍵詞]計算機安全數據庫SQL SERVER
中圖分類號:TP3文獻標識碼:A文章編號:1671-7597(2009)1110091-01
在計算機安全領域中,人們往往更多地關注系統基礎架,比如討論防火墻、網絡、操作系統、Web服務器、電子郵件服務器和域名服務器的安全性策略,而很少關注數據庫。但實際上,數據庫作為計算機系統的核心部分,是企業、公司、機關的重要信息中心。數據庫才是攻擊者的主要目標。如何加強SQL SERVER數據庫安全是一個很值得探討的問題。
一、關于SQL SERVER數據庫的安全性
SQL Server是微軟公司推出的關系數據庫管理系統,很多電子商務網站、企業內部信息化平臺等都是建立在SQL Server數據庫基礎之上。為了防止不合法的使用所造成的數據泄露、更改或破壞,微軟公司建立了一套靈活強大的安全管理機制。
SQL Server數據庫安全性管理是建立在認證(authentication)和訪問許可(permission)兩者機制上。認證是指來確定登陸SQL Server數據庫的用戶的登陸帳號和密碼是否正確,以此來驗證其是否具有連接SQL Ser
ver數據庫的權限[1]。但是,通過認證階段并不代表能夠訪問SQL Server
數據庫中的數據,用戶只有在獲取訪問數據庫的權限之后,才能夠對服務器上的數據庫進行權限許可下的各種操作,如針對數據庫對象(表、視圖、存儲過程等)進行操作,通過用戶帳號設置來實現這種用戶訪問數據庫權限。在SQL Server數據庫的安全模型中主要包括SQL Server登錄、數據庫用戶、權限、角色。SQL Server的安全控制策略是一個層次結構系統的集合。
二、SQL SERVER數據庫危險來源
雖然微軟在SQL SERVER數據庫系統中建立了較為嚴密的安全管理機制,但再完美的系統都可能存在漏洞,或是使用者安全意識不強而帶來系統運行過程的不安全性。歸納起來,SQL SERVER數據庫的不安全性主要來自兩方面:一方面,由于一些管理員和用戶安全意識薄弱,使數據庫的安全問題。另一方面,系統中存在的安全漏洞和不當的配置也給非法用戶提供了可乘之機,使他們未經授權即闖入系統,破壞和竊取數據,造成嚴重后果。
系統安全漏洞,也叫系統脆弱性(Vulnerability),是計算機系統在硬件、軟件、協議的設計與實現過程中或系統安全策略上存在的缺陷和不足。廣義的系統安全漏洞是一切導致威脅、損壞計算機系統安全的因素。SQL Server數據庫的系統漏洞產生的主要原因都是由于程序員不正確和不安全編程引起的。很多程序員在編程開始時沒有充分考慮到安全問題,在投入使用時,由于用戶不正確的輸入及不恰當的配置都可以導致漏洞的出現。
三、SQL SERVER數據庫安全策略
基于SQL Server數據庫系統運行環境及其漏洞形成原因,我們要針對問題采取以下策略。
(一)補丁策略
SQL Server2000中存在多個安全漏洞,安裝完畢后,應及時安裝或更新最新的補丁。因為攻擊者可能利用這些漏洞,繞過數據庫策略,系統漏洞會泄露敏感信息或執行惡意代碼從而威脅數據庫服務器安全。為了提高服務器安全性,最有效的一個方法就是時常給系統打補丁,將系統升級到Service Pack4(SP4)。同時,應該安裝所有已發布的安全更新,并運行Microsoft Baseline Security Analyzer(MBSA),因為MBSA會通過密碼、訪問權限、訪問控制列表以及注冊等方式查找問題,并找出遺失的安全補丁或服務包。另外,用戶還要注冊微軟的免費安全通知服務,該服務會以電子郵件的形式通知我們有什么侵入安全系統以及如何解決它們。盡管安全補丁或服務包有助于SQL Server數據庫免受許多威脅,但是它們并非“終結者”,對快速運行的安全問題,如蠕蟲攻擊者就有點力不從心了。我們還要做下面幾項工作。
(二)防范SQL注入攻擊策略
SQL注入(SQL injection)是指用戶可以傳遞任意的、特別的(惡意的)代碼,這些代碼通常被添加到有效的SQL代碼中[2],從而對系統進行攻擊。預防SQL注入攻擊的第一步是使用驗證器驗證用戶的輸入。例如,可以限制輸入的長度和類型等,這樣就限制了黑客鍵入字符的字數,從而限制了黑客向服務器發送大量的非法的命令。第二步是對用戶輸入的數據先進行過濾,把單引號和雙引號全部過濾掉,再進行SQL語句的構造,從而大大降低了攻擊者成功的概率。另外,還可以利用參數化存儲過程來訪問數據庫,確保不會將輸入字符串看作是可執行語句。當指定了參數的類型和長度后,如果用戶輸入一個無效的值到當前的數據類型中,則查詢將失敗。如果不能使用存儲過程,在構建SQL命令時要利用SQL參數,這樣,攻擊者就不能使用特殊字符拼接字符串。指定了參數的長度,就能防止大量的數據傳遞到數據庫服務器中。
(三)網絡連接策略
將SQL Server連接到Internet需要考慮更多的安全問題,保證只有經過身份驗證的用戶才可以訪問數據庫服務器,并且只能訪問他們業務流程所需的資源,同時防止黑客們對網上信息進行竊聽、篡改。為此我們要做以下工作。
首先,允許通過Microsoft代理服務器連接到SQL Server。Microsoft
代理服務器是一個提供對Internet進行安全訪問的獨立應用程序,它可以防止未經身份驗證的用戶連接到專用網,并通過控制偵聽端口的權限和訪問來確保敏感數據的安全性。
其次,可以在配置時將該端口改變或者隱藏服務。因為,默認情況下,SQL Server使用1433端口監聽。2002年5月發現的第一個面向SQL server的病毒SQL Snake(又叫Spida)就是通過此端口進入的[3]。另外,由于1434端口探測沒有限制,惡意用戶能夠由它探測到一些數據庫信息,而且還可能遭到DOS攻擊。
最后,要對SQL Server所傳遞的文件加密。因為SQL Server使用Tabu
lar DataStream協議來進行網絡數據交換,如果不加密的話,所有的網絡傳輸都是明文,很容易被非法入侵者截獲到傳輸內容,包括數據庫賬號和密碼,有很大的安全隱患。
參考文獻:
[1]李勁、謝兆陽,SQL Server 2000數據庫設計與系統管理,清華大學出版社,2004.