我最近遇到一些SQL Server不喜欢默认AppIdentityUser登录的问题,所以我继续创建了一个具有写访问权限的自定义数据库用户。
但它让我想知道 - 这是最好的方法吗?
我想知道Asp.Net Core最好的SQL Server登录方法是什么。我知道在普通的.NET中存在类似的问题,但你无法加密Core web.config / appsettings.json(嗯,以一种快速而直接的方式)。
以下是我看到的选项:
通过appsettings.json中存储的SQL Server ID进行连接。
通过ASP.NET连接用户NT ID" AppIdentityUser"。
通过Active Directory用户连接。
我还缺少其他选择吗?在哪些情况下使用以下哪些选项?哪个更标准?我有没有考虑过的优点和缺点?
答案 0 :(得分:3)
您绝对应该使用自定义SQL登录来连接数据库。在底层,SQL登录可以绑定到本地帐户,服务帐户,网络帐户等。它实际上并不重要。
您似乎遇到的真正问题是不希望(正确地)以纯文本形式公开登录凭据。我不知道为什么你在这里继续引用Web.config,因为ASP.NET Core并没有使用它。相反,可以选择使用各种配置提供程序。默认情况下,ASP.NET Core(至少从2.0开始)添加了一个JSON配置提供程序,用于在项目中查找appsettings.json
和appsettings.{environment}.json
,命令行配置提供程序,用户机密配置提供程序,以及最后是环境变量配置提供程序。
最后两个对你的情况最有意思。在开发中,您应该使用用户机密。在生产中,您应该使用环境变量。但是,两者都不以加密的方式存储秘密。这两种方法的好处是秘密不在您的项目中,因此也不在您的源代码管理中。尽管两者都没有加密,但它并不像你想象的那么大。在任何一个中获取秘密都需要直接访问服务器/开发机器。此外,用户机密默认绑定到特定用户帐户,只能由该用户访问,并且环境变量可以以相同的方式设置。因此,有人需要访问计算机和才能访问特定帐户。这实际上是一个非常高的标准,如果它发生了,那么暴露数据库密码实际上是你最不关心的问题。
尽管如此,如果您想要真正的加密,您可以选择使用Azure KeyVault。无论您的应用程序是否实际托管在Azure中,都可以使用KeyVault,虽然它不是免费的,但它非常便宜。
最后,您始终可以创建自己的配置提供程序或源第三方配置提供程序。例如,虽然默认的JSON提供程序不支持加密,但您可能会写一个加密。