我有一个我正在研究的ASP.NET MVC应用程序.我一直在使用IIS6和SQL 2008 Express在Windows Server 2003上进行开发,一切都运行良好.我最近决定试用Windows 7测试版,所以现在我正在使用IIS7,并且遇到了与我的数据库连接的问题,我似乎无法弄清楚.
我可以很好地运行/调试应用程序,但每当我尝试访问需要访问数据库的页面时,我都会收到以下错误:
"无法打开登录请求的数据库"MyDatabaseName".登录失败.用户'IIS APPPOOL\MyApplicationName'登录失败."
我显然有一些错误的安全配置设置,但我似乎找不到任何关于如何正确设置它的好文档.我试过在数据库上给予NETWORK SERVICE权限,但这似乎不起作用.任何人都知道我需要做什么来给这个数据库"IIS APPPOOL\MyApplicationName"权限?我错过了一些明显的东西吗
谢谢...
如果您不使用ActiveDirectory,请忽略上述所有其他解决方案.混乱源于IIS 7.5中新的ApplicationPoolIdentity设置默认值(MS不断更改身份机制)
打开SQL Management Studio,以管理员身份连接到本地计算机.
展开安全分支.
右键单击Logins并选择New Login
在" 登录名"字段中,键入" IIS APPPOOL\MyApplicationName ".千万不要点击搜索按钮.用户配置文件实际上并不存在于本地计算机上,而是根据需要动态创建.
该错误表示Web应用程序无权访问您的数据库.在Windows 7/IIS 7上,默认情况下每个应用程序池都有自己的用户.似乎这个想法是通过限制Web应用程序可以执行的操作来提高安全性(如果它从外部受到攻击和控制).您可以更改正在运行的应用程序池的用户,但这将破坏其自身的目的.更好的方法似乎是为池的用户提供所需的权限(而不是更多).
在SQL Management Studio上,连接到您希望Web应用程序连接的服务器(使用SQL Server 2008测试).去
Security -> Log ins
右键单击,新登录.在出现的表单中,除了用户名之外,将所有内容保留为默认值,您必须键入Web应用程序尝试使用的任何用户名,在本例中为"IIS APPPOOL\MyApplicationName".请注意,该对话框的搜索功能无法找到或检查该用户是否有效,但它仍然有效.
仍然在连接到服务器的SQL Management Studio上
Databases -> *YOUR-DATABASE* -> Security -> Users
右键单击和新用户.我不确定用户名字段是否有任何影响,我只是将其设置为用户名的最后一部分,如MyApplicationName.然后我将登录名设置为IIS APPPOOL\MyApplicationName.您可以单击...按钮并使用检查和搜索,这次它可以工作.如果您不执行上一步,则该用户将不在此处.然后为此用户提供您想要的任何权限,例如db_datareader.
就是这样,你得到了许可.如果缺少权限是你的问题,那么它应该被解决(或者至少,我刚刚解决了这个问题).
我总共有2小时的IIS经验和大约三个星期的SQL Server以及不到两个月的微软技术,所以我的建议很简单,我可能完全错了.(如果其他人可以确认这些是正确的步骤,请随时删除最后一个警告).