我使用下面的代码在远程机器上执行查询。
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.
我的数据库服务器和我的机器在同一个域中,但两者是不同的机器。请帮助。
2条答案
按热度按时间xn1cxnb41#
请确保在尝试访问的数据库服务器上打开了Windows身份验证和SQL身份验证。
luaexgnf2#
首先,我假设您的
$serverInstance
变量是一个对象,以如下方式示例化:$serverInstance = New-Object Microsoft.SqlServer.Management.Smo.Server($SQLInstanceName)
我相信当你遇到这个问题时,你使用的是
IntegratedSecurity = true
(默认值),你可以用下面的赋值语句将其设置为false:$serverInstance.ConnectionContext.LoginSecure=$false;
有关如何解决您遇到的错误的说明,请参见answer:
如果您的SQL Server位于一个域控制器上,而您正尝试从另一个域控制器连接到它,则在以下情况下将收到此错误
即使您在连接字符串中包含有效的SQL Server用户名和密码,也会发生这种情况,因为它们将自动被您的Windows登录名和密码覆盖。集成安全性意味着简单地使用您的Windows凭据进行SQL Server的登录验证。因此,如果您登录到不同的域控制器,则它将失败。如果您位于两个不同的域控制器上,则别无选择,只能使用
现在,当Integrated security为false时,SQL Server将使用连接字符串中提供的SQL Server登录名和密码。要使其正常工作,SQL Server示例必须将其身份验证模式配置为混合模式,即SQL Server和Windows身份验证模式。
若要在SQL Server中验证或更改此设置,可以打开SQL Server Management Studio,右键单击服务器名称,然后选择“属性”。在出现的弹出窗口中,选择“安全性”,您将看到需要更改此设置的位置。