dotnetcore:无法访问Kerberos票证。请确保使用“kinit”初始化了Kerberos。

13
我想在Ubuntu上使用VSCode运行一个ASP.NET Core应用程序。当我运行该应用程序时,它会报错:

我试图运行一个ASP.NET Core应用程序,在Ubuntu上使用VSCode。当我运行该应用程序时,它给我返回了这个错误:

  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上测试过这个连接字符串,它可以工作!

有任何想法吗?


你能添加一下你正在使用的 .Net Core 版本吗?还有你的代码运行在哪个版本的 Ubuntu 上。 - Afshar Mohebi
2
这些Github上的问题看起来很相似:https://github.com/Microsoft/vscode-mssql/issues/356 和 https://github.com/dotnet/corefx/issues/22184。 - Afshar Mohebi
@Afshar .NET Core 2.0 和 Ubuntu 17.10 - jcmordan
2
谢谢,这个问题很有帮助。问题是我设置了Trusted_Connection=True而不是Trusted_Connection=False。 - jcmordan
2个回答

18

正如评论中@jcmordan所述-将Trusted_Connection设置为False。


一个小提示:如果 .NET Core 项目在非 Windows 机器上运行,需要使用 Kerberos。 - Beytan Kurt

4

我遇到了类似的问题。

我正在使用Linux操作系统和Rider IDE。

我通过更改appsettings.json中的连接字符串来解决它:

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

尝试使用这种格式。


我明白你提供了一个解决方案来对抗SQL身份验证,但这不是一个实际的方法;特别是如果组织已经有AD。OP应该专注于他们的令牌,而你的解决方案并不能解决问题,但它是一个合理的解决方案。根据我的阅读,问题在于用于访问与Active Directory一起使用的MS-SQL的Kerberos令牌没有正确初始化。OP应该致力于他们的krb5和领域配置,以避免破坏管理员的策略和控制。我说的是OWASP和MS的事实。 - Kevin B Burns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接