Настройка сервера 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.
- Обновите строку подключения, чтобы она указывала на
Initial Catalog=MyDatabase
вместоAttachDbFilename=|DataDirectory|\MyProject.mdf
- Удалить
User Instance=True
, Ваша строка подключения теперь выглядит так:
Data Source=.\SQLEXPRESS;Initial Catalog=FullStackFitness;Integrated Security=True
- Создайте базу данных, запустив
Update-Database
, - Создайте имя входа 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, когда вы входите в приложение, которое пытается установить соединение с базой данных.