powershell 在远程计算机上调用sqlcmd

vs91vp4v  于 2023-02-04  发布在  Shell
关注(0)|答案(2)|浏览(132)

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

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.

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

xn1cxnb4

xn1cxnb41#

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

luaexgnf

luaexgnf2#

首先,我假设您的$serverInstance变量是一个对象,以如下方式示例化:
$serverInstance = New-Object Microsoft.SqlServer.Management.Smo.Server($SQLInstanceName)
我相信当你遇到这个问题时,你使用的是IntegratedSecurity = true(默认值),你可以用下面的赋值语句将其设置为false:
$serverInstance.ConnectionContext.LoginSecure=$false;
有关如何解决您遇到的错误的说明,请参见answer
如果您的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,右键单击服务器名称,然后选择“属性”。在出现的弹出窗口中,选择“安全性”,您将看到需要更改此设置的位置。

相关问题