[英]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.