如何将基于SQL服务器身份验证的应用程序切换到基于Windows身份验证的应用程序?

4
我开发了一个应用程序,它使用SQL服务器身份验证连接到数据库。在安装设置过程中,会要求管理员凭据(用于SQL服务器身份验证),并创建一个新用户(应用程序特定)。安装设置需要管理员凭据仅用于创建特定用户。设置还会创建一个数据库,并将该数据库映射到新创建的用户。现在需求变更为支持混合模式身份验证(Windows和SQL服务器两者都支持)。这意味着,在安装设置过程中,将有选择Windows模式或SQL模式的选项。用户可以选择Windows或SQL之一。如果选择SQL,则需要提供用户名和密码。我的问题是:
1- 如果用户选择WINDOWS模式,我是否需要创建应用程序特定用户?如果是,请指导如何创建新用户。
2- 在整个应用程序中,我使用了带有“用户名”(在安装设置期间创建的应用程序特定用户)和“密码”的连接字符串。我是否需要创建另一个连接字符串来达到此目的?
2个回答

1

[1] 不需要。你可以这么做,它也能工作,但这并非必需。在Windows身份验证中,该过程将向SQL Server提供当前运行代码的用户的凭据。在大多数情况下,这将是启动进程的用户。如果需要,您可以更改每个线程的用户,请参见Thread.CurrentPrincipal。但我建议不要这样做,因为这会使事情变得相当复杂。

在大多数情况下,您将应用程序部署为服务、Windows服务或IIS应用程序。然后,它在特定的Windows系统帐户下运行,您必须允许这些帐户在SQL服务器上运行。

如果您不使用Windows系统帐户,您将面临密码过期、安全存储密码、未经授权使用用户名运行其他可执行文件等问题。

将用户添加到Windows很容易,只需搜索:如何添加用户帐户到Windows [版本版],但首先考虑使用系统帐户(如本地服务、网络服务)。

[2] 我建议重构您的应用程序,以便通过名称引用连接字符串。


您需要将配置管理与可执行文件分离。例如,一个应用程序准备配置,另一个应用程序使用它。例如,安装程序编写配置字符串,应用程序使用配置字符串,只要它允许访问数据库,应用程序就不关心其中的内容。

谢谢Oleksii。建议的解决方案听起来不错。如果用户机器上只能使用Windows模式身份验证,可能有哪些修改? - himanshu
您需要将用户添加到授权的数据库用户中。我不确定是否可以在所有机器上以编程方式完成此操作。这可以通过管理工具手动完成,或者运行脚本(在这种情况下,您需要与服务器建立有效连接 - 这是个死结)。 - oleksii

0
你应该考虑使用 System.Data.SqlClient.ConnectionStringBuilder,而不是尝试从字符串构建 System.Data.SqlClient.ConnectionString

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接