2013年3月7日 星期四

資料庫使用者最小權限設定

        使用者權限的部份往往因為方便性,常常看到許多的管理者都直接使用SA的帳號進行連線,但萬一系統遭受到如SQL Injection等入侵攻擊時,連帶的直接就讓入侵者直接取得資料庫的最高權限,讓整個資料庫系統停止服務。

有鑑於此本章我們就來介紹如何設定一個最小權限的使用者,藉以提供前端的程式進行連線,一來可以提供更佳的防護,二來更可以社絕資料庫間相互的影嚮所造成的損失。


操作流程:
1、開啟Management Studio。
2、選擇 [Security] -> [Logins] -> [New Login]

3、輸入使用者資訊

3-1 帳號的部份建議使用  Windows Authentication。
3-2 Default Database(預設資料庫)請不要使用預設的 master ,請選擇一個特定的資料庫,因為通常前端的程式如果有存取master,代表這些可能都是可疑的行為,所以指定使用者到一個特定的資料庫,藉以避免監控程式的誤判。


4、Server Roles的部份請不需勾選,尤其是sysadmin,請不要勾選


5、此部份請勾選使用者特定的資料庫。

5-1 Database Role請先取消 [db_owner] 的勾選。
5-2 因為一般應用程式會針對資料庫進行Insert、Update、Delete,所以請勾選 [db_datareader]、[db_datawriter]即可。

6、按下確定後,會出現下列的錯誤訊息,其實這訊息主要是因為在1-5的步驟中取消 [db_owner]的部份,所以才會出現這個訊息,你可以忽略他。

針對這個問題你可以將操作的語法輸出後,你就可以看到語法的最後因為要針對 db_onwer進行成員的設定,所以才會有下列的錯誤訊息了,點選 ok 後,帳號即建立完成。

透過上面的方式建立出來的帳號即會只使用最小的權限存取資料庫,如此一來就算真的因為前端的程式設計不佳造成SQL Injection的問題被入侵,因為權限最小化的關係,入侵者也頂多只能針對此資料庫進行存取,無法進一步的進行其他資料庫或系統的破壞,藉以將傷害降到最低。


錯誤訊息:
Drop member failed for DatabaseRole 'db_owner'. (Microsoft.SqlServer.Smo)

An Exception occurred while executing a Transact-SQL statement or batch.
(Microsoft.SqlServer.ConnectionInfo)

An object or column name is missing or empty. For SELECT INTO statements, verify each column
has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not
allowed. Change the alias to a valid name. (Microsoft SQL Server, Error:1038)



問題原因:
SE [AdventureWorks2012]
GO
ALTER ROLE [db_owner] DROP MEMBER []
GO

PS:因為取消勾選時,工具的介面在產生語法上的錯誤,所以造成這種情況。




關鍵字:
最小權限設定minimum permissionMinimum SQL login permissions



沒有留言:

張貼留言