4

我开发了一个使用 SQL 服务器身份验证连接到数据库的应用程序。虽然安装设置要求管理员凭据(用于 SQL 服务器身份验证)并创建一个新用户(特定于应用程序)。安装程序只需要管理员凭据来创建特定用户。安装程序还会创建一个数据库并将此数据库映射到新创建的用户。现在要求更改以支持混合模式身份验证(Windows 和 SQL 服务器两者)。这意味着,虽然安装设置可以选择 Windows 模式或 SQL 模式。用户可以选择 Windows 或 SQL。如果选择 SQL,她必须提供用户名和密码。我的问题是:

1- 如果用户选择 WINDOWS 模式,我是否需要创建特定于应用程序的用户?如果是,请指导如何创建新用户。

2- 在整个应用程序中,我使用了带有“用户名”(安装程序安装时创建的应用程序特定用户)和“密码”的连接字符串。我是否需要创建另一个连接字符串来达到目的?

4

2 回答 2

1

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

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

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

给Windows添加用户很简单,只要搜索:如何给Windows添加用户账号【版本版】,但考虑先使用系统账号(如本地服务、网络服务)。

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


您可能希望将配置管理与可执行文件分开。即一个应用程序准备配置,另一个使用它。例如,安装程序写入配置字符串,应用程序使用配置字符串,应用程序不关心里面的内容,只要它允许访问数据库。

于 2013-09-09T14:07:01.893 回答
0

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

于 2013-09-09T13:50:50.210 回答