有鑑於此本章我們就來介紹如何設定一個最小權限的使用者,藉以提供前端的程式進行連線,一來可以提供更佳的防護,二來更可以社絕資料庫間相互的影嚮所造成的損失。
操作流程:
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 permission、Minimum SQL login permissions
沒有留言:
張貼留言