【问题标题】:dotnetcore : Cannot access Kerberos ticket. Ensure Kerberos has been initialized with 'kinit'dotnetcore:无法访问 Kerberos 票证。确保 Kerberos 已使用“kinit”初始化
【发布时间】:2018-04-02 04:43:31
【问题描述】:

我尝试使用 vscode 在 ubuntu 上运行和 aspnet 核心应用程序。当运行应用程序时,它给了我这个错误:

  System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
   at System.Data.SqlClient.SqlConnection.Open()
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.BufferlessMoveNext(Boolean buffer)
   at Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.MoveNext()
   at Microsoft.EntityFrameworkCore.Query.QueryMethodProvider.GetResult[TResult](IEnumerable`1 valueBuffers, Boolean throwOnNullResult)
   at lambda_method(Closure , QueryContext )
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass17_0`1.<CompileQueryCore>b__0(QueryContext qc)
ClientConnectionId:d48c3450-07f9-4cac-bc5f-97e7f7efa54a

但我没有使用集成身份验证,我的连接字符串如下所示:"DefaultConnection": "Data Source=localhost;Initial Catalog=School360Db;User Id=[user];Password=[password];Trusted_Connection=True;MultipleActiveResultSets=true"

我在 Windows 上测试了它,它可以工作!

有什么想法吗?

【问题讨论】:

标签: asp.net-core ef-core-2.0


【解决方案1】:

如 @jcmordan 在 cmets 中所述 - 设置 Trusted_Connection=False。

【讨论】:

  • 附注:如果 net core 项目在非 Windows 机器上运行,则需要 kerberos。
【解决方案2】:

我也遇到过类似的问题。

我正在使用 linux 操作系统和 Rider IDE,

我通过更改 appsettings.json 中的连接字符串解决了这个问题:

"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=ExampleDB;User=SA;Password=mypassword;ConnectRetryCount=0;MultipleActiveResultSets=true"

}

试试这个格式。

【讨论】:

  • 我了解到您为他提供了一种针对 SQL Auth 进行身份验证的解决方案,但这不是一种实用的方法;特别是,如果组织有 AD。 Op 应该专注于他们的令牌,您的解决方案并不能解决问题,但这是一个合理的解决方案。我读到的问题是,用于访问与 Active Directory 结合使用的 MS-SQL 的 Kerberos 令牌未正确初始化。 OP 应该在他们的 krb5 和领域配置上工作,以免破坏他们的管理员的政策和控制。我在陈述来自 OWASP 和 MS 的事实。
猜你喜欢
  • 1970-01-01
  • 2021-07-08
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
相关资源
最近更新 更多