从ASP.NET Core连接到SQL Server的最佳实践?

时间:2018-02-15 22:07:20

标签: asp.net asp.net-core asp.net-core-mvc asp.net-core-2.0 asp.net-core-webapi

我最近遇到一些SQL Server不喜欢默认AppIdentityUser登录的问题,所以我继续创建了一个具有写访问权限的自定义数据库用户。

但它让我想知道 - 这是最好的方法吗?

我想知道Asp.Net Core最好的SQL Server登录方法是什么。我知道在普通的.NET中存在类似的问题,但你无法加密Core web.config / appsettings.json(嗯,以一种快速而直接的方式)。

以下是我看到的选项:

通过appsettings.json中存储的SQL Server ID进行连接。

  • Pro:已经配置。
  • 缺点:web.config / appsettings.json中的密码;必须专门配置SQL Server ID。不是集中可撤销的。

通过ASP.NET连接用户NT ID" AppIdentityUser"。

  • Pro:appsettings.json中没有密码。
  • 缺点:不可集中撤销。似乎仅限于用户的服务器名称。

通过Active Directory用户连接。

  • 专业:轻松可以撤销。
  • 缺点:appsettings.json中的Active Directory用户密码。如果有人不小心在公司的另一个应用程序中重复使用该用户,并且该用户遭到破坏,可能会很糟糕。

我还缺少其他选择吗?在哪些情况下使用以下哪些选项?哪个更标准?我有没有考虑过的优点和缺点?

1 个答案:

答案 0 :(得分:3)

您绝对应该使用自定义SQL登录来连接数据库。在底层,SQL登录可以绑定到本地帐户,服务帐户,网络帐户等。它实际上并不重要。

您似乎遇到的真正问题是不希望(正确地)以纯文本形式公开登录凭据。我不知道为什么你在这里继续引用Web.config,因为ASP.NET Core并没有使用它。相反,可以选择使用各种配置提供程序。默认情况下,ASP.NET Core(至少从2.0开始)添加了一个JSON配置提供程序,用于在项目中查找appsettings.jsonappsettings.{environment}.json,命令行配置提供程序,用户机密配置提供程序,以及最后是环境变量配置提供程序。

最后两个对你的情况最有意思。在开发中,您应该使用用户机密。在生产中,您应该使用环境变量。但是,两者都不以加密的方式存储秘密。这两种方法的好处是秘密不在您的项目中,因此也不在您的源代码管理中。尽管两者都没有加密,但它并不像你想象的那么大。在任何一个中获取秘密都需要直接访问服务器/开发机器。此外,用户机密默认绑定到特定用户帐户,只能由该用户访问,并且环境变量可以以相同的方式设置。因此,有人需要访问计算机才能访问特定帐户。这实际上是一个非常高的标准,如果它发生了,那么暴露数据库密码实际上是你最不关心的问题。

尽管如此,如果您想要真正的加密,您可以选择使用Azure KeyVault。无论您的应用程序是否实际托管在Azure中,都可以使用KeyVault,虽然它不是免费的,但它非常便宜。

最后,您始终可以创建自己的配置提供程序或源第三方配置提供程序。例如,虽然默认的JSON提供程序不支持加密,但您可能会写一个加密。