我被要求对现有的MVC网站进行更改,遗憾的是该网站的原始开发人员不再在该公司,没有任何文档,除了当前运行之外,没有人真正了解它我们的测试&现场环境。 呻吟
无论如何,当我将项目设置为启动项目并运行它时,我得到以下可爱的白色错误页面:
Access is denied.
Description: An error occurred while accessing the resources required to serve this request. The server may not be configured for access to the requested URL.
Error message 401.2.: Unauthorized: Logon failed due to server configuration. Verify that you have permission to view this directory or page based on the credentials you supplied and the authentication methods enabled on the Web server. Contact the Web server's administrator for additional assistance.
对我而言(对我而言)并不是很重要。
所以我检查了web.config文件,authorization
设置为:
<authorization>
<deny users=”?” />
</authorization>
如果我将此更改为下面的代码,我会得到一个页面,说它无法加载,但它更进一步,因为我至少可以进入代码。
<authorization>
<allow users="*"/>
</authorization>
代码确实针对Active Directory
进行了一些验证,这有效,我可以通过设置断点并移过功能来绕过那个讨厌的安全码。如果用户有效(我将断点移到此处),则代码本身不会执行任何操作,只返回true
,如果无效,则返回false
。这是我能够在我的控制器中捕获断点的唯一方法,看看是否有任何事情发生,但没有什么突出的。
代码尽可能是部分代码,它将使用LINQ
来获取正确的信息。
public ReadOnlyCollection<Application> GetApplicationStatus()
{
using (ApplicationDBEntities context = new ApplicationDBEntities())
{
var results = (from parameters in context.Parameters
join application in context.ApplicationIds on parameters.ApplicationId equals application.ApplicationId1
where parameters.ParameterName.Equals("DateTime", StringComparison.OrdinalIgnoreCase) &&
!parameters.Application.Equals(0)
select new Application
{
ApplicationId = parameters.ServiceId,
ApplicationStatus = application.Status,
DateAdded = parameters.ParameterValue
}).ToList();
return new ReadOnlyCollection<Application>(results);
}
}
在上面的代码中,它会在获取results
时抛出EntityException,异常中的消息是“底层提供程序在打开时失败。”突出显示的特定行是var results = (from parameters in context.Parameters
有了这个,我认为当前的代码与我所拥有的代码(希望不是这样)或其他东西不同,这是我发现Inner Exception
消息的时候:{{1 }}
连接字符串如下:
Login failed for user 'NT AUTHORITY\\ANONYMOUS LOGON'.
它尝试从中获取信息的<connectionStrings>
<add name="ApplicationDBEntities" connectionString="metadata=res://*/ApplicationDBModel.csdl|res://*/ApplicationDBModel.ssdl|res://*/ApplicationDBModel.msl;provider=System.Data.SqlClient;provider connection string="data source=MyServer;initial catalog=MyDB;integrated security=True;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
是我可以直接访问的信息。这可能是SQL database
帐户没有访问权限吗?是否有任何提示或提示尝试找出此问题的根本原因?
答案 0 :(得分:1)
在您的连接字符串中存在intergated security = true,这意味着您的站点尝试从运行身份验证的sql获取数据作为运行IIS应用程序池的用户。
因此,您应该由具有db权限的用户运行您的iis应用程序池,并且可能在您站点的其他资源上运行。
另一种可能性是有sql用户去db,你应该在配置文件中更改连接字符串。