问题设置SUBSCRIBE QUERY NOTIFICATIONS

时间:2011-04-11 07:01:23

标签: asp.net sql-server-2008 query-notifications

我目前正在为我们的网站实施缓存机制。 我想使用SQL Cache依赖功能。 我在管理工作室运行以下命令,但它无法正常工作。

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO "my_server_name\ASPNET"

我得到的错误是:

Cannot find the user 'my_server_name\ASPNET', because it does not exist or you do not have permission.

我尝试使用特定数据库的管理员登录我正在为机器管理员设置通知,sa和windows身份验证。 还尝试以管理员身份运行管理工作室,但仍然不高兴。 有人可以指出我正确的方向。 谢谢!

2 个答案:

答案 0 :(得分:12)

首先,您似乎正在尝试向运行该网站的帐户授予权限。在IIS 6和IIS7中,这些是由应用程序池上设置的帐户控制的。该帐户使用ASPNET但不再默认使用。相反,默认(从我认为的.NET 2.0开始)是NETWORK SERVICE。但是,如果您使用的是IIS 7,则会再次发生变化。默认情况下,在IIS7中,它使用称为“ApplicationPoolIdentity”的东西,它是为每个站点创建的自己的特殊凭据。如果SQL Server与Web服务器位于不同的计算机上,则会遇到另一个问题,即凭据都是本机的本地凭据。

我的建议是根据您的设置执行以下操作:

两个服务器都在域上,您希望使用可信连接:

  1. 创建域帐户并将其放入域用户。
  2. 在Web服务器上,将此帐户放入IIS_IUSRS组。
  3. 进入该站点的应用程序池,并将运行该站点的帐户更改为此域帐户。您还需要确保此帐户对站点文件具有正确的NTFS权限。如果此站点仅写入数据库,则可以将该帐户以只读方式访问包含站点文件的文件夹。
  4. 确保形成站点使用的连接字符串以请求可信连接。 (有关语法,请参见www.connectionstrings.com)
  5. 在数据库服务器上执行您对此帐户的授予:
  6. GRANT SUBSCRIBE QUERY NOTIFICATIONS TO "domain name\MyIISAccount"

    可能还有其他Kerberos问题与域上的两个服务器相关,并且可能需要创建SPN(服务主体名称)。

    两个服务器都不在域上(即两者都是成员服务器),并且您希望使用可信连接:

    1. 使用相同的用户名和密码在Web服务器和数据库服务器上创建本地帐户。它们都具有相同的用户名和密码至关重要。此技术涉及使用NTLM“传递”身份验证,该身份验证与用户名和密码创建的哈希相匹配,以确定用户是否在两个绝对服务器之间进行身份验证。在Windows 2008 R2上,您可能必须跳过一些本地策略箍以确保在两个服务器之间启用NTLM。
    2. 使用此帐户执行上述步骤#2至#4。
    3. 在SQL Server上,确保此本地帐户具有“登录”,并且此登录名映射到数据库中的“用户”。然后你会执行类似的事情:
    4. GRANT SUBSCRIBE QUERY NOTIFICATIONS TO 'SQLServerMachineName\AccountUsedBySite'

      您希望使用SQL帐户而不是可信连接:

      1. 在此方案中,站点用于连接到数据库的连接字符串将包含用户名和密码,该用户名和密码映射到SQL Server数据库上的登录名,该数据库映射到数据库中的用户(通常放在db_owner角色中)使其成为dbo)。这个
      2. 假设凭据正确无误,您只需要对该用户执行授权:
      3. GRANT SUBSCRIBE QUERY NOTIFICATIONS TO 'SQLUserAccountUsedBySite'

        IIS和SQL Server都在同一台计算机上,您希望使用可信连接

        1. 创建本地用户帐户并将其放入“用户”组。
        2. 将此帐户放入本地IIS_IUSRS组。
        3. 进入该站点的应用程序池,并将运行该站点的帐户更改为此本地帐户。您还需要确保此帐户对站点文件具有正确的NTFS权限。如果此站点仅写入数据库,则可以将该帐户以只读方式访问包含站点文件的文件夹。
        4. 确保形成站点使用的连接字符串以请求可信连接。 (有关语法,请参见www.connectionstrings.com)
        5. 在SQL Server中,为此帐户创建一个登录名,然后在此帐户的相应数据库中创建一个用户,将其放入相应的角色。
        6. 现在执行此帐户的授权:
        7. GRANT SUBSCRIBE QUERY NOTIFICATIONS TO 'SQLServerMachineName\MyIISAccount'

答案 1 :(得分:2)

试试这个:

授予[my_server_name \ ASPNET]

的订阅查询通知