microsoft / microsoft/sqlmanagementobjects

ConnectionFailureException when user running the command does not match the ConnectAsUserName

Open
#186 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C#
Stars
143
Forks
28
PR merge metrics
No merged PRs in 30d

Description

$Credential = Get-Credential -Message "Enter your login name" 
Import-Module -Name SqlServer
$ServerInstance = "SERVERNAME"
$Server = New-Object Microsoft.SqlServer.Management.Smo.Server $ServerInstance
$Server.ConnectionContext.LoginSecure = $true
$Server.ConnectionContext.ConnectAsUser = $true
$Server.ConnectionContext.ConnectAsUserName = $Credential.GetNetworkCredential().UserName
$Server.ConnectionContext.ConnectAsUserPassword = $Credential.GetNetworkCredential().Password
try {$Server.ConnectionContext.Connect()} catch {$_.Exception | Format-List -Force}

Throws the following error, when the user running the command does not match the ConnectAsUserName

ErrorRecord                 : Exception calling "Connect" with "0" argument(s): "Failed to connect to server SERVERNAME."
WasThrownFromThrowStatement : False
TargetSite                  : Void CheckActionPreference(System.Management.Automation.Language.FunctionContext, System.Exception)
Message                     : Exception calling "Connect" with "0" argument(s): "Failed to connect to server SERVERNAME."
Data                        : {[System.Management.Automation.Interpreter.InterpretedFrameInfo, System.Management.Automation.Interpreter.InterpretedFrameInfo[]]}
InnerException              : Microsoft.SqlServer.Management.Common.ConnectionFailureException: Failed to connect to server SERVERNAME.
                               ---> System.IO.FileNotFoundException: Could not load file or assembly 'System.Diagnostics.StackTrace, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The
                              system cannot find the file specified.
                              File name: 'System.Diagnostics.StackTrace, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
                                 at Microsoft.Data.SqlClient.SqlConfigurableRetryLogicManager.get_ConnectionProvider()
                                 at Microsoft.Data.SqlClient.SqlConnection.get_RetryLogicProvider()
                                 at Microsoft.Data.SqlClient.SqlConnection.get_IsProviderRetriable()
                                 at Microsoft.Data.SqlClient.SqlConnection.Open(SqlConnectionOverrides overrides)
                                 at Microsoft.Data.SqlClient.SqlConnection.Open()
                                 at Microsoft.SqlServer.Management.Common.ConnectionManager.InternalConnectImpl()
                                 at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
                              --- End of stack trace from previous location ---
                                 at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
                                 at System.Security.Principal.WindowsIdentity.RunImpersonatedInternal(SafeAccessTokenHandle token, Action action)
                                 at Microsoft.SqlServer.Management.Common.ConnectionManager.InternalConnect()
                                 at Microsoft.SqlServer.Management.Common.ConnectionManager.Connect()
                                 --- End of inner exception stack trace ---
                                 at Microsoft.SqlServer.Management.Common.ConnectionManager.Connect()
                                 at CallSite.Target(Closure, CallSite, Object)
HelpLink                    :
Source                      : System.Management.Automation
HResult                     : -2146233087
StackTrace                  :    at System.Management.Automation.ExceptionHandlingOps.CheckActionPreference(FunctionContext funcContext, Exception exception)
                                 at System.Management.Automation.Interpreter.ActionCallInstruction`2.Run(InterpretedFrame frame)
                                 at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
                                 at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)

Running Windows 11,

Name                           Version          Source                           ProviderName
----                           -------          ------                           ------------
SqlServer                      22.3.0           https://www.powershellgallery.c… PowerShellGet

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the provided PowerShell reproduction and the stack trace's ConnectionManager.InternalConnect and SqlConnection.Open paths. Check how the SqlServer 22.3.0 dependency set is loaded when ConnectAsUser differs from the caller, especially the missing System.Diagnostics.StackTrace assembly. Done means the same script connects successfully or the underlying dependency issue is clearly identified.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp, powershell, sql
Domain
databases
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.