【发布时间】:2020-09-28 04:29:33
【问题描述】:
我有一个 .NET Core 应用程序作为 API。我可以将它连接到本地 SQL Server 数据库,但不能连接到我网络上的其他数据库。
当我尝试使用 dbContext 访问远程数据库时,我收到此错误:
System.Data.SqlClient.SqlException:
建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定实例)
appsettings.json 本地:
"ConnectionStrings": {
"DefaultConnection": "Data Source=(localdb)\\mssqllocaldb;Initial Catalog=ib;Integrated Security=True;"
}
appsettings.json 远程:
"ConnectionStrings": {
"DefaultConnection": "Server=[servername]\[instanz];Database=IBCore_Lange;User Id=sa;password=XXX"
}
我可以通过 SQL Server Management Studio 或我系统的先前 (ASP.NET) 版本访问数据库。在 Core 中,我只能访问本地数据库。
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
.AddJsonOptions(x => x.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);
services.AddDbContext<ibContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
DbContext 已生成:
Scaffold-DbContext "Connection String"
Microsoft.EntityFrameworkCore.SqlServer -Verbose -o {output folder} -t {table to update} -force
【问题讨论】:
-
使用 SQL Server Management Studio 并尝试连接到服务器。 SSMS 登录窗口上的服务器/实例应与连接字符串匹配。您有 Integrated Security=True 这意味着您正在使用当前用户的窗口凭据。需要设置数据库安全设置以允许用户连接的用户组。通常您将数据库设置为 Windows 用户组,然后将所有用户放入该组。该组必须在本地和远程计算机上设置(或在公司网络中使用组策略)。
-
我可以使用 Integrated Security=True 和 False 访问本地数据库。只有远程数据库有网络相关或特定于实例的错误
-
你是从旧的 asp.net 版本中复制了 Connectionstring 还是重新写下来了?
-
我希望我没有正确理解第一条评论。假设他在谈论不同的应用程序用户,我不同意将 Windows 应用程序用户添加到一个组中。我有许多数据库的 sql 实例,应用程序只需要访问它们各自的数据库。我遵循最小权限的概念来防止不必要的访问。您使用的登录名将需要访问它所需的资源,而不是其他任何东西。我不会将不同应用程序的用户放在同一个组中并授予一揽子权限。
-
“网络相关实例”错误不会由身份验证问题产生......关于集成安全性的 cmets 是红鲱鱼
标签: c# sql-server .net-core