Прежде всего, я не эксперт по SQL ....
Мое предположение: Не позволяйте любому пользователю приложения получать доступ к masterdb.
Впо крайней мере, это настройка по умолчанию, которую я обычно запускаю на нашем общем хосте SQL Azure SaaS.
Я готов предложить несколько советов, которые говорят вам сделать это:
Database.SetInitializer<AppDataContext>(null);
Однако, насколько я понимаю, полностью отключает автоматические миграции .
Я хочу автоматические миграции (схемы) - я не хочу, чтобы EF создавал новую базу данных (или проверял существование базы данных по masterdb).
Чтоправильное решение для этого?
- Предоставить доступ к masterdb?(если да, может ли кто-нибудь предоставить фрагмент с наименьшими привилегиями)
- Не использовать миграции EF (v6)?: - (
Обновление 1: Я не декомпилировал источники, а вместо этого посмотрел на моно реализацию MigrateDatabaseToLatestVersion
.
/// <inheritdoc />
public void InitializeDatabase(TContext context)
{
Check.NotNull(context, "context");
var migrator = new DbMigrator(_config);
migrator.Update();
}
...and migrator.Update (); сделает это ... с нулевым значением targetMigration.
public override void Update(string targetMigration)
{
base.EnsureDatabaseExists(() => UpdateInternal(targetMigration));
}
В основном это вызовет UpdateInternal () - который заботится только о миграциях. Нет вызова существования базы данных, верно? Я посмотрю на это.
Обновление 2:
Я вижу следующий вызов:
IF db_id(N'my-database') IS NOT NULL SELECT 1 ELSE SELECT Count(*) FROM sys.databases WHERE [name]=N'my-database'
Но это нормально - нет мастераДля этого требуется доступ к базе данных.