我目前正在为我们的网站实现一个缓存机制。我想使用SQL缓存依赖特性。我在管理工作室运行以下命令,它不工作。
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO "my_server_nameASPNET"
得到的错误是:
Cannot find the user 'my_server_nameASPNET', because it does not exist or you do not have permission.
我尝试使用我正在设置通知的特定数据库的管理员登录,sa,并使用机器管理员进行windows身份验证。我也试过以管理员的身份运行管理工作室,但还是不开心。谁能给我指个正确的方向?谢谢你!
首先,看起来您正在尝试向运行站点的帐户授予权限。在iis6和IIS7中,这些由应用程序池上设置的帐户控制。该帐户使用作为ASPNET
,但不再默认使用。相反,默认值(我相信从。net 2.0开始)是NETWORK SERVICE
。但是,如果您使用的是IIS 7,情况又发生了变化。IIS7默认使用"ApplicationPoolIdentity",这是为每个站点创建的特殊凭据。如果SQL Server在与web服务器不同的机器上,您将遇到另一个问题,即凭据都是本机的。
我的建议是根据您的设置执行以下操作:
两个服务器都在一个域中,您想使用可信连接:
- 创建一个域帐户并将其放到domain Users中。
- 在web服务器上,将该帐号放到IIS_IUSRS组中。
- 进入该站点的应用程序池,并将运行该站点的帐户更改为此域帐户。您还需要确保该帐户对站点文件具有适当的NTFS权限。如果该站点只写入数据库,则可以给该帐户以只读权限访问包含站点文件的文件夹。
- 确保该站点使用的连接字符串是用来请求可信连接的。(语法见www.connectionstrings.com)
- 在数据库服务器上对该帐户执行授权:
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO "domain nameMyIISAccount"
还可能存在其他Kerberos问题,因为这两个服务器都在域中,并且可能需要创建SPN(服务主体名称)。
两个服务器都不在域中(即,两个服务器都是成员服务器),并且您希望使用可信连接:
- 在web服务器和数据库服务器上分别创建一个用户名和密码相同的本地帐户。重要的是,他们都有相同的用户名和密码。该技术涉及使用NTLM"直通"身份验证,该身份验证与用户名和密码创建的散列相匹配,以确定用户是否在两个不同的服务器之间进行了身份验证。在Windows 2008 R2上,您可能必须跳过一些本地策略环,以确保在两个服务器之间启用NTLM。
- 对该帐户执行上述步骤#2至#4。
- 在SQL Server上,确保此本地帐户具有登录名,并且该登录名映射到数据库中的用户。然后执行如下命令:
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO 'SQLServerMachineNameAccountUsedBySite'
您希望使用SQL帐户而不是可信连接:
- 在此场景中,站点用于连接数据库的连接字符串将包含一个用户名和密码,它们映射到SQL Server数据库上的登录,映射到数据库中的用户(通常放在db_owner角色中,使其为dbo)。这个
- 假设凭证是正确的,您只需要对该用户执行授权:
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO 'SQLUserAccountUsedBySite'
IIS和SQL Server都在同一台机器上,你想使用可信连接
- 创建本地用户帐户并将其拖放到Users组中。
- 将该帐户放入本地IIS_IUSRS组。
- 进入站点的应用程序池,并将运行站点的帐户更改为该本地帐户。您还需要确保该帐户对站点文件具有适当的NTFS权限。如果该站点只写入数据库,则可以给该帐户以只读权限访问包含站点文件的文件夹。
- 确保该站点使用的连接字符串是用来请求可信连接的。(语法见www.connectionstrings.com)
- 在SQL Server中,为该帐户创建一个登录,然后在相应的数据库中为该帐户创建一个用户,并将其放入相应的角色中。
- 现在执行你的授权给这个帐户:
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO 'SQLServerMachineNameMyIISAccount'
试试这个:
授予订阅查询通知给[my_server_nameASPNET]