在远程计算机上调用-santlcmd

时间:2013-06-10 10:51:48

标签: sql powershell

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

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 个答案:

答案 0 :(得分:0)

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

enter image description here

答案 1 :(得分:0)

首先,我假设您的$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;

现在,如果集成安全性为假,则SQL Server将使用SQL 连接字符串中提供的服务器登录名和密码。为了这 要正常工作,SQL Server实例必须具有其身份验证模式 配置为混合模式,即SQL Server和Windows身份验证 模式。

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