ADO.NET SQL Server身份驗證兩種模式揭秘
ADO.NET經過長時間的發(fā)展,很多用戶都很了解ADO.NET SQL Server了,這里我發(fā)表一下個人理解,和大家討論討論。ADO.NET SQL Server身份驗證支持兩種模式,Windows 身份驗證模式和混合模式。
◆Windows 身份驗證是默認模式(通常稱為集成安全),因為此 SQL Server 安全模型與 Windows 高度集成。信任特定 Windows 用戶和組帳戶登錄 SQL Server。已經過身份驗證的 Windows 用戶不必提供附加的憑據。
◆混合模式支持通過 Windows 和 SQL Server 進行的身份驗證。用戶名和密碼對保留在 SQL Server 中。
我們建議盡可能使用 Windows 身份驗證。Windows 身份驗證使用一系列加密消息驗證 SQL Server 中的用戶。使用 SQL Server 登錄時,會通過網絡傳遞 SQL Server 登錄名和密碼,這樣會降低它們的安全性。使用 Windows 身份驗證,已經登錄到 Windows 的用戶不必再單獨登錄到 SQL Server。下面的 SqlConnection.ConnectionString 可指定 Windows 身份驗證,而無需用戶名或密碼。
- "Server=MSSQL1;Database=AdventureWorks;Integrated Security=true;
登錄名與數據庫用戶名不同。您必須通過單獨的操作將登錄或 Windows 組映射到數據庫用戶或角色。然后向用戶或角色授予訪問數據庫對象的權限。
ADO.NET SQL Server身份驗證方案
在下列情形中,Windows 身份驗證通常為最佳選擇:
◆存在域控制器。
◆應用程序和數據庫位于同一臺計算機上。
◆您正在使用 SQL Server Express 的實例。
SQL Server 登錄常常在以下情況中使用:
◆您有工作組。
◆用戶從其他不受信任的域進行連接。
◆Internet 應用程序(例如 ASP.NET)。
指定 Windows 身份驗證不會禁用 SQL Server 登錄。使用 ALTER LOGIN DISABLE Transact-SQL 語句會禁用具有高特權的 SQL Server 登錄。
ADO.NET SQL Server身份驗證登錄類型
SQL Server 2000 支持三種登錄類型:
◆本地 Windows 用戶帳戶或受信任的域帳戶。SQL Server 依賴 Windows 來對 Windows 用戶帳戶進行身份驗證。
◆Windows 組。向 Windows 組授予訪問權限會向作為該組的成員的所有 Windows 用戶登錄授予訪問權限。
◆SQL Server 登錄。SQL Server 將用戶名和密碼的哈希形式都存儲在 master 數據庫中,使用內部身份驗證方法驗證嘗試的登錄。
混合模式身份驗證
如果您必須使用混合模式身份驗證,則必須創(chuàng)建 SQL Server 登錄名,將其存儲在 SQL Server 中。然后必須在運行時提供 SQL Server 用戶名和密碼。SQL Server 使用名為 sa(“系統(tǒng)管理員”的縮寫)的 SQL Server 登錄進行安裝。為 sa 登錄分配一個強密碼,并且不要在應用程序中使用 sa 登錄。sa 登錄名會映射到 sysadmin 固定服務器角色,它對整個服務器有不能撤銷的管理憑據。如果攻擊者以系統(tǒng)管理員的身份獲取了訪問權限,則可能造成的危害是無法預計的。
#T#SQL Server 2005 為在 Windows Server 2003 或更高版本上運行的 SQL Server 登錄引入了 Windows 密碼策略機制。密碼復雜性策略通過增加可用密碼的數目來阻止暴力攻擊。SQL Server 2005 可將 Windows Server 2003 中使用的相同的復雜性和到期策略應用到 SQL Server 中使用的密碼。連接來自用戶輸入的連接字符串會使您遭受連接字符串注入攻擊。可使用 SqlConnectionStringBuilder 在運行時創(chuàng)建語法構成有效的連接字符串。