c# - 无法从 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, TaskCompletionSource
1 次重试,DbConnectionOptions userOptions,DbConnectionInternal oldConnection,DbConnectionInternal& 连接)在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection,DbConnectionFactory connectionFactory,TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource
1 重试)在 MobileMetrics.Services 的 System.Data.SqlClient.SqlConnection.Open()。1 dBQueries, IList
D:__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
提前致谢... :)
解决方案
默认情况下,SQL 会尝试 Windows 登录(你知道世界会围绕 Windows 旋转!)即使它是 SQL 登录,尽管你说不受信任,但它还是会尝试,所以在 Windows 服务器上,这通常会在后台悄悄发生,因为你已经有了kerberos 票。但是,由于这是 linux,需要明确告知您不会使用任何基于 Windows 的登录,这是通过“Integrated Security=False”完成的。
推荐阅读
- python - 带有 Kubernetes 的 Python Flask-Restful 应用程序 - 连接被拒绝
- haskell - 如何在安装带有堆栈的软件包期间修复“错误的接口文件”?
- javascript - JavaScript:filter() 方法返回原始数组而不过滤
- javascript - 无法根据另一个组件的关闭状态获取组件的复选框以呈现
- java - 是否可以让 Netbeans 格式保持 @FXML 注释与字段内联?
- python - Pygame在添加一点代码后突然卡顿了,为什么呢?
- excel - 计算负值并对它们进行排名
- c++ - 向 ApplyGradientDescent 提供可变 alpha(学习率)
- python - 使用随机生成的、人类大小的、唯一的 id 创建模型实例
- python - 将零个或可变数量的值传递给 Click.Option