看來我得好好檢討了,畢竟本身在中學時代 也是個「黑客愛好者」,曾混跡於各大黑客論壇,網站聯盟等。入侵者慣用的那些手法和思路,我仍是很是熟悉的,雖然有幾年沒有接觸了。分析一下個人失 誤:1.安裝系統的時候,隨便指定了管理員,並給了空口令。2.沒有檢查防火牆,安全策略,殺毒軟件等(認爲本身至少在曾經是很懂安全的,估計沒人敢惹 我,應該沒事的)。3.安裝數據庫的先後,沒有作任何的安全控制,例如用戶,權限等。就連sa用戶,爲了圖個方便快速,也隨便給了弱口令。o(∩_∩)o 哈哈。今天就總結一下sqlserver的安全相關問題(注意:暫時不討論sql注入方面的知識,由於我以爲sql注入更接近「腳本安全」,和程序員更加 關係密切。我今天說的,可能更適合於系統管理員或者DBA)程序員
數 據庫是電子商務、金融以及ERP系統的基礎,一般都保存着重要的商業夥伴和客戶信息。大多數企業、組織以及政府部門的電子數據都保存在各類數據庫中,他們 用這些數據庫保存一些我的資料,好比員工薪水、我的資料等等。數據庫服務器還掌握着敏感的金融數據。包括交易記錄、商業事務和賬號數據,戰略上的或者專業 的信息,好比專利和工程數據,甚至市場計劃等等應該保護起來防止競爭者和其餘非法者獲取的資料。數據完整性和合法存取會受到不少方面的安全威脅,包括密碼 策略、系統後門、數據庫操做以及自己的安全方案。可是數據庫一般沒有象操做系統和網絡這樣在安全性上受到重視。
微軟的SQL Server是一種普遍使用的數據庫,不少電子商務網站、企業內部信息化平臺等都是基於SQL Server上的,可是數據庫的安全性尚未被人們更系統的安全性等同起來,多數管理員認爲只要把網絡和操做系統的安全搞好了,那麼全部的應用程序也就安 全了。大多數系統管理員對數據庫不熟悉而數據庫管理員有對安全問題關心太少,並且一些安全公司也忽略數據庫安全,這就使數據庫的安全問題更加嚴峻了。數據 庫系統中存在的安全漏洞和不當的配置一般會形成嚴重的後果,並且都難以發現。數據庫應用程序一般同操做系統的最高管理員密切相關。普遍SQL Server數據庫又是屬於「端口」型的數據庫,這就表示任何人都可以用分析工具試圖鏈接到數據庫上,從而繞過操做系統的安全機制,進而闖入系統、破壞和 竊取數據資料,甚至破壞整個系統。
這裏,咱們主要談論有關SQL Server2000數據庫的安全配置以及一些相關的安全和使用上的問題。
在 進行SQL Server 2000數據庫的安全配置以前,首先你必須對操做系統進行安全配置,保證你的操做系統處於安全狀態。而後對你要使用的操做數據庫軟件(程序)進行必要的安 全審覈,好比對ASP、PHP等腳本,這是不少基於數據庫的WEB應用常出現的安全隱患,對於腳本主要是一個過濾問題,須要過濾一些相似 , ‘ ; @ / 等字符,防止破壞者構造惡意的SQL語句。接着,安裝SQL Server2000後請打上補丁sp1以及最新的sp2。
下載地址是:http://www.microsoft.com/sql/downloads/2000/sp1.asp 和 http://www.microsoft.com/sql/downloads/2000/sp2.asp
在作完上面三步基礎以後,咱們再來討論SQL Server的安全配置。
一、使用安全的密碼策略
咱們把密碼策略擺在全部安全配置的第一步,請注意,不少數據庫賬號的密碼過於簡單,這跟系統密碼過於簡單是一個道理。對於sa更應該注意,同時不要讓sa賬號的密碼寫於應用程序或者腳本中。健壯的密碼是安全的第一步!
SQL Server2000安裝的時候,若是是使用混合模式,那麼就須要輸入sa的密碼,除非你確認必須使用空密碼。這比之前的版本有所改進。
同時養成按期修改密碼的好習慣。數據庫管理員應該按期查看是否有不符合密碼要求的賬號。好比使用下面的SQL語句:
Use master
Select name,Password from syslogins where password is null
二、使用安全的賬號策略
由 於SQL Server不能更改sa用戶名稱,也不能刪除這個超級用戶,因此,咱們必須對這個賬號進行最強的保護,固然,包括使用一個很是強壯的密碼,最好不要在數 據庫應用中使用sa賬號,只有當沒有其它方法登陸到 SQL Server 實例(例如,當其它系統管理員不可用或忘記了密碼)時才使用 sa。建議數據庫管理員新創建一個擁有與sa同樣權限的超級用戶來管理數據庫。安全的賬號策略還包括不要讓管理員權限的賬號氾濫。
SQL Server的認證模式有Windows身份認證和混合身份認證兩種。若是數據庫管理員不但願操做系統管理員來經過操做系統登錄來接觸數據庫的話,能夠在 賬號管理中把系統賬號「BUILTIN/Administrators」刪除。不過這樣作的結果是一旦sa賬號忘記密碼的話,就沒有辦法來恢復了。
不少主機使用數據庫應用只是用來作查詢、修改等簡單功能的,請根據實際須要分配賬號,並賦予僅僅可以知足應用要求和須要的權限。好比,只要查詢功能的,那麼就使用一個簡單的public賬號可以select就能夠了。
三、增強數據庫日誌的記錄
審覈數據庫登陸事件的「失敗和成功」,在實例屬性中選擇「安全性」,將其中的審覈級別選定爲所有,這樣在數據庫系統和操做系統日誌裏面,就詳細記錄了全部賬號的登陸事件。
請按期查看SQL Server日誌檢查是否有可疑的登陸事件發生,或者使用DOS命令。
findstr /C:"登陸" d:/Microsoft SQL Server/MSSQL/LOG/*.*
四、管理擴展存儲過程
對 存儲過程進行大手術,而且對賬號調用擴展存儲過程的權限要慎重。其實在多數應用中根本用不到多少系統的存儲過程,而SQL Server的這麼多系統存儲過程只是用來適應廣大用戶需求的,因此請刪除沒必要要的存儲過程,由於有些系統的存儲過程能很容易地被人利用起來提高權限或進 行破壞。
若是你不須要擴展存儲過程xp_cmdshell請把它去掉。使用這個SQL語句:
use master
sp_dropextendedproc 'xp_cmdshell'
xp_cmdshell是進入操做系統的最佳捷徑,是數據庫留給操做系統的一個大後門。若是你須要這個存儲過程,請用這個語句也能夠恢復過來。
sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'
若是你不須要請丟棄OLE自動存儲過程(會形成管理器中的某些特徵不能使用),這些過程包括以下:
Sp_OACreate Sp_OADestroy Sp_OAGetErrorInfo Sp_OAGetProperty
Sp_OAMethod Sp_OASetProperty Sp_OAStop
去掉不須要的註冊表訪問的存儲過程,註冊表存儲過程甚至可以讀出操做系統管理員的密碼來,以下:
Xp_regaddmultistring Xp_regdeletekey Xp_regdeletevalue Xp_regenumvalues
Xp_regread Xp_regremovemultistring Xp_regwrite
還有一些其餘的擴展存儲過程,你也最好檢查檢查。
在處理存儲過程的時候,請確認一下,避免形成對數據庫或應用程序的傷害。
五、使用協議加密
SQL Server 2000使用的Tabular Data Stream協議來進行網絡數據交換,若是不加密的話,全部的網絡傳輸都是明文的,包括密碼、數據庫內容等等,這是一個很大的安全威脅。能被人在網絡中截 獲到他們須要的東西,包括數據庫賬號和密碼。因此,在條件允許狀況下,最好使用SSL來加密協議,固然,你須要一個證書來支持。
六、不要讓人隨便探測到你的TCP/IP端口
默 認狀況下,SQL Server使用1433端口監聽,不少人都說SQL Server配置的時候要把這個端口改變,這樣別人就不能很容易地知道使用的什麼端口了。惋惜,經過微軟未公開的1434端口的UDP探測能夠很容易知道 SQL Server使用的什麼TCP/IP端口了。
不過微軟仍是考慮到了這個問題,畢竟公開並且開放的端口會引發沒必要要的麻 煩。在實例屬性中選擇TCP/IP協議的屬性。選擇隱藏 SQL Server 實例。若是隱藏了 SQL Server 實例,則將禁止對試圖枚舉網絡上現有的 SQL Server 實例的客戶端所發出的廣播做出響應。這樣,別人就不能用1434來探測你的TCP/IP端口了(除非用Port Scan)。
七、修改TCP/IP使用的端口
請在上一步配置的基礎上,更改原默認的1433端口。在實例屬性中選擇網絡配置中的TCP/IP協議的屬性,將TCP/IP使用的默認端口變爲其餘端口。
八、拒絕來自1434端口的探測
因爲1434端口探測沒有限制,可以被別人探測到一些數據庫信息,並且還可能遭到DOS攻擊讓數據庫服務器的CPU負荷增大,因此對Windows 2000操做系統來講,在IPSec過濾拒絕掉1434端口的UDP通信,能夠儘量地隱藏你的SQL Server。
九、對網絡鏈接進行IP限制
SQL Server 2000數據庫系統自己沒有提供網絡鏈接的安全解決辦法,可是Windows 2000提供了這樣的安全機制。使用操做系統本身的IPSec能夠實現IP數據包的安全性。請對IP鏈接進行限制,只保證本身的IP可以訪問,也拒絕其餘 IP進行的端口鏈接,把來自網絡上的安全威脅進行有效的控制。
關於IPSec的使用請參看:http://www.microsoft.com/china/technet/security/ipsecloc.asp
上面主要介紹的一些SQL Server的安全配置,通過以上的配置,可讓SQL Server自己具有足夠的安全防範能力。固然,更主要的仍是要增強內部的安全控制和管理員的安全培訓,並且安全性問題是一個長期的解決過程,還須要之後進行更多的安全維護。sql