我将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成员资格数据库会出现什么问题?
答案 0 :(得分:1)
如果您不使用模拟,则需要为ASP.NET进程运行的帐户授予对成员资格对象的访问权限。最有可能的是NETWORKSERVICE
。使用aspnet_regsql.exe创建成员资格对象时,它还会创建具有对应SP的执行权限的特殊角色(如aspnet_membership_BasicAccess
等)。因此,为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