如何将基于 SQL 服务器身份验证的应用程序切换到基于 Windows 的身份验证应用程序
本文关键字:身份验证 应用程序 Windows 服务器 SQL | 更新日期: 2023-09-27 18:30:50
我开发了一个使用SQL服务器身份验证连接到数据库的应用程序。安装安装程序要求管理员凭据(用于 SQL Server 身份验证)并创建新用户(特定于应用程序)。安装程序需要管理员凭据才能创建特定用户。安装程序还会创建一个数据库,并将此数据库映射到新创建的用户。现在,要求更改为支持混合模式身份验证(Windows 和 SQL 服务器)。这意味着,虽然安装安装程序可以选择Windows模式或SQL模式。用户可以选择Windows或SQL。如果选择了 SQL,她必须提供用户名和密码。我的问题是:
1-如果用户选择WINDOWS模式,是否需要创建特定于应用程序的用户?如果是,请指导如何创建新用户。
2-在整个应用程序中,我使用了带有"用户名"(安装安装时创建的应用程序特定用户)和"密码"的连接字符串。是否需要创建另一个连接字符串才能达到目的?
[1] 不,你不必这样做。你可以,它会工作,但这不是必需的。在 Windows 身份验证中,该过程将向当前运行代码的用户的 SQL 服务器提供凭据。在大多数情况下,这将是启动进程的用户。如果需要,可以更改每个线程的用户,请参阅 Thread.CurrentPrincipal。但我建议不要这样做,因为这大大增加了事情。
在大多数情况下,将应用部署为服务、Windows 服务或 IIS 应用程序。然后,它在特定 Windows 系统帐户下运行,您必须在 SQL 服务器上允许这些帐户。
如果您不使用Windows系统帐户,您将面临密码过期,安全存储密码,未经许可地使用用户名来运行其他可执行文件的问题。
将用户添加到Windows是微不足道的,只需搜索:如何将用户帐户添加到Windows[版本版],但请考虑先使用系统帐户(例如本地服务,网络服务)。
[2] 我建议重构您的应用程序,以便您按名称引用连接字符串。
您可能希望将配置管理与可执行文件分开。 即一个应用程序准备配置,另一个应用程序使用它。例如,安装程序写入配置字符串,应用程序使用配置字符串,应用程序不关心里面的内容,只要它允许访问数据库。
你应该考虑使用 System.Data.SqlClient.ConnectionStringBuilder
,而不是试图从字符串构建System.Data.SqlClient.ConnectionString
。