【发布时间】:2020-05-05 03:50:44
【问题描述】:
我有两个使用 VS 2017 的桌面客户端。我继承了一个连接到隔壁房间的 SQL Server 的 C# .NET 应用程序。我们在执行 SQL 查询时通常使用 SQL Server 身份验证(与 Windows 身份验证相反)。
我使用的连接字符串看起来像这样......
"Data Source=DR101; User Id = DR_DATA; Password = CD7504st; Integrated Security=SSPI; TransparentNetworkIPResolution=False"
... 这就像第一个桌面的魅力。从第二个桌面它总是无法访问数据库,给出一个指示 Windows 登录失败的错误...
...抛出异常。
System.Data.SqlClient.SqlException:用户“SDAR\SdarAutoSvc”登录失败
我已经比较了这两个系统之间我能想到的所有内容。据我所知,它们在几乎所有方面都是相同的......都使用相同的 Visual Studio(帮助 > 关于,并比较了模块版本的长列表。在两个系统上相同),相同的 System.Data.dll 模块,同App.config,C#源码,输入数据等
故障系统仅通过此 Visual Studio 应用程序失败 - 即,我可以使用 SQL Server 凭据(不是 Windows 身份验证)通过 SMSS 从该桌面访问数据库服务器。
我不知道这第二台机器如何可能无法访问数据库,以及为什么它显然使用 Windows auth 而不是连接字符串中的 sql userId/password。
【问题讨论】:
-
Integrated Security=SSPI 使用 Windows 凭据。这要求用户在本地和远程计算机上都有一个帐户。通常我设置一个组帐户(或组策略)并将用户添加到组中。然后在本地和远程计算机(SQL Server PC)上设置组帐户。然后将组帐户添加到数据库凭据。我发现 windows 组帐户比将每个用户添加到 SQL 数据库凭据更容易。通常大公司使用组策略并且该组已经存在。因此,只需将组添加到数据库中,所有用户都可以访问数据库。
-
我想你会发现第一个桌面上的用户实际上在你没有意识到的情况下与 windows auth 连接。我不确定为什么 Visual Studio 版本在这里很重要。通常,您在 Visual Studio 中构建应用程序,然后将其部署为独立运行。您不会在需要运行它的每台机器上都安装 Visual Studio
标签: c# sql-server visual-studio connection-string system.data