繁体   English   中英

在远程机器上调用-sqlcmd

[英]Invoke-sqlcmd on remote machine

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

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.

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

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

在此处输入图像描述

首先,我假设您的$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 并右键单击您的服务器名称,然后选择“属性”。 在出现的弹出窗口中选择安全,如果需要,您将看到在哪里更改此设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM