0

我已经使用联合身份验证 (AD FS) 方法使用 Azure Active Directory 设置了混合身份。我创建了 sql 托管实例并添加了一个用户作为 Active Directory Admin。现在,我尝试从使用 AAD 集成方法以用户身份登录的加入域的 VM 连接到此 sql 托管实例。连接失败并出现以下错误:

====================================

无法连接到 {},3342。

====================================

发生一个或多个错误。(mscorlib)


节目地点:

在 System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) 在 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 System.Data.SqlClient.SqlInternalConnectionTds 处的 runBehavior、SqlCommand cmdHandler、SqlDataReader dataStream、BulkCopySimpleResultSet bulkCopyHandler、TdsParserStateObject stateObj)。System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo,字符串 newPassword,SecureString newSecurePassword,布尔 ignoreSniOpenTimeout,TimeoutTimer 超时,布尔 withFailover,布尔 isFirstTransparentAttempt,布尔 disableTnir)的 CompleteLogin(布尔 enlistOK)在 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 超时、SqlConnectionString connectionOptions、SqlCredential credential、String newPassword、SecureString newSecurePassword、Boolean redirectedUserInstance ) 在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity 身份,SqlConnectionString connectionOptions,SqlCredential 凭据,对象 providerInfo,字符串 newPassword,SecureString newSecurePassword,布尔重定向用户实例,SqlConnectionString userConnectionOptions,SessionData reconnectSessionData,DbConnectionPool 池,字符串 accessToken,布尔 applyTransientFaultHandling,SqlAuthenticationProviderManager sqlAuthProviderManager)在 System.Data.SqlClient.SqlConnectionFactory。在 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions) 在 System.Data 的 CreateConnection(DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)。ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 次重试,DbConnectionOptions userOptions) 在 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource 1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 retry) 在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) 在 System.Data.SqlClient。 Microsoft.SqlServer.Management.UI.ConnectionDlg.Connector.ConnectionThreadUser() 的 Microsoft.SqlServer.Management.SqlStudio.Explorer.ObjectExplorerService.ValidateConnection(UIConnectionInfo ci, IServerType server) 的 SqlConnection.Open()

====================================

发生一个或多个错误。(mscorlib)


节目地点:

在 System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) 在 System.Threading.Tasks.Task 1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task1.get_Result() 在 System.Data.SqlClient.SqlInternalConnectionTds.<>c__DisplayClass134_1.b__0() 在 System.Threading.Tasks。 System.Threading.Tasks.Task.Execute() 中的 Task`1.InnerInvoke()

====================================

无法解析 XML blob。原因:XML 文档必须具有顶级元素。行:0,位置:0 文本:(空)(System.Data)


节目地点:

在 System.Data.SqlClient.ActiveDirectoryNativeAuthenticationProvider 的 System.Data.SqlClient.ActiveDirectoryNativeAuthenticationProvider 的 ADALNativeWrapper.ADALGetAccessToken(字符串用户名,IntPtr 密码,字符串 stsURL,字符串 servicePrincipalName,ValueType 相关 ID,字符串 clientId,Boolean* fWindowsIntegrated,Int64& 文件时间)。<>c__DisplayClass2_0.b__0() 在 System.Threading .Tasks.Task`1.InnerInvoke() 在 System.Threading.Tasks.Task.Execute()

SSMS 版本(最新):15.0.18384.0 请帮我解决这个问题。

4

1 回答 1

0

根据您收到的错误,请检查联邦本地域是否配置了单点登录以进行直通身份验证和密码哈希身份验证。此外,请检查您尝试连接到数据库的 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-configure?tabs=azure-powershell

https://azure.microsoft.com/en-gb/blog/windows-azure-now-supports-federation-with-windows-server-active-directory/

https://docs.microsoft.com/en-us/azure/azure-sql/database/authentication-aad-overview

感谢您,

于 2021-08-05T14:18:01.413 回答