【发布时间】:2017-01-20 14:06:34
【问题描述】:
在我的本地 IIS 中托管我的应用程序后,系统突然给我错误:
无法打开登录请求的数据库“AlvinCMS”。登录 失败的。用户“NT AUTHORITY\SYSTEM”登录失败。
数据库 AlvinCMS 在运行时创建。系统在调试模式下没有问题。
这是我的 global.asax:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
//Check And Init Database
Alvin_CMS.App_Start.DatabaseConfig.Initialize();
......
这是我的初始化:
public static void Initialize()
{
Alvin_CMS.Models.AlvinCMSMigrationDBContext migrationDB = new Models.AlvinCMSMigrationDBContext();
try
{
if (!migrationDB.Database.Exists())
{
migrationDB.Database.Initialize(false); //THIS CREATES DATABASE
AlvinCMSExtension.Models.AccountDBContext accountDB = new AlvinCMSExtension.Models.AccountDBContext();
accountDB.Database.Initialize(false);
SetDefaultValue(migrationDB);
}
migrationDB.Database.Initialize(false);
}
catch (Exception e)
{
migrationDB.Database.Delete();
AlvinCMSExtension.Helper.Log(e);
}
}
这是我的上下文:
public AlvinCMSMigrationDBContext()
: base("DefaultConnection")
{
Database.SetInitializer<AlvinCMSMigrationDBContext>(new CreateDatabaseIfNotExists<AlvinCMSMigrationDBContext>());
}
我将应用程序池设置为使用LocalSystem,并且我的连接字符串中有IntegratedSecurity=true。我该如何解决这个错误?
注意:如果我在 Visual Studio 开发服务器上运行它,它运行良好,没有错误。此外,如果我使用 localDB 并在 IIS Express 上运行它,它也运行良好。问题只有在我使用 IIS 时才存在,即使我从 Visual Studio 本地 IIS Web 服务器调试程序,也会产生错误
更新
经过4个小时的调试,终于知道出了什么问题。错误存在是因为数据库不存在。我有另一个导致代码输入异常的数据库错误,因此没有创建数据库。
有问题的数据库有这个连接字符串:
Data Source=.\SQLEXPRESS;AttachDbFilename="C:\Users\Public\Documents\Projects\Alvin CMS Project\Alvin CMS\Alvin CMS\App_Data\db\backup\AlvinCMS_Default.mdf";Initial Catalog=AlvinCMS_Default;Integrated Security=True;MultipleActiveResultSets=True
当托管在 IIS 上时,程序无法附加数据库。它会导致此错误:
{"无法打开物理文件\"C:\Users\Public\Documents\Projects\Alvin CMS Project\Alvin CMS\Alvin CMS\App_Data\db\backup\AlvinCMS_Default.mdf\"。操作系统错误5 : \"5(拒绝访问。)\"。\r\n无法附加文件 'C:\Users\Public\Documents\Projects\Alvin CMS Project\Alvin CMS\Alvin CMS\App_Data\db\backup\AlvinCMS_Default。 mdf' 作为数据库 'AlvinCMS_Default'。"}
但是当我使用可视化开发服务器时,它工作正常。那么新的问题出现了,当托管在 IIS 服务器上时,如何安全地附加数据库而不会导致错误?
【问题讨论】:
-
允许 NT AUTHORITY/SYSTEM 以系统管理员身份作为服务器角色。
-
在 IIS 中启用了什么身份验证?
-
我确实将 NT AUTHORITY/SYSTEM 更改为 sysadmin,但错误仍未修复。 IIS 的身份验证是
Local System这将使用 NT AUTHORITY/SYSTEM 访问数据库,对吗? -
@AlvinStefanus 在问题中添加您的连接字符串。
-
我已经更新了问题,显然还有另一个数据库导致代码进入Exception,这就是AlvinCMS数据库无法访问的原因,因为它不存在。
标签: c# asp.net-mvc entity-framework asp.net-mvc-4 iis