【问题标题】:ASP.NET membership db using integrated security problemASP.NET 成员数据库使用集成安全问题
【发布时间】:2010-05-16 17:15:19
【问题描述】:

我将 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. 你发布的sql server 支持集成认证吗? 2.您用于集成认证的账号与XX用户权限相同?
  • 谢谢。我需要帮助来检查它。我可以使用 Windows 身份验证将 SQL Server Management Studio 连接到 SQL Server。

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


【解决方案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

【讨论】:

  • 谢谢。抱歉,我找不到为其创建登录名的网络服务帐户。你能告诉我如何创建这样的登录吗?
  • 也许它是来自 NT AUTHORITY\SYSTEM 或 NT SERVICE\MSSQL$SQLEXPRESS 的东西,我在我的 SQL Server 中作为登录名?
  • 如果是 IIS6 或更高版本(很可能是),它将是 AppPool 正在运行的帐户。
  • 不,它应该是 NETWORK SERVICE(如果是 IIS6+)和 5.x 上的 ASPNET。
  • 谢谢。在您的脚本的帮助下,我成功地按照您的建议执行了所有操作:为我的数据库创建 NT AUTHORITY\NETWORK SERVICE 登录名、NT AUTHORITY\NETWORK SERVICE 用户,映射到该登录名,并授予该用户“aspnet_Membership_BasicAccess”和“aspnet_Roles_BasicAccess”,但是我最初在集成安全方面遇到的问题仍然存在。
猜你喜欢
  • 2013-05-26
  • 2012-03-22
  • 1970-01-01
  • 2011-01-02
  • 2012-11-28
  • 2012-02-28
  • 1970-01-01
  • 2023-04-04
  • 2017-10-26
相关资源
最近更新 更多