#asp.net #sql-server-2008 #query-notifications
#asp.net #sql-server-2008 #запрос-уведомления
Вопрос:
В настоящее время я внедряю механизм кэширования для нашего сайта. Я хочу использовать функцию зависимости кэша SQL. Я запускаю следующую команду в management Studio, и она не работает.
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 с помощью администратора компьютера.
Также пробовал запускать management Studio от имени администратора и все еще не радовался.
Может кто-нибудь, пожалуйста, указать мне правильное направление.
Спасибо!
Комментарии:
1. Какая версия ASP.NET ? В какой версии IIS: IIS 6 или IIS 7?
2. @Thomas — asp.net 3.5 на IIS7
3. Если вы получаете неправильный синтаксис рядом с ‘SUBSCRIBE’ ‘, ошибка может быть в написании. В моем случае я написал уведомление, а не ИНСТРУКЦИИ.. ПРЕДОСТАВЛЕНИЕ УВЕДОМЛЕНИЙ О ПОДПИСКЕ НА ЗАПРОС [db_user_name] для меня прошло нормально.
Ответ №1:
Во-первых, похоже, что вы пытаетесь предоставить разрешения учетной записи, под которой запущен сайт. В IIS 6 и IIS7 они контролируются учетной записью, установленной в пуле приложений. Эта учетная запись использовалась, чтобы быть ASPNET
но больше не по умолчанию. Вместо этого по умолчанию (я полагаю, начиная с .NET 2.0) используется NETWORK SERVICE
. Однако, если вы используете IIS 7, это снова изменилось. По умолчанию в IIS7 используется нечто, называемое «ApplicationPoolIdentity», которое представляет собой собственные учетные данные, созданные для каждого сайта. Если SQL Server находится на компьютере, отличном от веб-сервера, вы столкнетесь с другой проблемой, которая заключается в том, что все учетные данные являются локальными для компьютера.
Я бы порекомендовал сделать следующее в зависимости от ваших настроек:
Оба сервера находятся в домене, и вы хотите использовать надежные подключения:
- Создайте учетную запись домена и перенесите ее в пользователи домена.
- На веб-сервере поместите эту учетную запись в группу IIS_IUSRS.
- Зайдите в пул приложений для сайта и измените учетную запись, под которой запущен сайт, на учетную запись этого домена. Вы также захотите убедиться, что эта учетная запись имеет надлежащие разрешения NTFS для файлов сайта. Если этот сайт выполняет запись только в базу данных, вы можете получить доступ к папкам с файлами сайта, используя учетную запись только для чтения.
- Убедитесь, что строка подключения, используемая сайтом, сформирована для запроса надежного соединения. (Смотрите www.connectionstrings.com для синтаксиса)
- На сервере базы данных выполните ваше предоставление этой учетной записи:
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO "domain nameMyIISAccount"
Также могут возникнуть другие проблемы Kerberos, связанные с тем, что оба сервера находятся в домене, и для этого может потребоваться создание SPN (имя участника-службы).
Ни один сервер не входит в домен (т. Е. оба являются серверами-участниками), и вы хотите использовать доверенные подключения:
- Создайте локальную учетную запись как на веб-сервере, так и на сервере базы данных с одинаковым именем пользователя и паролем. Очень важно, чтобы у них обоих были одинаковые имя пользователя и пароль. Этот метод включает в себя использование «сквозной» аутентификации NTLM, которая соответствует хэшу, созданному именем пользователя и паролем, чтобы определить, аутентифицирован ли пользователь между двумя удаленными серверами. В Windows 2008 R2 вам, возможно, придется обойти несколько локальных политик, чтобы убедиться, что NTLM включен между двумя серверами.
- Выполните шаги со 2 по 4 выше с этой учетной записью.
- На сервере SQL убедитесь, что у этой локальной учетной записи есть логин и что этот логин соответствует пользователю в базе данных. Затем вы должны выполнить что-то вроде:
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO 'SQLServerMachineNameAccountUsedBySite'
Вы хотите использовать учетные записи SQL вместо доверенного соединения:
- В этом сценарии строка подключения, используемая сайтом для подключения к базе данных, будет включать имя пользователя и пароль, которые соответствуют логину в базе данных SQL Server, который соответствует пользователю в базе данных (обычно вводится роль db_owner, чтобы сделать ее dbo). Это
- Предполагая, что учетные данные верны, вам нужно выполнить ваше разрешение только для этого пользователя:
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO 'SQLUserAccountUsedBySite'
Оба IIS и SQL Server находятся на одном компьютере, и вы хотите использовать доверенные подключения
- Создайте учетную запись локального пользователя и поместите ее в группу пользователей.
- Добавьте эту учетную запись в локальную группу IIS_IUSRS.
- Зайдите в пул приложений для сайта и измените учетную запись, под которой запущен сайт, на эту локальную учетную запись. Вы также захотите убедиться, что эта учетная запись имеет надлежащие разрешения NTFS для файлов сайта. Если этот сайт выполняет запись только в базу данных, вы можете получить доступ к папкам с файлами сайта, используя учетную запись только для чтения.
- Убедитесь, что строка подключения, используемая сайтом, сформирована для запроса надежного соединения. (Смотрите www.connectionstrings.com для синтаксиса)
- В SQL Server создайте логин для этой учетной записи, затем создайте пользователя в соответствующей базе данных для этой учетной записи, распределив его по соответствующим ролям.
- Теперь выполните ваше предоставление для этой учетной записи:
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO 'SQLServerMachineNameMyIISAccount'
Комментарии:
1. Спасибо за этот подробный ответ. Я начинаю понимать, что происходит. Что, если SQL Server и IIS находятся на одном физическом компьютере? Какой вариант был бы наилучшим?
2. @Elad Lachmi — Если SQL и IIS находятся на одном компьютере, это проще. По сути, вы хотите использовать второй набор опций с локальной учетной записью пользователя, игнорируя информацию о Kerberos и сквозной авторизации. Технически, можно использовать ApplicationPoolIdentity в SQL Server, но если вы не используете W2kR2, это будет проблематично. Проще просто добавить учетную запись, поместить ее в IIS_IUSRS, использовать в пуле приложений и добавить в нужную базу данных SQL Server.
3. @Elad Lachmi — Я добавил раздел для сценария, в котором IIS и SQL находятся в одном окне.
4. Мне потребовалось некоторое время, чтобы приступить к тестированию этого. Это сработало. Спасибо! Я уверен, что этот ответ также поможет многим людям в будущем.
Ответ №2:
Попробуйте это:
ПРЕДОСТАВЬТЕ УВЕДОМЛЕНИЯ О ПОДПИСКЕ НА ЗАПРОС [имя_сервера ASPNET]
Комментарии:
1. Я попробую это и сообщу об этом. Спасибо.
2. Нет. Это дает мне тот же результат, что и выше. Есть еще идеи? Спасибо!
3. Существует ли логин? ЕСЛИ нет, СОЗДАЙТЕ LOGIN [имя_сервера aspnet] Из WINDOWS С DEFAULT_DATABASE=[foo] и предоставьте ему права на вашу базу данных.
4. Я думал, идея заключалась в том, чтобы использовать значение по умолчанию asp.net идентификация и это позволит войти в систему через строку подключения по умолчанию в web.config, нет?