Ответ 1
Аутентификация сайта не имеет ничего общего с аутентификацией между ASP и SQL. "Аутентификация форм" на самом деле не является формой подлинной аутентификации, это просто роль и членство в приложении ASP.Net, не связанное с инфраструктурой безопасности.
Когда вы запускаете свой сайт из Visual Studio, вы запускаете веб-сервер Visual Studio под своей собственной учетной записью, и этот веб-сервер будет аутентифицироваться на SQL Server с использованием NTLM/Kerberos, поскольку вы работаете под вашими учетными данными.
При посещении сайта из браузера ваш сайт запускается из пула приложений IIS с идентификатором указанного пула приложений, который обычно является локальным пользователем с именем IUSER _... Этот локальный пользователь при аутентификации с помощью SQL Server использование NTLM/Kerberos будет аутентифицироваться как анонимный пользователь, поскольку локальная учетная запись не имеет никакого значения на удаленном компьютере/домене, на котором размещен SQL Server.
Решение состоит в том, чтобы изменить идентификатор пула приложений для пользователя, который может аутентифицироваться с помощью SQL Server. Для этого хостинг-машина IIS должна быть присоединена к тому же домену, что и хост-машина SQL Server (или домен, который доверяет домену хост-компьютера SQL Server), и идентификатор пула приложений должен быть изменен на учетную запись в этом домене. Поэтому, если машина SQL Server работает на машине, подключенной к домену FOO, тогда:
- убедитесь, что машина IIS соединена с FOO
- создать пользователя домена FOO\MyWebApp
- измените идентификатор пула приложений на FOO\MyWebApp
- добавить логин SQL для FOO\MyWebApp
- предоставить необходимое разрешение в SQL для FOO\MyWebApp
Альтернатива использования проверки подлинности SQL плоха по нескольким причинам (возможность выставить пароль в web.config, возможность подвергать пароль при аутентификации на проводе). Если хостинг-машина IIS не подключена к домену, вы можете использовать зеркальные учетные записи (локальные учетные записи с одинаковым именем и паролем на хосте IIS и на узле SQL), но это также является недостатком: не может работать с Kerberos, пароль учетной записи должен быть синхронизированы на двух хостах и т.д.