Задача установки ПОДПИСАТЬСЯ ЗАПРОСИТЬ УВЕДОМЛЕНИЯ - PullRequest
12 голосов
/ 11 апреля 2011

В настоящее время я внедряю механизм кэширования для нашего сайта.Я хочу использовать функцию зависимости SQL Cache.Я запускаю следующую команду в Management Studio, и она не работает.

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 ]

12 голосов
/ 19 апреля 2011

Во-первых, кажется, вы пытаетесь предоставить разрешения учетной записи, под которой работает сайт. В IIS 6 и IIS7 они контролируются учетной записью, установленной в пуле приложений. Эта учетная запись использовала , чтобы быть ASPNET, но больше не по умолчанию. Вместо этого по умолчанию (начиная с .NET 2.0, я считаю) это NETWORK SERVICE. Однако, если вы используете IIS 7, это снова изменилось. По умолчанию в IIS7 он использует что-то, называемое ApplicationPoolIdentity, которое представляет собой свои собственные специальные учетные данные, созданные для каждого сайта. Если SQL Server находится на другом компьютере, а не на веб-сервере, вы столкнетесь с другой проблемой: все учетные данные являются локальными для компьютера.

Я бы рекомендовал сделать следующее в зависимости от настроек:

Оба сервера находятся в домене, и вы хотите использовать надежные соединения:

  1. Создайте учетную запись домена и поместите ее в Пользователи домена.
  2. На веб-сервере поместите эту учетную запись в группу IIS_IUSRS.
  3. Зайдите в пул приложений для сайта и измените учетную запись, под которой работает сайт, на эту учетную запись домена. Вы также должны убедиться, что эта учетная запись имеет соответствующие разрешения NTFS для файлов сайта. Если этот сайт выполняет запись только в базу данных, вы можете предоставить учетной записи доступ только для чтения к папке (папкам) с файлами сайта.
  4. Убедитесь, что строка соединения, используемая сайтом, сформирована для запроса доверенного соединения. (См. Www.connectionstrings.com для синтаксиса)
  5. На сервере базы данных выполните грант для этой учетной записи:

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO "domain name\MyIISAccount"

Могут также быть другие проблемы с Kerberos, связанные с тем, что оба сервера в домене могут потребовать создания SPN (имя участника службы).

Ни один из серверов не находится в домене (т.е. оба являются рядовыми серверами), и вы хотите использовать доверенные соединения:

  1. Создайте локальную учетную запись на веб-сервере и сервере базы данных с одинаковыми именем пользователя и паролем. Крайне важно, чтобы они оба имели одинаковые имя пользователя и пароль. Этот метод включает использование сквозной аутентификации NTLM, которая соответствует хешу, созданному из имени пользователя и пароля, чтобы определить, прошел ли аутентификация пользователя между двумя отдельными серверами. В Windows 2008 R2 вам, возможно, придется перепрыгнуть через несколько циклов локальной политики, чтобы убедиться, что NTLM включен между двумя серверами.
  2. Выполните шаги с 2 по 4 для этой учетной записи.
  3. На сервере SQL убедитесь, что эта локальная учетная запись имеет имя входа и что это имя входа сопоставлено с пользователем в базе данных. Тогда вы выполняете что-то вроде:

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO 'SQLServerMachineName\AccountUsedBySite'

Вы хотите использовать учетные записи SQL вместо надежного соединения:

  1. В этом сценарии строка соединения, используемая сайтом для подключения к базе данных, будет включать имя пользователя и пароль, которые сопоставляются с именем входа в базу данных SQL Server, которое сопоставляется с пользователем в базе данных (обычно в роли db_owner сделать это дбо). Это
  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'

2 голосов
/ 11 апреля 2011

Попробуйте это:

GRANT ПОДПИСЫВАЕТСЯ УВЕДОМЛЕНИЯ О ЗАПРОСАХ [my_server_name \ ASPNET]

...