从 ASP.NET 核心连接到 SQL 服务器的最佳实践?

Best practices for connecting from ASP.NET Core to SQL Server?

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

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

我想知道 Asp.Net Core 最好的 SQL 服务器登录方法是什么。我知道对于普通 .NET 有一个与此类似的问题,但您无法加密 Core web。config/appsettings.json(好吧,以一种快速而直接的方式)。

以下是我看到的选项:

通过存储在 appsettings.json 中的 SQL 服务器 ID 连接。

通过 ASP.NET "AppIdentityUser".

通过用户 NT ID 连接

通过 Active Directory 用户连接。

我还缺少其他选项吗?在哪些情况下使用这些选项中的哪些?哪些比较标准?有没有我没有考虑的利弊?

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

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

对于您的情况,最后两个是最有趣的。在开发中,您应该使用用户机密。在生产中,您应该使用环境变量。但是,两者都没有以加密方式存储秘密。这两种方法的好处是秘密不在您的项目中,因此也不在您的源代码管理中。尽管两者都没有加密,但它并不像您想象的那么重要。要了解其中任何一个的秘密,都需要直接访问 server/development 机器。此外,用户机密默认绑定到特定用户帐户,只能由该用户访问,并且可以以相同方式设置环境变量。因此,某人需要同时获得对机器的访问权限 获得对特定帐户的访问权限。这实际上是一个相当高的门槛,如果真的发生了,那么此时暴露数据库密码确实是您最不关心的事情。

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

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