Ответ 1
Во-первых, похоже, вы пытаетесь предоставить разрешения для учетной записи, под которой работает сайт. В IIS 6 и IIS7 это управление учетной записью, установленной в пуле приложений. Эта учетная запись была ASPNET
, но больше не по умолчанию. Вместо этого по умолчанию (начиная с .NET 2.0, я считаю) NETWORK SERVICE
. Однако, если вы используете IIS 7, это снова изменилось. По умолчанию в IIS7 он использует что-то, называемое "ApplicationPoolIdentity", которое является его собственным специальным удостоверением, созданным для каждого сайта. Если SQL Server находится на другой машине, чем веб-сервер, вы столкнетесь с другой проблемой, которая является учетными данными, которые являются локальными для машины.
Моя рекомендация заключалась бы в следующем: в зависимости от вашей установки:
Оба сервера находятся в домене и вы хотите использовать надежные соединения:
- Создайте учетную запись домена и опустите ее в Domain Users.
- На веб-сервере отпустите эту учетную запись в группу IIS_IUSRS.
- Войдите в пул приложений для сайта и измените учетную запись, под которой сайт работает в этой учетной записи домена. Вы также захотите убедиться, что эта учетная запись имеет соответствующие разрешения NTFS для файлов сайта. Если этот сайт записывает только в базу данных, вы можете дать учетной записи доступ только для чтения к папкам (-ам) с файлами сайта.
- Убедитесь, что строка соединения, используемая сайтом, сформирована для запроса надежного соединения. (См. Www.connectionstrings.com для синтаксиса).
- На сервере базы данных выполните свой грант для этой учетной записи:
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO "domain name\MyIISAccount"
Также могут возникнуть другие проблемы Kerberos, связанные с тем, что оба сервера в домене могут потребовать создания SPN (имя участника службы).
Ни один сервер не входит в домен (т.е. оба являются серверами-членами), и вы хотите использовать доверенные соединения:
- Создайте локальную учетную запись как на веб-сервере, так и на сервере базы данных с тем же именем пользователя и паролем. Очень важно, чтобы оба они имели одинаковое имя пользователя и пароль. Этот метод включает в себя использование сквозной аутентификации NTLM, которая соответствует хешу, созданному по имени пользователя и паролю, чтобы определить, проходит ли аутентификация пользователя между двумя отдельными серверами. В Windows 2008 R2 вам может потребоваться выполнить несколько локальных политик, чтобы гарантировать, что NTLM включен между двумя серверами.
- С этой учетной записью выполните действия с №2 до №4.
- На SQL Server убедитесь, что у этой локальной учетной записи есть логин и что этот логин подключается к пользователю в базе данных. Затем вы выполните что-то вроде:
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO 'SQLServerMachineName\AccountUsedBySite'
Вы хотите использовать учетные записи 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 'SQLServerMachineName\MyIISAccount'