通过powershell Enter-PSSession连接到SQL Server 2012(使用Windows身份验证)

问题描述 投票:0回答:1

希望你能帮助我解决我面临的问题。这是一个冗长的提供背景。简而言之,我的Windows身份验证访问SQL Server 2008 R2数据库失败,因为它似乎试图以“NT AUTHORITY \ ANONYMOUS LOGON”而不是当前用户的身份访问数据库。

这是我的方案:服务器场有多个运行独立SQL Server数据库的服务器,需要运行多个PowerShell脚本,这些脚本连接到数据库并运行一些查询并根据查询对某些数据库表进行一些更新。我们在Windows auth登录到数据库时失败了(适用于SQL Server Mgmt Studio v10)。

它看起来像这样:

  1. win7pc PS C:> Enter-PSSession -ComputerName winsvr2k8r2
  2. [winsvr2k8r2]:PS c:\ users \ svs_acct1>
  3. [winsvr2k8r2]:PS c:\ users \ svs_acct1> Set-Location C: 注意:有一个脚本目录是配置文件中设置的$env:PATH的一部分
  4. [winsvr2k8r2]:PS c:\ users \ svs_acct1>。 \用户\ svs_acct1 \ BIN \运行AdminTasks

脚本输出

Loading AD module ...  
 Setting Global Variables ...  
 I am user: domreff1\dbappuser  
 Initiating DB Connection using windows auth to: sTango @ hgr23992\atr77504  
  with connect string ...  
   Data Source=hgr23992\atr77504;Initial Catalog=sTango;Integrated Security=SSPI  

错误

用“0”参数调用“打开”的异常:“用户登录失败'NT AUTHORITY \ ANONYMOUS LOGON'。” 在C:\ users \ svs_acct1 \ bin \ Run-AdminTasks:21 char:20 + $ SqlConnection.open <<<<(); + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:DotNetMethodException

脚本中的相关DB连接元素:

$SQLServer = "hgr23992\atr77504";  
$SQLDBName = "sTango";  
$SQLDBUser = [Security.Principal.WindowsIdentity]::GetCurrent().Name;  

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection  
$SqlConnection.ConnectionString = "Data Source=$SQLServer;Initial Catalog=$SQLDBName;Integrated Security=SSPI"  
$SqlConnection.open();

我已经浏览了各种帖子并尝试了多种不同方式的连接字符串,例如

Data Source=$SQLServer;Initial Catalog=$SQLDBName;Integrated Security=[Yes|True|SSPI]

没有快乐。

关于问题可能是什么以及为什么数据库连接似乎反映了我正在运行脚本的不同上下文/用户的任何想法?

sql-server authentication sql-server-2012 powershell-v2.0 windows-authentication
1个回答
0
投票

问题是kerberos auth和令牌的丢失委托。

您可以为powershell启用CredSSP auth(在客户端和服务器端)。请仅通过SSL执行此操作,否则您很容易受到MITM的攻击。

检查https://msdn.microsoft.com/en-us/library/ee309365(v=vs.85).aspx

© www.soinside.com 2019 - 2024. All rights reserved.