首页 > 解决方案 > 无法从 RHEL 7 上的 .Net 核心应用程序连接到 SQL Server 数据库

问题描述

我在我的 Windows 机器上从 Visual Studio 2017 制作了一个.NET Core 2.2 应用程序,并尝试将它托管在运行 RHEL 7 Server 的 Linux 机器上。我正在尝试使用应用程序中的ADO.NET通过 SqlPassword 身份验证(我有用户 ID 和密码)连接到SQL Server DB

当我这样做时,我经常遇到异常。我在这里观察到的问题:

消息:无法使用 Kerberos 进行身份验证。确保已在客户端上使用“kinit”初始化 Kerberos,并且已为 SQL Server 注册服务主体名称以允许 Kerberos 身份验证。ErrorCode=InternalError, Exception=Interop+NetSecurityNative+GssApiException:GSSAPI 操作失败并出现错误 - 提供了无效的状态代码(SPNEGO 找不到协商机制)。在 System.Net.Security.NegotiateStreamPal.GssInitSecurityContext(SafeGssContextHandle& 上下文,SafeGssCredHandle 凭证,布尔 isNtlm,SafeGssNameHandle 目标名称,GssFlags inFlags,Byte[] 缓冲区,Byte[]& outputBuffer,UInt32& outFlags,Int32& isNtlmUsed)在 System.Net.Security。 NegotiateStreamPal.EstablishSecurityContext(SafeFreeNegoCredentials 凭证,SafeDeleteContext& 上下文,字符串 targetName,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.TryOpen(TaskCompletionSource1 重试)在 MobileMetrics.Services 的 System.Data.SqlClient.SqlConnection.Open()。1 dBQueries, IListD:__MM_VNext\Middleware\Main\Source\MobileMetrics.Services\DbToolkit\DbToolkits\SqlDbToolkit.cs:line 172 中的QueryExecutionDAL.SqlDbToolkit.GetData(IList 1 columnDetails)

我使用的连接字符串是:Data Source=my-server;Initial Catalog=my-db;UserId=testuser;Password=user@123;Trusted_Connection=False;MultipleActiveResultSets=true

我必须安装任何其他软件包吗?还是与代理有关?我在互联网上搜索了很多,但没有运气。请在这方面帮助我。

详情如下: 主机: Linux (RHEL 7) .NET Core: v2.2 数据库: SQL Server 2012 Developer Edition IDE: Visual Studio 2017 on Windows 7

提前致谢... :)

标签: c#sql-serverlinuxdatabase.net-core

解决方案


默认情况下,SQL 会尝试 Windows 登录(你知道世界会围绕 Windows 旋转!)即使它是 SQL 登录,尽管你说不受信任,但它还是会尝试,所以在 Windows 服务器上,这通常会在后台悄悄发生,因为你已经有了kerberos 票。但是,由于这是 linux,需要明确告知您不会使用任何基于 Windows 的登录,这是通过“Integrated Security=False”完成的。


推荐阅读