13

我目前正在为我们的网站实施缓存机制。我想使用 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 身份验证。还尝试以管理员身份运行管理工作室,但仍然不高兴。有人可以指出我正确的方向。谢谢!

4

2 回答 2

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. 在数据库服务器上执行您对该帐户的授权:

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO "domain name\MyIISAccount"

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

两台服务器都不在域上(即,两者都是成员服务器)并且您想使用受信任的连接:

  1. 使用相同的用户名和密码在 Web 服务器和数据库服务器上创建一个本地帐户。至关重要的是,它们都具有相同的用户名和密码。该技术涉及使用 NTLM“直通”身份验证,该身份验证与用户名和密码创建的哈希相匹配,以确定用户是否在两个不同的服务器之间进行了身份验证。在 Windows 2008 R2 上,您可能需要跳过一些本地策略来确保在两台服务器之间启用 NTLM。
  2. 使用此帐户执行上述步骤 #2 至 #4。
  3. 在 SQL Server 上,确保此本地帐户具有登录名,并且此登录名映射到数据库中的用户。然后你会执行类似的东西:

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO 'SQLServerMachineName\AccountUsedBySite'

您想使用 SQL 帐户而不是受信任的连接:

  1. 在这种情况下,站点用于连接到数据库的连接字符串将包括用户名和密码,这些用户名和密码映射到 SQL Server 数据库上的登录名,该登录名映射到数据库中的用户(通常放在 db_owner 角色中以使其dbo)。这
  2. 假设凭证是正确的,您只需针对该用户执行您的授权:

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO 'SQLUserAccountUsedBySite'

IIS 和 SQL Server 在同一台计算机上,并且您希望使用受信任的连接

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

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO 'SQLServerMachineName\MyIISAccount'

于 2011-04-19T16:06:43.707 回答
2

试试这个:

向 [my_server_name\ASPNET] 授予订阅查询通知

于 2011-04-11T11:09:34.023 回答