Членство в базе данных ASP.NET с использованием интегрированной проблемы безопасности - PullRequest
1 голос
/ 16 мая 2010

Я опубликовал веб-сайт ASP.NET MVC на сервере на виртуальной машине (Hyper-V). SQL Server Express установлен на том же сервере.

Проблема в том, что система членства ASP.Net не работает в интегрированном режиме. Когда файл Web.config содержит следующие записи:

   <connectionStrings>
    <remove name="LocalSqlServer" />
    <add name="MyDBConnectionString" connectionString="data source=vm-1\SQLEXPRESS;Initial Catalog=testdb;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
   </connectionStrings>

Я получаю сообщение об ошибке при попытке зарегистрироваться и войти на сайт.

Если я изменю строку подключения таким образом:

   <connectionStrings>
    <remove name="LocalSqlServer" />
    <add name="MyDBConnectionString" connectionString="data source=vm-1\SQLEXPRESS;Initial Catalog=testdb;User ID=XX;Password=XXXXXXX;" providerName="System.Data.SqlClient"/>
   </connectionStrings>

Я мог бы зарегистрироваться и войти без проблем.

Что может вызвать проблемы с использованием базы данных членства ASP.NET в режиме интегрированной безопасности?

1 Ответ

1 голос
/ 16 мая 2010

Если вы не используете олицетворение, вам нужно предоставить доступ к объектам членства для учетной записи, под которой выполняется процесс ASP.NET. Скорее всего это NETWORKSERVICE. Когда вы создаете объекты членства с помощью aspnet_regsql.exe, он также создает специальные роли (например, aspnet_membership_BasicAccess и т. Д.) С разрешениями на выполнение для соответствующих SP. Поэтому создайте логин для учетной записи NETWORKSERVICE, добавьте пользователя в свою базу данных для этого логина и предоставьте ему одну из этих aspnet_ ролей.

Попробуйте следующий скрипт, который я использую как часть моего развертывания базы данных (должен запускаться от имени администратора базы данных):

IF NOT EXISTS (SELECT * FROM master.dbo.syslogins WHERE loginname = N'NT AUTHORITY\NETWORK SERVICE')
CREATE LOGIN [NT AUTHORITY\NETWORK SERVICE] FROM WINDOWS
GO
CREATE USER [NT AUTHORITY\NETWORK SERVICE] FOR LOGIN [NT AUTHORITY\NETWORK SERVICE] WITH DEFAULT_SCHEMA=[dbo]
GO
GRANT CONNECT TO [NT AUTHORITY\NETWORK SERVICE]
GO

exec sp_addrolemember 'aspnet_Membership_BasicAccess', 'NT AUTHORITY\NETWORK SERVICE'
GO
exec sp_addrolemember 'aspnet_Roles_BasicAccess', 'NT AUTHORITY\NETWORK SERVICE'
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...