【问题标题】:Invoke-sqlcmd on remote machine在远程机器上调用-sqlcmd
【发布时间】:2013-06-06 00:10:49
【问题描述】:

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

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.

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

【问题讨论】:

  • 如果您尝试-U "mydomain\test" 会怎样?
  • 你是在远程机器上使用Powershell远程处理然后执行invoke-sqlcmd吗?

标签: sql powershell


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    首先,我假设你的$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 服务器。因此,如果您登录到不同的域控制器 那么它将失败。如果您在两个不同的域上 控制器,那么您别无选择,只能使用

    IntegratedSecurity = false;
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-12
      • 2011-09-21
      • 2015-11-20
      • 1970-01-01
      相关资源
      最近更新 更多