问题设置SUBSCRIBE QUERY NOTIFICATIONS

Ela*_*hmi 13 asp.net sql-server-2008 query-notifications

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

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO "my_server_name\ASPNET"
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

Cannot find the user 'my_server_name\ASPNET', because it does not exist or you do not have permission.
Run Code Online (Sandbox Code Playgroud)

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

Tho*_*mas 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"

可能还存在与域上的两个服务器以及可能需要创建SPN(服务主体名称)的事实相关的其他Kerberos问题.

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

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

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO 'SQLServerMachineName\MyIISAccount'