簡體   English   中英

如何在單層Winforms應用程序中安全地連接到SQL Server數據庫?

[英]How to securely connect to a SQL Server database in a single tier Winforms application?

背景

我正在使用C#構建單層應用程序Winforms應用程序。 將SQL Server localdb數據庫附加到在應用程序運行時運行的應用程序。 該計划是使用Windows身份驗證來驗證用戶是否屬於MyApplication角色/組並可以使用該應用程序。 但是,為了防止用戶通過其他方式訪問數據庫,我正在考慮使用“應用程序角色”,以便只有一個SQL應用程序用戶可以編輯db表。

我的理解是,為了使用應用程序角色,您需要在連接字符串中提供用戶名和密碼。 我可以加密此信息,但是很顯然,在將其發送到數據庫之前,需要對其進行解碼。 這是單層應用程序中的問題嗎? 還有什么其他選擇?

若要使用應用程序角色,將使用sp_setapprole存儲過程,在該過程中將提供應用程序角色的名稱和密碼,而不是在連接字符串中發送密碼。 使用應用程序角色時,仍然可以使用普通登錄名進行連接,但是一旦成功sp_setapprole ,您的連接就會失去其用戶權限,而獲得了應用程序角色的權限。 如果您有理由相信用戶可能決定使用調試器來附加到您的進程中以提取密碼,則將解碼后的密碼存儲在內存中是一個問題。 如果您選擇使用Windows計算機級別的密鑰容器,則任何管理員還可以解密磁盤上的加密密碼。 對於使用數據庫的應用程序僅使用單個層是存在安全風險的,因此您必須根據應用程序周圍的情況來決定是否要跳過幾周的設計和開發,這是否是可以接受的風險。

來源: https : //technet.microsoft.com/zh-cn/library/ms190998(v=sql.110).aspx

我強烈建議實現一個Web API,以管理您的應用程序與數據庫的交互以及安全性。 該Web api可以使用Windows“服務”帳戶向數據庫進行身份驗證,而用戶將使用其各自的Windows帳戶向api進行身份驗證。 這具有您無需考慮密碼的額外好處。 就管理API權限而言,這是您自行設計和實施的問題。 您需要了解和處理的主要問題是唯一標識AD用戶。 請查看此SO帖子以獲取有關以下內容的更多信息: 我使用哪個Active Directory字段來唯一標識用戶?

您的服務帳戶將對數據庫具有所有必需的權限,以執行應用程序需要執行的操作,但並非所有api用戶都必須具有使用所有api函數的權限。 您將管理一個具有唯一標識的AD用戶的存儲,這些用戶具有使用該應用程序的權限以及他們擁有哪些權限。 剩下的就是您所需的設計和實施細節。

僅以執行存儲過程的權限定義用戶。 這樣,如果有人使用SQL Management Studio,則他/她將無法瀏覽/編輯表,甚至無法看到表名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM