SqlException:用户'NT AUTHORITY \ NETWORK SERVICE登录失败

时间:2009-05-18 20:30:39

标签: asp.net sql-server iis iis-7


当我通过VS 2008运行Web应用程序时,应用程序能够登录到Sql server并检查用户输入的凭据(用户名和密码),但是当我通过IIS 7浏览到此应用程序并尝试回发用户时名称和密码,应用程序报告异常:

System.Data.SqlClient.SqlException:用户'NT AUTHORITY \ NETWORK SERVICE'登录失败

  • 使用IIS 7,每个进程都在网络服务帐户下运行...那么我需要为此帐户分配哪些权限才能让应用程序“联系”Sql server?


感谢名单


修改

您好,


它现在有效,但我不明白为什么机器帐户需要这些权利。我理解机器帐户需要一些权限才能与特定程序(Sql server)“交谈”,但为什么需要它访问数据库及其表的权限?是不是由连接字符串

中指定的帐户决定
<add name="MyConnection" connectionString="data source=localhost; integrated security=sspi; initial catalog=aspnetdb;" />

是否拥有对数据库及其表的适当访问权限?

7 个答案:

答案 0 :(得分:19)

您需要在SQL Server中为网络服务帐户实际创建一个帐户。然后,您将授予它对您的数据库的访问权限,您授予该帐户的特定权限取决于您的数据库需要执行的任务的性质。

您可以通过“安全”部分在SSMS中完成所有操作,右键单击“登录”并选择添加。您将添加Windows帐户,然后可以查找并验证名称“NETWORK SERVICE”。然后切换到“用户映射”部分并授予查看数据库的权限。我说的权限取决于您,或者您可以为其分配dbowner权限以进行完全控制。

这样做之后你会没事的。我小心不要给应用程序提供超出需要的权限!

答案 1 :(得分:9)

我个人会在自定义服务帐户下运行Web应用程序。如果您真的想在网络服务 - see this MSDN document下运行它。

答案 2 :(得分:8)

当您在连接字符串中指定“integrated security = sspi”时,我猜您期望冒充。但为此你应该: 1.在IIS中启用集成身份验证 2.在asp.net中打开windows auth:      3.在asp.net中打开imerposation:     

另外请注意,如果您的Web服务器和SQL Server计算机是不同的计算机,那还不够。然后,您的用户帐户将被要求信任委派。它是AD中的特殊选项。

所以,你已经说过,最好为SQLSRV连接分开帐户。 希望这会有所帮助。

答案 3 :(得分:3)

我建议您创建一个服务帐户,并让您的IIS 7进程以该帐户运行。确保该帐户具有对DB的正确访问权限(如果它只读取DB-REader)(如果它读取并更新了DB-Reader和DB-Writer)。

答案 4 :(得分:2)

我在新的IIS设置中遇到了同样的错误。我使用了“integrated security = false; User Id = sa; Password = yourpassword”,一切正常。

答案 5 :(得分:1)

使用IIS配置应用程序时会发生此错误,并且IIS转到SQL Server并尝试使用没有适当权限的凭据登录。 设置复制或镜像时也会发生此错误。

我将寻找一个始终有效且非常简单的解决方案。

转到SQL Server&gt;&gt;安全&gt;&gt;登录并右键单击NT AUTHORITY \ NETWORK SERVICE并选择Properties

在新打开的“登录属性”屏幕中,转到“用户映射”选项卡。然后,在“用户映射”选项卡上,选择所需的数据库 - 尤其是显示此错误消息的数据库。在下部屏幕上,检查角色db_owner。单击“确定”。

答案 6 :(得分:0)

我在SharePoint项目中遇到此问题。集成安全性已打开,数据库已配置为允许App Pool用户访问。

问题是当需要关闭时, on on < This answer让我朝着正确的方向前进:

WindowsImpersonationContext noImpersonateContext = null;

try
{
    noImpersonateContext = WindowsIdentity.Impersonate(IntPtr.Zero);
    using (SqlConnection conn = CreateConnection())
    {
        // database calls...
    }
}
finally
{
    if (noImpersonateContext != null) noImpersonateContext.Undo();
}