Настройка сервера SQL Server Express - доступ запрещен

У меня есть среда разработки, в которой мне нужно использовать 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,

Затем я получаю это сообщение об ошибке:

Ошибка входа для пользователя 'AzureAD\MyAccount'

Если я удалю User Instance=True из моей строки подключения, Update-Database команда вдруг работает! Затем я обновляю свою страницу и вижу следующую ошибку со всех конечных точек, которым требуется база данных:

В базе данных 'master' отказано в разрешении CREATE DATABASE.

Я уже попробовал хитрость удаления этой папки. Это не решило это.

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

Что дает?

1 ответ

Решение

Разобрался, так что я оставлю здесь ответ для следующего разработчика:

Как я уже упоминал, моя установка dev работает под управлением 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. Создайте имя входа SQL для учетной записи пула приложений (IIS APPPOOL\ACCOUNT) dbcreator и sysadmin в базе данных.

Я не проверял это, но я думаю, что вы можете продолжать использовать файл mdf и по-прежнему заставить его работать, выполнив только шаги 2 - 4.

Советы по устранению неполадок

Помощь в устранении неполадок, связанных с отказом в доступе, появилась из подсказки в блоге Скотта Аллена

Первым шагом, который я бы порекомендовал, является попытка определить, какую строку подключения использует инфраструктура, поскольку исключение не сообщает вам строку подключения, а строка подключения может контролироваться различными соглашениями, конфигурациями и кодом.

Чтобы узнать строку подключения, я бы добавил некоторые записи в конструктор по умолчанию в моем производном классе DbContext.

public class DepartmentDb : DbContext 
{
    public DepartmentDb() 
    {
       Debug.Write(Database.Connection.ConnectionString);
    }

    public DbSet<Person> People { get; set; }
 }

Запустите приложение с помощью отладчика и посмотрите окно вывода Visual Studio. Или установите точку останова и наблюдайте за свойством ConnectionString, когда вы входите в приложение, которое пытается установить соединение с базой данных.

Другие вопросы по тегам