我已经使用 Azure Active Directory 和联合 (AD FS) 方法设置了混合标识。我创建了 sql 托管实例并添加了一个用户作为 Active Directory 管理员。现在,我尝试从使用 AAD 集成方法以用户身份登录的加入域的 VM 连接到此 sql 托管实例。连接失败,错误如下:
====================================
无法连接到 {},3342。
====================================
发生了一个或多个错误。 (mscorlib)
程序位置:
在 System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
在 System.Threading.Tasks.Task.Wait(Int32 毫秒超时,CancellationToken 取消令牌)
在 System.Data.SqlClient.SqlInternalConnectionTds.GetFedAuthToken(SqlFedAuthInfo fedAuthInfo)
在 System.Data.SqlClient.SqlInternalConnectionTds.OnFedAuthInfo(SqlFedAuthInfo fedAuthInfo)
在 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
在 System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)
在 System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover, Boolean isFirstTransparentAttempt, Boolean disableTnir)
在 System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout)
在 System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance)
在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool, BooleanAuthenticationProvider StringManagerTransactToken )
在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
在 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource
1 retry, DbConnectionOptions userOptions)
在 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection 外连接,DbConnectionFactory connectionFactory,TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource
1 重试)
在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 重试)
在 System.Data.SqlClient.SqlConnection.Open()
在 Microsoft.SqlServer.Management.SqlStudio.Explorer.ObjectExplorerService.ValidateConnection(UIConnectionInfo ci, IServerType server)
在 Microsoft.SqlServer.Management.UI.ConnectionDlg.Connector.ConnectionThreadUser()
====================================
发生了一个或多个错误。 (mscorlib)
程序位置:
在 System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
在 System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task
1.get_Result()
在 System.Data.SqlClient.SqlInternalConnectionTds.<>c__DisplayClass134_1.b__0()
在 System.Threading.Tasks.Task`1.InnerInvoke()
在 System.Threading.Tasks.Task.Execute()
====================================
未能解析 XML Blob。 原因:XML 文档必须有一个顶级元素。 行:0,位置:0 文本:(null) (System.Data)
程序位置:
at ADALNativeWrapper.ADALGetAccessToken(String username, IntPtr password, String stsURL, String servicePrincipalName, ValueType correlationId, String clientId, Boolean* fWindowsIntegrated, Int64& fileTime) 在 System.Data.SqlClient.ActiveDirectoryNativeAuthenticationProvider.<>c__DisplayClass2_0.b__0() 在 System.Threading.Tasks.Task`1.InnerInvoke() 在 System.Threading.Tasks.Task.Execute()
SSMS 版本(最新):15.0.18384.0 请帮我解决这个问题。
答案 0 :(得分:0)
根据您收到的错误信息,请检查联合本地域是否配置为 SSO 以进行直通身份验证和密码哈希身份验证。此外,请检查您尝试连接到数据库的 VM 上是否安装了最新版本的 SQL Server Management Studio 或 SQL Server Data Tools。
接下来,确认您要连接到数据库的应用程序是否设置了服务主体 API 权限。需要为应用程序添加“Directory.Read.All”应用程序 API 权限,并将分配的 Azure AD 管理员设置为同意。应为 Azure AD 管理员凭据设置“SQL 托管实例参与者”角色的服务主体。
对于 Azure Active Directory – 集成身份验证方法,在连接到数据库之前,请确保在 SSMS 数据库连接对话框的“选项”部分(右下角)中输入数据库名称。此外,请检查连接字符串中的“Active Directory Integrated”和“Integrated Security=True”等参数以确保连接成功。
请参考以下链接供您参考:-
https://docs.microsoft.com/en-us/azure/azure-sql/database/authentication-aad-overview
谢谢,