【问题标题】:remote powershell script executed by anonymous user匿名用户执行的远程powershell脚本
【发布时间】:2015-11-27 22:21:16
【问题描述】:

我们正在使用 pstrami 运行部署脚本。部署的一部分是执行数据库迁移。迁移使用具有集成安全性的连接字符串。

当脚本在远程计算机上执行时,迁移失败并出现 sql 错误,提示用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败

执行脚本的人是域管理员。我们运行的其他部署使用启动该流程的用户执行远程脚本。

【问题讨论】:

    标签: sql-server powershell


    【解决方案1】:

    问题在于凭据没有跳到 SQL Server 以实现集成安全性。您需要执行以下操作:

    在服务器上(正在建立 SQL Server 连接的服务器,以管理员身份运行:

    Enable-WSManCredSSP -Role server
    

    在客户端机器上,以管理员身份运行:

    Enable-WSManCredSSP -Role client -DelegateComputer YOUR_SERVER_NAME
    

    要将其对所有服务器开放,您可以运行:

    Enable-WSManCredSSP -Role client -DelegateComputer *
    

    最后,您的调用命令确保您运行 -authentication credssp。一个例子:

    invoke-command -computername $remoteServer -authentication credssp -scriptblock { write-host "hello!" } -credential $credentials
    

    【讨论】:

      【解决方案2】:

      这是场景:
      您从 desktopA 运行 pstrami(deployment) 脚本。该脚本将您的安装文件推送到 serverA。然后在服务器 A 上,脚本作为从桌面 A 启动脚本的人远程运行。其中一个步骤是使用 fluentmigrator 使用“集成安全性”的连接字符串参数运行 sql 数据库更新,并且数据库位于 serverB 上。

      连接字符串示例:

      $migration_db_connection = Data Source=serverB;Initial Catalog=PropertyDb;Integrated Security=SSPI; 
      .\migrate.exe /conn "$migration_db_connection" /db SqlServer /a $migration_assembly /profile DEBUG
      

      Pstrami 使用 powershell 命令invoke-command,它使用您运行脚本的帐户作为默认用户。因此,发生的情况是,当您从 desktopA 作为“jonDoe”运行脚本时,它会在 serverA 上进行身份验证。因此,您的 pstrami 脚本在 serverA 上的“jonDoe”下运行。当您在 serverA 上以“jonDoe”的身份执行 fluentmigrator 脚本时,fluentmigrator 返回错误用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。在 IIS 中,当您需要访问 IIS 服务器之外的另一个资源并且某些相当常见的情况发生时,您会遇到一个有趣的情况。使用集成安全时,匿名访问被禁用,模拟被打开,Windows 安全措施启动,不允许您的站点访问任何网络服务器上的资源。 (http://weblogs.asp.net/owscott/archive/2008/08/22/iis-windows-authentication-and-the-double-hop-issue.aspx)

      这就是我解决 Windows 身份验证和遇到的双跳问题的方法。直接在您的 sql 数据库服务器上运行迁移脚本,并将其作为服务器目标包含在您的 pstrami 环境中。

      例子:

      Environment "dev" -servers @(
          Server "serverA" @("InstallWeb") 
          Server "serverB" @("RunMigrations")
          ) 
      

      更多关于双跳

      【讨论】:

        【解决方案3】:

        我无法评论您的问题并将其发布为答案。我稍后会更新。

        这可能是由于 SQL Server 没有您的 Windows 登录帐户的登录帐户。如果这是问题,请将已登录的用户添加到远程计算机中的 SQL Server。

        如果这个问题已经解决,那么您可以选择在 SQL Server 以及您正在使用的特定数据库上将权限作为 DB_Owner 授予“NT AUTHORITY\ANONYMOUS LOGON”。

        【讨论】:

        • 否,用户在 SQL Server 中有一个帐户。他是服务器管理员。他以相同的方式运行所有部署。我们的 DBA 不希望匿名用户拥有对数据库的完全访问权限
        • 那样的话我就束手无策了。这是我能够找到此问题的唯一原因。
        猜你喜欢
        • 1970-01-01
        • 2022-10-12
        • 2020-11-12
        • 1970-01-01
        • 1970-01-01
        • 2012-05-30
        • 2013-10-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多