Membership.GetAllUsers() System.Data.SqlClient.SqlException: у пользователя нет разрешения на выполнение этого действия

Я создал небольшое веб-приложение с помощью Visual Web Developer 2010 Express. После того, как я развернул свой сайт и перешел на первую страницу, которая является страницей входа в систему со списком пользователей для приложения, я получаю эту ошибку:

Сведения об исключении: System.Data.SqlClient.SqlException: у пользователя нет разрешения на выполнение этого действия.

Ошибка источника:

Line 22:         public ActionResult LogOn()
Line 23:         {
Line 24:             var users = Membership.GetAllUsers().Cast<MembershipUser>().ToList();
Line 25:             SelectList usernames = new SelectList(users);
Line 26:             ViewBag.UserNames = usernames;

Вот мои настройки connectionStrings:

<connectionStrings>
   <add name="ApplicationServices"
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
     providerName="System.Data.SqlClient" />
</connectionStrings>

Почему возникает эта ошибка? Любая помощь очень ценится. В настоящее время я разрабатываю его на сервере Windows 2008 и тестирую его развертывание на той же машине.


person massaskillz    schedule 10.04.2013    source источник
comment
Похоже, ваша строка подключения указывает пользователя, у которого нет разрешения на выбор из таблицы пользователей.   -  person Jeremy Holovacs    schedule 11.04.2013
comment
@JeremyHolovacs Я разрабатываю и тестирую развертывание на той же машине. Это работает, когда я отлаживаю его в Visual Web Developer. Что мне нужно сделать с SQL Server Express, чтобы получить разрешение на работу?   -  person massaskillz    schedule 11.04.2013
comment
Используете ли вы SSPI (доверенные соединения)? Я бы создал учетную запись пользователя Sql в базе данных служб приложений с доступом для чтения/записи и использовал бы эти учетные данные в строке подключения.   -  person Jeremy Holovacs    schedule 11.04.2013


Ответы (1)


Я обнаружил проблему с моей строкой подключения. Он был настроен для создания экземпляров пользователей, что, согласно этой статье Microsoft:

Веб-приложения, работающие на IIS 7.5 и использующие создание экземпляров пользователей SQL Server Express, не смогут работать с использованием конфигурации безопасности IIS 7.5 по умолчанию как на клиенте Windows 7, так и на Windows Server 2008 R2.

В статье также рекомендуется избегать использования пользовательских экземпляров в рабочей среде. Я нашел это сообщение , что помогло мне разместить базу данных в обычном экземпляре .\SQLExpress. Я изменил свои строки подключения на:

<connectionStrings>
    <add name="ApplicationServices"
     connectionString="Database="app_users";Data Source=.\SQLEXPRESS;Initial Catalog=app_users;Integrated Security=SSPI;"
     providerName="System.Data.SqlClient"/>
</connectionStrings>

Прежде чем изменить приведенную выше строку подключения, я прикрепил файл aspnetdb.mdf в SQL Server Express к новой созданной базе данных с именем «app_users».

Я больше не получаю ошибку разрешений.

person massaskillz    schedule 12.04.2013
comment
Я столкнулся с той же проблемой. Затем я просто удаляю User Instance=true в своей строке подключения. Ого, работает как шарм. Спасибо за подсказку. +1 - person Han; 29.11.2013