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

Remote connection string to database fails for username, but can access via Studio Manager

虽然我的 Windows AD 帐户具有对 SQL 2012 数据库的数据读取器访问权限(可以通过 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 方面的大师,但听起来好像这可能是在某处写一些可能导致写权限问题的东西?

希望有人能提供帮助或至少解释失败的原因。

感谢

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

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

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