虽然我的Windows AD帐户具有对SQL 2012数据库的datareader访问权限(可以通过SQL Studio Manager访问,执行查询等),但当我尝试通过Powershell脚本通过SQL连接执行相同的查询时,我的登录似乎失败了。
所以我使用我的AD帐户登录计算机,与连接字符串中的UID中指定的相同,并且Powershell在同一帐户下启动。
这是Powershell中调用的SQL查询:
$ADComputer='Server1'
$sqlParameters = New-Object System.Data.SqlClient.SqlParameter('@ServerName', $ADComputer)
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=<servername>;Database=<databasename>;Uid=<domain\user>;Pwd=<password>"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText =
"SELECT TOP 1 MAX(CIA.EnforcementDeadline) AS EnforcementDeadline
FROM v_collection, v_FullCollectionMembership FCM
INNER JOIN v_Collection COL
ON FCM.CollectionID = COL.CollectionID
INNER JOIN v_CIAssignment CIA
WHERE FCM.CollectionID NOT IN ('SMS00001','SMSDM003')
AND FCM.Name='$ADComputer'"
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlConnection.Close()
$SqlAdapter.Fill($DataSet)
$DataSet.Tables[0]
$LastUpdateDate = $DataSet.Tables[0]
$LastUpdate = $LastUpdateDate | Select Column1 -Expandproperty Column1
Exception calling "Fill" with "1" argument(s): "Login failed for user '<domain\user>'."
好像连接字符串没有注意到指定的内容。
但是,如果我删除了UID和PWD并添加了“Integrated Security”,那么它可以工作:
$SqlConnection.ConnectionString = "Server=<servername>;Database=<databasename>;Integrated Security=SSPI"
我也发现了这行
$SqlAdapter.Fill($DataSet)
发生错误的位置。不可否认,我不认为自己是PS中的大师,但是听起来好像这可能是某些可能导致写入权限问题的东西?
希望有人可以帮助或至少解释为什么会失败。
谢谢
答案 0 :(得分:1)
您无法使用连接字符串中指定的域帐户登录SQL Server。
您可以使用SQL身份验证用户在连接字符串中指定用户名和密码(如果您在服务器上启用了混合模式身份验证)或指定&#34; Integrated Security = True&#34;使用当前流程凭证。
https://msdn.microsoft.com/en-us/library/bb669066(v=vs.110).aspx