希望你能帮助我解决我面临的问题。这是一个冗长的提供背景。简而言之,我的Windows身份验证访问SQL Server 2008 R2数据库失败,因为它似乎试图以“NT AUTHORITY \ ANONYMOUS LOGON”而不是当前用户的身份访问数据库。
这是我的方案:服务器场,其中有多个服务器运行独立的SQL Server数据库,需要运行许多PowerShell脚本,这些脚本连接到数据库并运行一些查询和根据查询,对某些数据库表进行一些更新。我们在Windows auth登录数据库时失败了(适用于SQL Server Mgmt Studio v10)。
它看起来像这样:
[winsvr2k8r2]:PS c:\ users \ svs_acct1>设置位置C:
jobs_list = []
for sublist in list_all:
jobs = []
for cd in sublist:
process = multiprocessing.Process(target=calc_zio, args=(cd,))
jobs.append(process)
jobs_list.append(jobs)
for l in jobs_list:
for j in l:
j.start()
for j in l:
j.join()
的一部分
[winsvr2k8r2]:PS c:\ users \ svs_acct1> 。 \用户\ svs_acct1 \ BIN \润AdminTasks
脚本输出
$env:PATH
错误
使用“0”参数调用“打开”的异常:“用户登录失败'NT AUTHORITY \ ANONYMOUS LOGON'。”
在C:\ users \ svs_acct1 \ bin \ Run-AdminTasks:21 char:20
+ $ SqlConnection.open<<<< ();
+ CategoryInfo:NotSpecified:(:) [],MethodInvocationException
+ FullyQualifiedErrorId:DotNetMethodException
脚本中的相关DB连接元素:
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
我已经浏览了各种帖子并尝试了多种不同方式的连接字符串,例如
$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();
没有快乐。
关于问题可能是什么以及为什么数据库连接似乎反映了我正在运行脚本的不同上下文/用户的任何想法?
答案 0 :(得分:0)
问题是kerberos auth和令牌的遗失委托。
您可以为powershell启用CredSSP身份验证(在客户端和服务器端)。请仅通过SSL执行此操作,否则您很容易受到MITM的攻击。</ p>
检查 https://msdn.microsoft.com/en-us/library/ee309365(v=vs.85).aspx