Предоставьте приложению Asp.net mvc разрешение на удаление и создание базы данных SQL Server - PullRequest
3 голосов
/ 20 сентября 2011

Я использую SQL Server 2008 R2 и столкнулся с проблемой.Приложение, которое я разработал, должно быть протестировано на сайте клиента, который находится в другой местности.Поэтому я планирую настроить клиентскую машину один раз, а затем для любых изменений, связанных с приложением, я просто распространю пакет развертывания asp.net mvc, который клиент может развернуть в IIS.Для этого мне нужно предоставить моему приложению asp.net возможность удалять и создавать базу данных (через каркас сущности codefirst). В данной конфигурации я столкнулся с проблемой разрешения, связанной с удалением базы данных.Приложение почему-то не может удалить базу данных. Вот сводная информация о конфигурации IIS и SQL Server, которую я использую.

Для IIS я установил для идентификатора пула приложений значение «Локальная служба» согласностандартная практика.Строка подключения в файле asp.net web.config приведена ниже.

connectionString="Server=.\SQLEXPRESS;Database=SomeDatabase;Trusted_Connection=true;User Id=someuser;Password=somepassword" />

Для службы SQL Server я предоставил «Локальную службу» при входе в систему, снова предоставив здесь минимальный доступ к службе.Для логинов экземпляра SQL Server я определил имя пользователя и пароль, а также назначил полные права доступа («sysadmin»).

С этой конфигурацией я ожидал, что мое приложение IIS подключится с использованием созданного выше пользователя и пароля и сможет удалить и создать базу данных SQL Server.Но я получаю отказано в разрешении на удаление базы данных.Исключение приводится ниже.

System.Data.SqlClient.SqlException (0x80131904): Cannot drop the database 'SomeDatabase', because it does not exist or you do not have permission.

Я проверил, что база данных существует, поэтому она сводится к разрешениям. Я пропустил какую-то конфигурацию?

Ответы [ 3 ]

2 голосов
/ 20 сентября 2011

Для ясности, ваша строка подключения немного искажена и может работать не так, как вы ожидаете.

Когда вы указываете Integrated Security=true в строке подключения, происходит проверка подлинности Windows.Любой атрибут user id= в строке подключения будет проигнорирован.

Переключитесь в режим аутентификации SQL Server, удалив атрибут Integrated Security=true.

   Server=.\SQLEXPRESS;Database=SomeDatabase;
   User Id=someuser;Password=somepassword;

Кроме того, команда DROP DATABASE можетисполняться владельцем базы данных, пользователем, который является членом роли db_owner, или пользователем в роли администратора сервера.

Добавить пользователя базы данных someuser в роль db_owner.

 EXEC sp_addrolemember 'db_owner', 'SomeUser';

В качестве альтернативы, если вы решите, что указанная выше учетная запись НЕ должна быть в этой роли (т. Е. Ограниченная среда безопасности, политики и т. Д.), Рассмотрите возможность создания и использования другой учетной записи только для этой цели.Скорее всего, это будет означать сохранение другой строки подключения.Если разделение пользователей / ролей достаточно важно для вас, возможно, этот второй вариант сработает.

2 голосов
/ 20 сентября 2011

Я думаю, что реальной учетной записью, используемой в соединении Sql, является «Локальная служба», потому что вы определили Trusted_Connection = True в строке соединения.Попробуйте удалить его и посмотреть, что произойдет.Если я не ошибаюсь, этот параметр будет использовать встроенную учетную запись Windows, локальную службу в вашем случае.

0 голосов
/ 20 сентября 2011

При указании учетных данных в строке подключения вам необходимо либо пропустить Trusted_Connection part, либо установить для нее False

Data Source =myServerAddress; Initial Catalog =myDataBase; User Id =myUsername; Password =myPassword;

ИЛИ

Server =myServerAddress; Database =myDataBase; User ID =myUsername; Password =myPassword; Trusted_Connection =False;

Подробнее см. http://connectionstrings.com/sql-server-2008.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...