c# - 保护无人值守桌面应用程序上的 SQL Server 连接字符串

标签 c# sql-server azure desktop-application

我们有在现场 Windows 7 Pro Server 上运行的应用程序。他们可能无人看管,因此不安全。它们连接到 Azure 中的 Sql 服务器。我们正在尝试找到一种方法来保护连接字符串,该字符串目前为纯文本形式。我们可以加密字符串,但这只会将问题转移到保护 key 上。这些不是 Web 应用程序。我们主要担心的不是机器被盗,而是登录信息被泄露。我们可以使用像 ConfuserEx 这样的混淆技术来使找到未加密的字符串变得非常困难,但是有没有最佳实践呢?据我所知,SAML、WSFED、OAUTH、OPENID 是 Azure AD 用于验证应用程序请求的受支持协议(protocol),但我认为将其纳入非 Web 应用程序是一座大山。

最佳答案

我认为你可能试图保护错误的东西。

考虑到这是一个很可能受到对手持续攻击的应用程序,您应该考虑您的连接字符串受到损害,因为无论您在应用程序中的某个时刻采取何种措施,都需要有一个纯文本要连接的字符串。坚定的攻击者会发现这一点。

您应该花时间保护的是您的数据库。您应该能够将连接字符串打印在传单上并将其粘贴到机器侧面,并且仍然不必担心数据安全。

如果您授予每个连接到数据库根访问权限,那么您就会遇到问题。但是,如果您仔细定义了数据库角色,那么他们可以访问的唯一数据就是他们应该有权访问的数据。然后用户所能做的就是访问他们本来可以从应用程序访问的数据。

确保您拥有可以查看的审核日志并查看是否有异常事件(这是 Azure 最近开始做的事情)。攻击者在测试其帐户的限制时会收到大量访问被拒绝的错误。学会发现它们。

当然,如果有一个 API 接口(interface),您可以在其中进行某种身份验证和验证,那就更好了,但我知道有时我们必须使用现有的东西。

TL;DR

除了最简单的加密/混淆之外,不要费心尝试做任何事情。只需确保当有人获得您的连接字符串时,他们不会用它造成任何损害。锁定您的数据库。审计。经常查看审计。

关于c# - 保护无人值守桌面应用程序上的 SQL Server 连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36479053/

相关文章:

asp.net-mvc - 在 Azure 上找不到“Microsoft.SqlServer.Types”版本 10 或更高版本

Azure Data Lake gen 2 - 更改访问层 - 提前删除费用

c# - c# 中的面向对象问题

c# - 为什么 C# 中的类没有循环布局问题?

sql-server - 在SQL表中添加主键列

sql - Sql server中TRANSACTION的范围是什么

c# - 我如何修改代码以便在方法 getProductTransaction 中返回交易列表而不是单个交易

c# - VB 中的多重赋值,就像在 C 风格语言中一样

sql - 连接声明的列并定义它时,sql如何返回所有行?

Azure 蓝图拒绝某些管理员的读取访问权限