远程连接字符串到数据库的用户名失败,但可以通过Studio Manager

时间:2016-09-15 13:20:53

标签: sql-server powershell database-connection

虽然我的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中的大师,但是听起来好像这可能是某些可能导致写入权限问题的东西?

希望有人可以帮助或至少解释为什么会失败。

谢谢

1 个答案:

答案 0 :(得分:1)

您无法使用连接字符串中指定的域帐户登录SQL Server。

您可以使用SQL身份验证用户在连接字符串中指定用户名和密码(如果您在服务器上启用了混合模式身份验证)或指定&#34; Integrated Security = True&#34;使用当前流程凭证。

https://msdn.microsoft.com/en-us/library/bb669066(v=vs.110).aspx