SQL Server Express 开发设置 - 访问被拒绝打地鼠

SQL Server Express dev setup - access denied whack-a-mole

我有一个开发环境,我需要在其中使用 IIS 和 SQL Server Express。我的连接字符串如下所示:

<add name="DefaultConnection" 
     connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MyProject.mdf;Integrated Security=True;User Instance=True" 
     providerName="System.Data.SqlClient" />

当我 运行 应用程序并浏览到该站点时,这非常有用。数据从数据库返回,我可以登录到 Management Studio 并查看该数据。问题是当我尝试使用 Update-Database 推送新的数据迁移时。

然后我收到此错误消息:

Login failed for user 'AzureAD\MyAccount'

如果我从连接字符串中删除 User Instance=TrueUpdate-Database 命令突然生效!然后我刷新我的页面并从所有需要数据库的端点看到以下错误:

CREATE DATABASE permission denied in database 'master'.

删除这个文件夹的技巧我已经试过了。没有解决。

C:\Users\MyAccount\AppData\Local\Microsoft\Microsoft SQL Server Data

什么给了?

想通了所以我会把答案留给下一个开发者:

正如我提到的,我的开发设置是 运行 IIS 和 SQL Express。

  1. 更新连接字符串以指向 Initial Catalog=MyDatabase 而不是 AttachDbFilename=|DataDirectory|\MyProject.mdf
  2. 删除User Instance=True。您的连接字符串现在看起来像:

Data Source=.\SQLEXPRESS;Initial Catalog=FullStackFitness;Integrated Security=True

  1. 通过运行Update-Database创建数据库。
  2. 在数据库上为应用程序池帐户 (IIS APPPOOL\ACCOUNT) dbcreator 和 sysadmin 创建 SQL 登录名。

我没有测试它,但我相信您可以继续使用 mdf 文件,并且仍然可以通过 运行 仅步骤 2 - 4 使它正常工作。

疑难解答提示

来自 Scott Allens 的提示帮助解决访问被拒绝问题 blog

The first step I would recommend is trying to determine what connection string the framework is using, because the exception doesn’t tell you the connection string, and the connection string can be controlled by a variety of conventions, configurations, and code.

To find out the connection string, I’d add some logging to a default constructor in my DbContext derived class.

public class DepartmentDb : DbContext 
{
    public DepartmentDb() 
    {
       Debug.Write(Database.Connection.ConnectionString);
    }
    
    public DbSet<Person> People { get; set; }
 }

Run the application with the debugger and watch the Visual Studio Output window. Or, set a breakpoint and observe the ConnectionString property as you go somewhere in the application that tries to make a database connection.