ASP.NET成员资格使用集成安全性问题

时间:2010-05-16 17:15:20

标签: asp.net sql-server asp.net-membership integrated-security

我将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成员资格数据库会出现什么问题?

1 个答案:

答案 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