0

我们无法弄清楚为什么 AD FS 2016 在 SQL 属性存储上执行某个 SQL 查询。

  • 当我们重命名数据库以准备停用该数据库时,首先出现了问题。我们重命名它以查看是否有任何东西在使用它。
  • 重命名后,AD FS 2016 开始抛出无法登录数据库的错误。这并不奇怪,除了它正在执行的 SQL 查询在任何依赖方或 OAuth 注册的声明规则中的任何地方都找不到。
  • 那么,是否存在可以放置全局策略的位置,该策略将在每次请求令牌时执行并应用于每个依赖方,因为 SQL 查询不在请求令牌的依赖方上?

这是 AD FS 2016 在其事件查看器中报告的完整错误。

在 SQL 属性存储中执行查询时发生错误。

其他数据连接信息:POLICY3907:服务器=已编辑;数据库=已编辑。查询:SELECT [REDACTED] FROM [REDACTED].[REDACTED] WHERE [REDACTED]=@PARAMETER0 参数:REDACTED,

用户操作 检查异常详细信息以执行以下一项或多项操作(如果适用)。验证到 SQL 属性存储的连接字符串是否有效。确保连接字符串可以访问 SQL 属性存储并且 SQL 属性存储存在。验证 SQL 查询和参数是否有效。

异常详细信息:Microsoft.IdentityServer.ClaimsPolicy.Engine.AttributeStore.Sql.SqlAttributeStoreQueryExecutionException:POLICY3904:执行查询:'SELECT [REDACTED] FROM [REDACTED].[REDACTED] WHERE [REDACTED]=@PARAMETER0' 参数:'REDACTED, ' 失败的。连接信息:'POLICY3907: Server=REDACTED;Database=REDACTED.'。---> System.Data.SqlClient.SqlException:无法打开登录请求的数据库“已编辑”。登录失败。用户“已编辑”登录失败。在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity 身份,SqlConnectionString connectionOptions,SqlCredential 凭据,对象 providerInfo,字符串 newPassword,SecureString newSecurePassword,布尔重定向用户实例,SqlConnectionString userConnectionOptions,1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1 次重试,DbConnectionOptions userOptions,DbConnectionInternal oldConnection,DbConnectionInternal& 连接)在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection,DbConnectionFactory connectionFactory,TaskCompletionSource 1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 重试)在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource 1 retry) at System.Data.SqlClient.SqlConnection.Open() at Microsoft.IdentityServer.ClaimsPolicy.Engine.AttributeStore.Sql.SyncQueryExecutor.BeginExecuteQuery(String query, List1 queryParameters,AsyncCallback 回调,对象状态)
---内部异常堆栈跟踪结束---在 Microsoft.IdentityServer.ClaimsPolicy.Engine.AttributeStore.Sql.SyncQueryExecutor.BeginExecuteQuery(字符串查询,列表1 queryParameters, AsyncCallback callback, Object state) at Microsoft.IdentityServer.ClaimsPolicy.Engine.AttributeStore.Sql.SqlAttributeStore.BeginExecuteQuery(String query, String[] queryParameterValues, AsyncCallback callback, Object state) at Microsoft.IdentityServer.ClaimsPolicy.Language.AttributeLookupIssuanceStatement.BeginEvaluate(IEnumerable1 匹配声明,PolicyContext policyContext,AsyncCallback 回调,对象状态)

System.Data.SqlClient.SqlException (0x80131904):无法打开登录请求的数据库“已编辑”。登录失败。用户“已编辑”登录失败。在 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.CreateConnection(DbConnectionOptions 选项,DbConnectionPoolKey poolKey,对象 poolGroupProviderInfo,DbConnectionPool 池,DbConnection owningConnection,1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1 次重试,DbConnectionOptions userOptions,DbConnectionInternal oldConnection,DbConnectionInternal& 连接)在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection,DbConnectionFactory connectionFactory,TaskCompletionSource 1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 重试)在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource 1 retry) at System.Data.SqlClient.SqlConnection.Open() at Microsoft.IdentityServer.ClaimsPolicy.Engine.AttributeStore.Sql.SyncQueryExecutor.BeginExecuteQuery(String query, List1 queryParameters,AsyncCallback 回调, 对象状态) ClientConnectionId:a7e6a99c-b3c5-495d-be39-7d700321a5c3 错误号:4060,State:1,Class:11

4

2 回答 2

1

MFA 评估可以在全球范围内进行

https://docs.microsoft.com/en-us/archive/blogs/ramical/under-the-hood-tour-on-multi-factor-authentication-in-adfs-part-1-policy

通过 Get-AdfsAdditionalAuthenticationRule 检查 MFA 设置。他们可能定义了使用该属性存储的规则。

https://docs.microsoft.com/en-us/powershell/module/adfs/get-adfsadditionalauthenticationrule?view=windowsserver2022-ps

于 2021-12-18T15:35:37.800 回答
1

问题原来是添加到 Active Directory 声明提供程序信任的自定义规则。因此,每个将 Active Directory 用于声明规则的应用程序都会执行该规则,然后查询数据库,即使该应用程序不需要该值。

因此,我从 Active Directory 中删除了该声明规则。这是我找到规则的屏幕截图。

在此处输入图像描述

于 2022-01-12T15:30:03.737 回答