首页 > 解决方案 > 将 SQL 连接字符串存储在 Winform 应用程序的 SQL 用户定义函数中是否安全?

问题描述

我已经在 Google 上搜索了很长时间来保护存储在 Winforms 应用程序中的 SQL 连接字符串的安全。加密app.configWinforms 应用程序的(包括连接字符串)可能很有用;但是,它不如 webform 应用程序安全,因为该应用程序安装在用户的 PC 上。任何想要找出连接字符串的恶意用户都可以使用本地保存的证书对应用程序进行逆向工程,以解密出连接字符串。

最近,我想到了一种保护我的连接字符串的可能方法。

它是这样的:

  1. 我将使用 MS SQL Server Management Studio 创建一个只读用户和一个读写用户。只读用户的连接字符串位于未加密的资源属性中。它用于连接到 SQL Server 并检查我的应用程序的登录密码。

  2. 检查密码后,我将调用用户定义的 SQL 函数(包括密钥),该函数的输入是密文,并返回连接字符串以使用读写用户帐户登录 SQL Server。

有人会查看我隐藏在用户定义函数中的密钥吗?这是否可以保护我的连接字符串以登录读写用户帐户?

标签: c#sql-serversecurityconnectionapp-config

解决方案


感谢您的所有回答。在观看了 TimCorey 的 YouTube 视频 ( https://www.youtube.com/watch?v=rFncI9yfY-E ) 之后,我想我知道我的想法太简单了。在 SQL 服务器中使用存储过程应该是比用户定义函数更安全的选择。

在这里,我想根据 Mouse Power 和 Charlieface 的建议做一个总结,为了让 win-forms 应用程序更安全地连接到 SQL 服务器,我们可以通过以下方式从 SQL 服务器获取数据:

(1) 执行存储过程(具有有限权限)或通过 (2) 在服务器内建立 SQL 连接的 Web API。web-forms 应用程序的 web.config 中连接字符串的常规加密(使用 ASPNET_REGIIS)不能直接应用于 winforms 应用程序的 app.config。这是因为 app.config 及其加密密钥都位于客户端,因此很难阻止任何恶意用户使用逆向工程破解连接字符串。尽管如此,仍然建议使用隐藏在某处(在代码、文件或资源中)的密钥来加密连接字符串,作为初步保护。

也可以选择为每个连接使用单独的帐户,但这可能会使 SQL 连接的编程相对更加复杂。


推荐阅读