1

我将 ASP.NET MVC 网站发布到虚拟机 (Hyper-V) 上的服务器。SQL Server Express 安装在同一台服务器上。

问题是 ASP.Net Membership 系统不能在集成模式下工作。当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 成员数据库出现问题?

4

1 回答 1

2

如果您不使用模拟,则需要为运行 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
于 2010-05-16T17:31:48.380 回答