4

我正在使用以下代码在远程机器上执行查询。

Invoke-Sqlcmd -ServerInstance $serverInstance -Database $dbName -InputFile $filePath -U "test" -P "testpwd"

但是得到一个错误,比如

Invoke-Sqlcmd : Login failed. The login is from an untrusted domain and cannot be used with Windows authentication.

我的数据库服务器和我的机器在同一个域中,但都是不同的机器。请帮忙。

4

2 回答 2

0

确保在您尝试访问的数据库服务器上打开了 Windows 身份验证和 SQL 身份验证。!

在此处输入图像描述

于 2014-03-17T10:39:59.533 回答
0

首先,我假设您的$serverInstance变量是一个对象,以下列方式实例化:

$serverInstance = New-Object Microsoft.SqlServer.Management.Smo.Server($SQLInstanceName)

我相信当您遇到此问题时,您正在使用IntegratedSecurity = true(默认值)。您可以通过以下分配将其设置为 false:

$serverInstance.ConnectionContext.LoginSecure=$false;

可以在此答案中找到有关如何解决您遇到的错误的说明:

如果您的 SQL Server 在一个域控制器上,并且您尝试从另一个域控制器连接到它,那么当

IntegratedSecurity = true;

即使您在连接字符串中包含有效的 SQL Server 用户名和密码,也会发生这种情况,因为它们将自动被您的 Windows 登录名和密码覆盖。集成安全意味着简单 - 使用您的 Windows 凭据对 SQL Server 进行登录验证。因此,如果您登录到不同的域控制器,那么它将失败。如果您在两个不同的域控制器上,那么您别无选择,只能使用

IntegratedSecurity = false;

现在,当 Integrated security 为 false 时,SQL Server 将使用连接字符串中提供的 SQL Server 登录名和密码。为此,SQL Server 实例必须将其身份验证模式配置为混合模式,即 SQL Server 和 Windows 身份验证模式。

要在 SQL Server 中验证或更改此设置,您可以打开 SQL Server Management Studio 并右键单击您的服务器名称,然后选择“属性”。在出现的弹出窗口中选择安全,如果需要,您将看到在哪里更改此设置。

于 2020-04-21T00:14:21.440 回答