sql-server - C# SQL 连接字符串最佳实践

标签 sql-server database winforms authentication

我有一个 winforms 应用程序,它使用连接字符串和通用用户连接到数据库

"Database=DBADAS;Server=TMT123\\SQLEXPRESS;User ID=user; Password=*****;

使用登录对话框连接到数据库后,我们检查用户和密码是否存在于数据库的用户表中。

我现在的问题是,这是否是一种好的做法?因为基本上在连接字符串中有破解服务器所需的所有信息。

最佳答案

有几种方法可以安全地解决这个问题。由于它是 Winforms 应用程序而不是 Web 应用程序,因此您的大部分安全风险都涉及网络中已经有人在偷看连接字符串。这本身就增加了一层安全性。

<强>1。硬编码 您可以将用于获取用户的连接字符串硬编码到 DLL 中,并使您的应用程序依赖于该 DLL。我之所以这样建议,是因为听起来“通用用户”密码是永久性的;否则,每次更改密码时都必须重新编译代码,然后再次部署。但是,这是非常安全的,因为值不是以纯文本形式存储的。

<强>2。应用配置 您可以将其粘贴在配置文件中。在安全网络中,这可能是最通用的选项,因为您可以存储多个字符串并轻松更新它们而无需更新整个应用程序。这与“DebugMode”设置等设置配合得很好。使用 App.Config 或其他 XML 文件是理想的,但您也可以滚动一个快速但不完整的 .txt 文件。

<强>3。数据库 可能是所有方法中最安全的方法,因为您可以加密数据库并对程序进行编码,以使用不相关的登录名从该数据库中获取连接字符串和登录信息。这允许在用户尚未登录时更好地控制应用程序可以访问的内容。它还可以防止软件在网络外部运行,这可能是理想的。

<强>4。内部 API 让单独的应用程序提供此数据会使用户能力与您的顾虑分离,因为 API 和您的应用程序可以交换验证 key 以查看您的应用程序是否有权限尝试连接。这是我个人最喜欢的,但显然是最需要设置的。

<强>5。注册表项 根据您的安装方式,将您需要的 token 嵌入到注册表中可能效果很好。这保证应用程序需要管理员权限才能安装,并允许您使用 Windows 安全来限制对配置单元的访问。

同样,由于它是一个内部非网络应用程序,我不会太担心连接字符串的纯文本;如果有人深入你的网络,很可能你已经遇到了更大的问题。我不会将它作为纯文本文件 float 在本地目录中,但任何高于此的安全级别对于您的目的来说都可能是可以接受的。

关于sql-server - C# SQL 连接字符串最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43362975/

相关文章:

c# - 如何从使用 exec() 的存储过程创建复杂类型?

sql-server - 提高表值函数性能

sql - 似乎找不到循环遍历 PL/SQL 数组的方法?

c# - 意想不到的透明度而不是白色

c# - 如何将类似控制台的元素添加到 c# winforms 程序

mysql - 如何将查询从 MYSQL 更改为 SQL SERVER 的 LIMIT

c# - Database.ExecuteSqlCommand 始终返回 -1

sql - 表连接是否会破坏 Access 查询中的 Order By 子句?

SQL - 优化复杂的分页搜索查询

.net - 空工作线程,它们是什么?