希望你能帮助我解决我面临的问题。这是一个冗长的提供背景。简而言之,我的Windows身份验证访问SQL Server 2008 R2数据库失败,因为它似乎试图以“NT AUTHORITY \ ANONYMOUS LOGON”而不是当前用户的身份访问数据库。
这是我的方案:服务器场有多个运行独立SQL Server数据库的服务器,需要运行多个PowerShell脚本,这些脚本连接到数据库并运行一些查询并根据查询对某些数据库表进行一些更新。我们在Windows auth登录到数据库时失败了(适用于SQL Server Mgmt Studio v10)。
它看起来像这样:
$env:PATH
的一部分脚本输出
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]
没有快乐。
关于问题可能是什么以及为什么数据库连接似乎反映了我正在运行脚本的不同上下文/用户的任何想法?
问题是kerberos auth和令牌的丢失委托。
您可以为powershell启用CredSSP auth(在客户端和服务器端)。请仅通过SSL执行此操作,否则您很容易受到MITM的攻击。
检查https://msdn.microsoft.com/en-us/library/ee309365(v=vs.85).aspx