【问题标题】:Access to SQL Server 2005 from a non-domain machine using Windows authentication使用 Windows 身份验证从非域计算机访问 SQL Server 2005
【发布时间】:2011-02-17 06:03:15
【问题描述】:

我有一个 Windows 域,其中一台机器正在运行 SQL Server 2005,并且配置为仅支持 Windows 身份验证。我想在同一网络上的机器上运行 C# 客户端应用程序,但它不在域上,并访问 SQL Server 2005 实例上的数据库。

我认为这样做很简单:

string connectionString = "Data Source=server;Initial Catalog=database;User Id=domain\user;Password=password";
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();

但是,这失败了:客户端错误是:

System.Data.SqlClient.SqlException:用户“域\用户”登录失败 并且服务器端错误是:错误 18456,严重性 14,状态 5

我尝试了各种方法,包括将集成安全设置为 true 和 false,并在用户 ID 中使用 \ 而不是 \,但没有成功。

一般来说,我知道可以从非域机器连接到 SQL Server 2005 实例(例如,我正在使用一个基于 Linux 的应用程序,它很乐意这样做),但我似乎没有能够在 Windows 机器上弄清楚如何做到这一点。

【问题讨论】:

  • 您尝试连接 SQL Server 的应用类型是什么?网络应用?
  • 这只是一个 C# 应用程序,我可以通过 Visual Studio 或在命令行运行。

标签: c# sql-server windows security dns


【解决方案1】:

使用 Management Studio 在通过 Windows 身份验证连接到另一个域上的服务器时,您需要在启动应用程序时使用“runas”工具。

 runas /user:OTHERDOMAIN\OTHERUSERNAME  /netonly 
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe"

也许您可以在启动应用程序时尝试类似的事情?

【讨论】:

  • 嗨 - 很有趣,但我认为这里不可能。
【解决方案2】:

(根据 Martin Smith 的回答)我一直使用 RUNAS /NETONLY 来针对我们未对其进行身份验证的域上的服务器运行 SSMS 和 BI 开发工作室和 Visual Studio IDE 以及其他第 3 方应用程序。我不确定您为什么不能这样做 - 如果您使用集成安全性,您必须以某种方式在该域上拥有一个与 SQL Server 一起使用的帐户。

此外,我修改了我的一个主要 C# 程序以使用带有 LOGON_NETCREDENTIALS_ONLY (How to build RUNAS /NETONLY functionality into a (C#/.NET/WinForms) program?) 的 CreateProcessWithLogonW,以便它提示输入用户名和密码,然后重新启动。

使用相同的 API,我还制作了一个 RUNAS /NETONLY 版本,它将在命令行上接受密码,因为 RUNAS 不允许在命令行上输入密码。显然,这是一个固有的安全风险,我不经常使用它。

为了完整起见,还有一个很棒的 shell 扩展:http://technet.microsoft.com/en-us/sysinternals/cc300361.aspx - 常规的 Run As Shell 扩展不具备与 /NETONLY 等效的功能。

【讨论】:

    【解决方案3】:

    可以在每台机器上创建一个具有相同用户名和密码的本地用户一旦创建了这些用户,就可以让 SQL 服务器机器上的用户访问 SQL 服务器,在您的另一台机器上,您的应用程序必须以新创建的用户,如果是 Web 应用程序,只需更改应用程序池设置。

    【讨论】:

    • 嗨 - 很遗憾,我无法在客户端或 SQL Server 机器上创建本地用户。
    【解决方案4】:

    您是否尝试与 machineName\UserName 连接?我还想应该在 SQL 数据库中很好地创建这样的用户 - 对吗?

    【讨论】:

    • 嗨 - 有趣的想法,但我没有 - SQL Server 实例中没有 machineName\UserName 用户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多