当我通过VS 2008运行Web应用程序时,应用程序能够登录到Sql server并检查用户输入的凭据(用户名和密码),但是当我通过IIS 7浏览到此应用程序并尝试回发用户时名称和密码,应用程序报告异常:
System.Data.SqlClient.SqlException:用户'NT AUTHORITY \ NETWORK SERVICE'登录失败
感谢名单
修改
您好,
它现在有效,但我不明白为什么机器帐户需要这些权利。我理解机器帐户需要一些权限才能与特定程序(Sql server)“交谈”,但为什么需要它访问数据库及其表的权限?是不是由连接字符串
中指定的帐户决定<add name="MyConnection" connectionString="data source=localhost; integrated security=sspi; initial catalog=aspnetdb;" />
是否拥有对数据库及其表的适当访问权限?
答案 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();
}