SQL SERVE 的資料庫安全性研究
摘要:針對目前面臨的資料庫安全問題,文章從資料庫系統的安全模型入手,對SqlSever資料庫的安全配置進行描述,分析討論了SQL SERVER資料庫使用中的安全問題,針對不同的使用者分析了可能存在的安全問題,並提出了一些具體的解決方法和建議,從而提高使用者對資料庫安全防範意識。
關鍵詞:SQL Server;資料庫;資料庫安全;訪問控制
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-2374(2009)02-0037-02
關鍵詞:SQL Server;資料庫;資料庫安全;訪問控制
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-2374(2009)02-0037-02
SQL Server是微軟公司開發和推廣的資料庫管理系統(DBMS),在Windows NT或Windows2000下執行,是一個客戶朋艮務器關係式資料庫系統。由於SQL Server實現和管理資料庫應用程式最為容易,是設計中、小型資料庫的首選工具,在各個方面得到了廣泛的應用。
一、SQL SERVER中的安全性問題
(一)模型中的資料庫人口
資料庫的使用者可以分成三類:一般的使用者,管理員(包括資料庫庫管理員和系統管理員)程式設計師。不同的資料庫使用者進人資料庫的人口也是不同的。
一般的使用者(資料庫應用程式的使用者)是從模型中的最外圍一使用者來訪問、存取、控制資料庫的。使用者標識和鑑別是模型提供的最外層的安全包保護措施。從技術角度講,這個人口是最安全的。資料庫的安全性由程式保證。這就要求程式程式碼的健壯性和安全性。由於程式程式碼的問題導致的資料庫安全性早已引起重視。很多文獻列出的注入SQL攻擊就是程式程式碼引起的,這些問題,程式設計師在編寫程式碼的過程要注意。從管理角度講,使用者名稱和口令要保密。只要使用者的許可權不是很高,即使洩漏了,也只是當前使用者對應得外模式資料,對整個資料庫來講,這種威脅並不是致命的。
管理員(資料庫及資料庫應用系統的管理員。包括資料庫庫管理員和系統管理員)的安全性是至關重要的,他可以從模型的任意一層進入資料庫,從第1層使用者進入的話,安全問題和一般使用者一樣。從第2層資料庫管理進入的話,要特別注意,這個時候管理員的許可權很大,安全問題很突出。一般管理員(區別於超級管理員)不能直接在資料庫伺服器上通過DBMS進人資料庫。
程式設計師(資料庫應用程式的開發者)因為其特殊性,在應用系統開發的過程中,和資料庫管理員一樣,可以從OS,DBMS和使用者進入資料庫。甚至有時候是以超級管理員的身份進入資料庫的,這就使得資料庫的安全問題尤為突出,另外,程式設計師在資料庫應用程式正常使用以後,其身份又只相當於一般的使用者,甚至沒有操作的許可權,那麼從管理員、甚至是超級管理員身份變成一般使用者的過程中,使用者和密碼的洩露、傳播,資料庫操作許可權的過大都給資料庫的正確、安全執行帶來影響,甚至是致命的問題。
(二)存取控制
資料庫安全最重要的一點就是確保只授權給有資格的使用者訪問資料庫的許可權,同時令所有未被授權的人員無法接近資料,這就是資料庫系統的存取控制機制。從資料庫安全的技術角度來看,MS SQL SERVER2000用使用者許可權定義和合法許可權檢查機制保證了系統的安全性,但是在資料庫管理層面上,往往是使用者許可權分配和使用過程中的擴大化和濫用,導致存取控制形同虛設.造成安全隱患。下面是實際使用MS SQL SERVER2000中的問題:
1.MS SQL SERVER2000有一個SA的預設,很多資料庫使用者直接用的就是這個使用者,這樣,也就是說不管當前的資料庫使用者真正訪問和運算元據庫的許可權有多大,一律賦予超級使用者許可權,可以訪問和運算元據庫的所有資料,存取控制形同虛設,資料庫從一定程度上就完全不安全。
2.某些情況下,為方便管理,超級使用者會新建使用者,但賦予新建使用者的許可權過大,有些甚至具有超級使用者的許可權,這樣存取控制同樣形同虛設。
3.對重要的資料庫管理員沒有密碼或弱密碼,MS SQLSERVER2000預設安裝,SA的密碼為空,一些使用者會取像“1234”這樣一些密碼,這就是弱密碼,同樣其他超級使用者也存在沒有密碼或弱密碼的情況,這樣很容易遭受攻擊,等於把SA交給所有能連線計算機的人員。
4.對於上述的三種情況,因為存取控制的形同虛設不僅帶來資料庫的安全問題,還能帶來整個計算機系統的安全性問題。MSSQL SERVER中,sa或者其他超級使用者,或者是MASTER的儲存過程執行許可權者,可以通過執行MASTER 中的儲存過程cmd shell execute,增加任意級別的作業系統使用者,從而控制整個計算機系統,進行任意的破壞。具體操作步驟:
STEPh以SA使用者登陸資料庫伺服器;STEP2:執行儲存過程MASTER。CMD—SHELL—EXECUTE“NET ADD USERNAME PASSWORD/USERE”:STEP3: 執行儲存過程MASTER.CMD_SHELL—EXECUTE“NET ADD USERNAME ADMINISTRATOR/GROUP”:STE P4:用新增加超級使用者進入伺服器作業系統。
二、SQL Sewer資料庫訪問控制策略
訪問控制(access contro1)是對使用者訪問資料庫各種資源的權力的控制。SQL Server對使用者的訪問控制分為兩個階段:一是安全帳戶認證。二是訪問許可認證。在安全帳戶認證階段。Windows作業系統或SQL Server對使用者登入進行認證。如果認證成功,使用者則可連線到SQL Server,否則資料庫伺服器將拒絕使用者的連線請求訪問許可確認指的是使用者成功連線到SQL Server後。系統根據資料庫中儲存的與伺服器登入標識相對應的使用者帳戶來判斷他們是否擁有對資料庫的訪問許可。
(一)SQL Server的安全帳戶認證模式
SQL Server伺服器安全認證有以下兩種模式:Windows認證模式和Windows與SQL Server混合認證模式。Windows認證更為安全。因為Windows作業系統具有較高的安全性(C2級安全標準)。SQL Server認證管理較為簡單,當SQL Server在Windows NT或Windows2000上執行時,系統管理員必須制定系統使用的認證模式。當採用混合認證模式時,SQL Server既允許使用Windows認證模式又允許使用SQL Server認證模式。
在完成SQL Server安裝以後,SQL Server就建立了一個特殊帳戶sa。sa是系統管理員(System Administrator)的簡稱,sa帳戶擁有最高的管理許可權,可以執行伺服器範圍內的所有操作,既不能更改sa使用者名稱稱,也不能刪除sa,但可以更改其密碼。在剛剛完成SQL Server的安裝時候,sa帳戶沒有任何密碼,所以要儘快為其設定密碼。
(二)訪問許可確認
使用者在實現安全登入之後,檢驗使用者的下一個安全等級是資料庫訪問許可權。資料庫的訪問許可權是通過對映資料庫的使用者和登入帳戶之間的關係來實現。安全帳戶認證決定使用者能否向SQL Server傳送命令,而訪問許可權確認則決定使用者能否在資料庫中執行T—SQL語句。
三、合理分配許可權
實施安全策略的最後一個步驟是建立使用者定義的資料庫角色,然後分配許可權。完成這個步驟最簡單的方法是建立一些名字與全域性組名字配套的角色。例如對於前面例子中的會計系統,我們可以建立Accounting Data Entry Opera.tOrs、Accounting Data Entry Managers之類的角色。由於會計資料庫中的角色與帳務處理任務有關,你可能想要縮短這些角色的名字。然而,如果角色名字與全域性組的名字配套,你可以減少混亂,能夠更方便地判斷出哪些組屬於特定的角色。建立好角色之後就可以分配許可權。在這個過程中,我們只需用到標準的GRANT、REVOKE和DENY命令。但應該注意DENY許可權,這個許可權優先於所有其他許可權。如果使用者是任意具有DENY許可權的角色或者組的成員,SQLServer將拒絕使用者訪問物件。接下來就可以加入所有SQL Server驗證的登入。使用者定義的資料庫角色可以包含SQL Server登入以及NT全域性組、本地組、個人帳戶,這是它最寶貴的特點之一。使用者定義的資料庫角色可以作為各種登入的通用容器,我們使用使用者定義角色而不是直接把許可權分配給全域性組的主要原因就在於此。
由於內建的角色一般適用於整個資料庫而不是單獨的物件,因此這裡建議你只使用兩個內建的資料庫角色,即db— securityadmin和db—owner。其他內建資料庫角色,例如db—datareader,它授予對資料庫裡面所有物件的sE.LECT許可權。雖然你可以用db—datareader角色授予sE.LECT許可權,然後有選擇地對個別使用者或組拒絕SELECT許可權,但使用這種方法時,你可能忘記為某些使用者或者物件設定許可權。一種更簡單、更直接而且不容易出現錯誤的方法是為這些特殊的使用者建立一個使用者定義的角色,然後只把那些使用者訪問物件所需要的許可權授予這個使用者定義的角色。
本文介紹了SQL Server資料庫的安全機制,在實際應用中的有關安全性設定,包括Windows2000作業系統安全設定、網路安全設定、MS SQL Server2000的安全設定知識等安全方法,並提出了一些安全措施,對於提高SQL Server資料庫的安全性有比較好的效果,對中、小型資料庫的設計有一定的借鑑意義。
參考文獻
[1]劉啟原,劉怡.資料庫與資訊系統的安全[M].科學出版社,2000.
[2]李海泉.李健.計算機網路安全與加密技術[M].科學出版社.2001.
[3]曹效陽.淺談SQL Server中的安全策略[J].現代計算機,2006,(l).
一、SQL SERVER中的安全性問題
(一)模型中的資料庫人口
資料庫的使用者可以分成三類:一般的使用者,管理員(包括資料庫庫管理員和系統管理員)程式設計師。不同的資料庫使用者進人資料庫的人口也是不同的。
一般的使用者(資料庫應用程式的使用者)是從模型中的最外圍一使用者來訪問、存取、控制資料庫的。使用者標識和鑑別是模型提供的最外層的安全包保護措施。從技術角度講,這個人口是最安全的。資料庫的安全性由程式保證。這就要求程式程式碼的健壯性和安全性。由於程式程式碼的問題導致的資料庫安全性早已引起重視。很多文獻列出的注入SQL攻擊就是程式程式碼引起的,這些問題,程式設計師在編寫程式碼的過程要注意。從管理角度講,使用者名稱和口令要保密。只要使用者的許可權不是很高,即使洩漏了,也只是當前使用者對應得外模式資料,對整個資料庫來講,這種威脅並不是致命的。
管理員(資料庫及資料庫應用系統的管理員。包括資料庫庫管理員和系統管理員)的安全性是至關重要的,他可以從模型的任意一層進入資料庫,從第1層使用者進入的話,安全問題和一般使用者一樣。從第2層資料庫管理進入的話,要特別注意,這個時候管理員的許可權很大,安全問題很突出。一般管理員(區別於超級管理員)不能直接在資料庫伺服器上通過DBMS進人資料庫。
程式設計師(資料庫應用程式的開發者)因為其特殊性,在應用系統開發的過程中,和資料庫管理員一樣,可以從OS,DBMS和使用者進入資料庫。甚至有時候是以超級管理員的身份進入資料庫的,這就使得資料庫的安全問題尤為突出,另外,程式設計師在資料庫應用程式正常使用以後,其身份又只相當於一般的使用者,甚至沒有操作的許可權,那麼從管理員、甚至是超級管理員身份變成一般使用者的過程中,使用者和密碼的洩露、傳播,資料庫操作許可權的過大都給資料庫的正確、安全執行帶來影響,甚至是致命的問題。
(二)存取控制
資料庫安全最重要的一點就是確保只授權給有資格的使用者訪問資料庫的許可權,同時令所有未被授權的人員無法接近資料,這就是資料庫系統的存取控制機制。從資料庫安全的技術角度來看,MS SQL SERVER2000用使用者許可權定義和合法許可權檢查機制保證了系統的安全性,但是在資料庫管理層面上,往往是使用者許可權分配和使用過程中的擴大化和濫用,導致存取控制形同虛設.造成安全隱患。下面是實際使用MS SQL SERVER2000中的問題:
1.MS SQL SERVER2000有一個SA的預設,很多資料庫使用者直接用的就是這個使用者,這樣,也就是說不管當前的資料庫使用者真正訪問和運算元據庫的許可權有多大,一律賦予超級使用者許可權,可以訪問和運算元據庫的所有資料,存取控制形同虛設,資料庫從一定程度上就完全不安全。
2.某些情況下,為方便管理,超級使用者會新建使用者,但賦予新建使用者的許可權過大,有些甚至具有超級使用者的許可權,這樣存取控制同樣形同虛設。
3.對重要的資料庫管理員沒有密碼或弱密碼,MS SQLSERVER2000預設安裝,SA的密碼為空,一些使用者會取像“1234”這樣一些密碼,這就是弱密碼,同樣其他超級使用者也存在沒有密碼或弱密碼的情況,這樣很容易遭受攻擊,等於把SA交給所有能連線計算機的人員。
4.對於上述的三種情況,因為存取控制的形同虛設不僅帶來資料庫的安全問題,還能帶來整個計算機系統的安全性問題。MSSQL SERVER中,sa或者其他超級使用者,或者是MASTER的儲存過程執行許可權者,可以通過執行MASTER 中的儲存過程cmd shell execute,增加任意級別的作業系統使用者,從而控制整個計算機系統,進行任意的破壞。具體操作步驟:
STEPh以SA使用者登陸資料庫伺服器;STEP2:執行儲存過程MASTER。CMD—SHELL—EXECUTE“NET ADD USERNAME PASSWORD/USERE”:STEP3: 執行儲存過程MASTER.CMD_SHELL—EXECUTE“NET ADD USERNAME ADMINISTRATOR/GROUP”:STE P4:用新增加超級使用者進入伺服器作業系統。
二、SQL Sewer資料庫訪問控制策略
訪問控制(access contro1)是對使用者訪問資料庫各種資源的權力的控制。SQL Server對使用者的訪問控制分為兩個階段:一是安全帳戶認證。二是訪問許可認證。在安全帳戶認證階段。Windows作業系統或SQL Server對使用者登入進行認證。如果認證成功,使用者則可連線到SQL Server,否則資料庫伺服器將拒絕使用者的連線請求訪問許可確認指的是使用者成功連線到SQL Server後。系統根據資料庫中儲存的與伺服器登入標識相對應的使用者帳戶來判斷他們是否擁有對資料庫的訪問許可。
(一)SQL Server的安全帳戶認證模式
SQL Server伺服器安全認證有以下兩種模式:Windows認證模式和Windows與SQL Server混合認證模式。Windows認證更為安全。因為Windows作業系統具有較高的安全性(C2級安全標準)。SQL Server認證管理較為簡單,當SQL Server在Windows NT或Windows2000上執行時,系統管理員必須制定系統使用的認證模式。當採用混合認證模式時,SQL Server既允許使用Windows認證模式又允許使用SQL Server認證模式。
在完成SQL Server安裝以後,SQL Server就建立了一個特殊帳戶sa。sa是系統管理員(System Administrator)的簡稱,sa帳戶擁有最高的管理許可權,可以執行伺服器範圍內的所有操作,既不能更改sa使用者名稱稱,也不能刪除sa,但可以更改其密碼。在剛剛完成SQL Server的安裝時候,sa帳戶沒有任何密碼,所以要儘快為其設定密碼。
(二)訪問許可確認
使用者在實現安全登入之後,檢驗使用者的下一個安全等級是資料庫訪問許可權。資料庫的訪問許可權是通過對映資料庫的使用者和登入帳戶之間的關係來實現。安全帳戶認證決定使用者能否向SQL Server傳送命令,而訪問許可權確認則決定使用者能否在資料庫中執行T—SQL語句。
三、合理分配許可權
實施安全策略的最後一個步驟是建立使用者定義的資料庫角色,然後分配許可權。完成這個步驟最簡單的方法是建立一些名字與全域性組名字配套的角色。例如對於前面例子中的會計系統,我們可以建立Accounting Data Entry Opera.tOrs、Accounting Data Entry Managers之類的角色。由於會計資料庫中的角色與帳務處理任務有關,你可能想要縮短這些角色的名字。然而,如果角色名字與全域性組的名字配套,你可以減少混亂,能夠更方便地判斷出哪些組屬於特定的角色。建立好角色之後就可以分配許可權。在這個過程中,我們只需用到標準的GRANT、REVOKE和DENY命令。但應該注意DENY許可權,這個許可權優先於所有其他許可權。如果使用者是任意具有DENY許可權的角色或者組的成員,SQLServer將拒絕使用者訪問物件。接下來就可以加入所有SQL Server驗證的登入。使用者定義的資料庫角色可以包含SQL Server登入以及NT全域性組、本地組、個人帳戶,這是它最寶貴的特點之一。使用者定義的資料庫角色可以作為各種登入的通用容器,我們使用使用者定義角色而不是直接把許可權分配給全域性組的主要原因就在於此。
由於內建的角色一般適用於整個資料庫而不是單獨的物件,因此這裡建議你只使用兩個內建的資料庫角色,即db— securityadmin和db—owner。其他內建資料庫角色,例如db—datareader,它授予對資料庫裡面所有物件的sE.LECT許可權。雖然你可以用db—datareader角色授予sE.LECT許可權,然後有選擇地對個別使用者或組拒絕SELECT許可權,但使用這種方法時,你可能忘記為某些使用者或者物件設定許可權。一種更簡單、更直接而且不容易出現錯誤的方法是為這些特殊的使用者建立一個使用者定義的角色,然後只把那些使用者訪問物件所需要的許可權授予這個使用者定義的角色。
本文介紹了SQL Server資料庫的安全機制,在實際應用中的有關安全性設定,包括Windows2000作業系統安全設定、網路安全設定、MS SQL Server2000的安全設定知識等安全方法,並提出了一些安全措施,對於提高SQL Server資料庫的安全性有比較好的效果,對中、小型資料庫的設計有一定的借鑑意義。
參考文獻
[1]劉啟原,劉怡.資料庫與資訊系統的安全[M].科學出版社,2000.
[2]李海泉.李健.計算機網路安全與加密技術[M].科學出版社.2001.
[3]曹效陽.淺談SQL Server中的安全策略[J].現代計算機,2006,(l).
作者簡介:朱敏(1976-),男,供職於溫州市公安局鹿城區分局。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-630028/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL:資料庫的安全性SQL資料庫
- 關於SQL Serve資料庫r帳號被禁用的處理方法SQL資料庫
- SQL Serve2000 r資料庫效能優化技術SQL資料庫優化
- 資料庫安全性資料庫
- 資料庫實驗五 資料庫的安全性資料庫
- SQL語言與資料庫完整性和安全性SQL資料庫
- standby資料庫的研究!資料庫
- 提高資料庫安全性的辦法資料庫
- 資料庫安全性操作——操作原則及SQL隱碼攻擊資料庫SQL
- Oracle資料庫系統的安全性(轉)Oracle資料庫
- SQL資料庫SQL資料庫
- 隔牆有耳之資料庫的安全性資料庫
- SQL Serve 2005中的系統架構SQL架構
- 資料庫——慢sql的原因資料庫SQL
- 資料庫常用的sql語句大全--sql資料庫SQL
- SQL:清空資料庫所有資料SQL資料庫
- 提高AIX的安全性研究AI
- 研究資料庫-如何使用mybatis資料庫MyBatis
- SQL資料庫中Truncate的用法SQL資料庫
- Sql連結資料庫的用法SQL資料庫
- 監控資料庫效能的SQL資料庫SQL
- 常用的檢視資料庫的SQL資料庫SQL
- Sql Server 資料庫學習-常用資料庫 物件SQLServer資料庫物件
- SQL Server資料庫安全SQLServer資料庫
- 資料庫-SQL 語法資料庫SQL
- 資料庫優化SQL資料庫優化SQL
- 【資料庫】SQL語句資料庫SQL
- 資料庫效能 常用SQL資料庫SQL
- SQL Azure雲資料庫SQL資料庫
- SQL Server 資料庫映象SQLServer資料庫
- SQL Server 資料庫索引SQLServer資料庫索引
- 資料庫雲--sql雲資料庫SQL
- 資料庫映象 (SQL Server)資料庫SQLServer
- 資料庫_SQL-MongoDB資料庫SQLMongoDB
- 資料庫_SQL-PostgreSQL資料庫SQL
- Gartner對開源資料庫的研究(轉)資料庫
- 【資料庫資料恢復】Sql Server資料庫資料恢復案例資料庫資料恢復SQLServer
- 【SQL】18 SQL NULL 函式、SQL 通用資料型別、SQL 用於各種資料庫的資料型別SQLNull函式資料型別資料庫