我在一家大公司工作,公司内部有一个内部网,每个人都有Windows登录。我们有许多内部Server数据库,这些数据库允许我们使用ASP.NET身份验证登录,我正试图通过一个Windows应用程序连接到其中一个数据库。我可以通过连接到这个数据库,并很好地查询表。
我尽可能地密切关注使用现有数据库的ASP.NET核心应用程序的教程,并创建了一个模型类来测试是否可以从数据库读取数据。在Visual中使用IIS Express进行调试时,我可以在访问自动生成的控制器和视图时从数据库读取数据。
调试时一切看起来都很好,但是当发布到IIS时,我会收到以下错误:
SqlException: Login failed for user '<DOMAIN>\<COMPUTERNAME>$'.
其中域名是我的域名,计算机名是我的计算机名称。这是预料中的,因为我的计算机本身没有访问数据库的权限。但是它不应该试图使用这个系统帐户(用美元符号)连接,它应该尝试连接到我的windows帐户:<DOMAIN>\<USERNAME>
。
更奇怪的是,这个应用程序似乎在某种程度上识别了我的Windows凭据--当我访问主页时,我在导航栏中得到了熟悉的"Hello, <DOMAIN>\<USERNAME>!"
信息。因此,Windows凭据肯定会传递到应用程序,但由于某种原因,在试图通过DbContext连接到数据库时无法传递。
我是不是漏掉了什么明显的东西?
我的密码
我从Visual的ASP.NET核心Web应用程序模板开始。
在launchSettings.json中,我有:
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": false,
"iisExpress": {
"applicationUrl": "http://localhost:60686",
"sslPort": 44336
}
},
在appsettings.json中,我有:
"ConnectionStrings": {
"MyDB": "Server=<servername>;Database=<dbname>;Trusted_Connection=True;"
},
在Startup.cs中,我在ConfigureServices
中有下面一行
services.AddDbContext<MyContext>(options => {
options.UseSqlServer(Configuration.GetConnectionString("MyDB"));
});
然后,我使用实体框架为一个具有视图的MVC控制器搭建了支架。
IIS的Windows身份验证设置为“是”,而匿名身份验证设置为“否”。我的应用程序池被设置为没有使用ApplicationPoolIdentity的托管代码。
编辑:问题
为了说明我试图解决的实际问题,我在远程intranet服务器上有一个SQL Server数据库,它允许通过Windows身份验证访问整个公司的子集。如果我想创建一个ASP.NET应用程序来向由IIS托管的数据库提供API,那么最好的方法是什么?假设:
我以为我可以通过应用程序将他们的windows凭据从IIS传递到SQL server,但我开始怀疑是否真的是这样。
发布于 2019-01-25 17:26:45
在了解了更多关于.NET的信息以及Windows在IIS上实际做了什么之后,我要说的是,我试图做的事情是不推荐的。将windows凭据传递给.NET应用程序以进行读取与以用户身份实际执行辅助进程是有区别的。后一种情况是我试图做的事情,但是应该在IIS中设置我的应用程序池,让用户能够登录到数据库,并使用windows凭据来验证具有访问权限的用户列表。
发布于 2019-01-23 08:48:37
SqlServer使用的是实体框架,EF使用的是ADO.NET SqlClient。因此,Trusted_Connection=yes;
不能工作。
添加Integrated Security=true;
代替,它应该是固定的。
下面是一些关于it的参考资料,https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/connection-string-syntax。
发布于 2019-05-08 15:13:34
不是为了挖掘一个旧线程,而是一个函数,只要设置了标识模拟= True,这个函数就可以工作。这是一些正在处理的东西。
https://stackoverflow.com/questions/54317661
复制相似问题