从安全的角度来看,存储数据库连接字符串的正确方法是什么?

信息安全 应用安全 Web应用程序 数据库
2021-08-29 12:49:42

关于在 Web 应用程序中处理连接字符串的建议、最佳实践和必须做的事情是什么?什么事情是一个人永远不应该做的?

4个回答

最佳选择:不要为数据库使用密码,而是尽可能使用(Windows)集成身份验证,当然还要隔离为数据库授权的应用程序身份。这样,您就可以让 OS/Webserver/SCM 以非常安全的方式管理您的身份。

如果无法采用集成 Windows 身份验证 (IWA) 的方式需要安全地加密connstring ,最好使用DPAPI之类的东西(这样您就不必管理加密密钥),并存储加密的具有强 ACL 的受保护注册表项中的值。 如果您使用的是 ASP.NET(来自您的评论,但不是 OP),则有内置工具可以自动执行此操作(aspnet_setreg、aspnet_regiis 等,具体取决于版本...)

作为一个选项,尝试使用应用程序角色访问 sql server

好处:

  • 普通网络管理员无需咨询数据库管理员 (DBA) 即可管理数据访问,只需控制谁有权访问应用程序即可。
  • 您无需担心使用 SQL Server 本身跟踪不断变化的用户。设置应用程序角色,您可以将其委托回网络级别。
  • 您可以将数据可用性限制为单个应用程序。例如,用户可能只能在使用总帐应用程序时修改会计信息,而不能在他直接连接到 SQL Server 时修改。

你不应该做的事情

  • 将连接字符串放在文本文件中。
  • 在公共可访问文件夹/目录中有配置文件。

你应该做的事情。

  • 创建即时生成数据库密码的辅助函数。
  • 经常更改数据库密码和用户名。
  • 检查您的服务器是否配置正确,您没有将可执行文件作为纯文本提供。

我建议将您的连接字符串存储在网站根目录之外。

如果您使用的是 ASP.NET,那么您的 web.config 文件将位于网站根目录中,但您可以使用数据保护 API加密 web.config 文件的一部分,该 API 会安全地存储解密密钥。

您的 Web 应用程序使用哪个框架?