la meilleure façon de connecter le server sql (authentification Windows vs authentification SQL Server) pour l'application asp.net

J'ai une database et un site ayant l'authentification par formulaire. Cela fonctionne bien avec VS2008. Cette fois, j'utilise "Trusted_connection = True". Mais quand il est ouvert de l'extérieur ou directement à partir du browser, je reçois une erreur "login a échoué pour l'user 'NT AUTHORITY \ ANONYMOUS LOGON'."

Je sais que c'est dû à la permission. Le server SQL est basé sur l'authentification Windows.

  • Quelle est la meilleure approche pour gérer l'user pour se connecter à SQL Server?
  • Dois-je activer l'authentification SQL Server?

Dites-moi ce qu'il faut faire pour que la production se fasse sentir et qu'il n'y ait aucun problème lors du deployment.

Remarque: SQL Server est installé sur le server de domaine.

L'authentification du site n'a rien à voir avec l'authentification entre ASP et SQL. L''authentification par formulaires' n'est en fait pas une forme d'authentification véritable, c'est juste un rôle et une appartenance pour l'application ASP.Net, sans rapport avec l'infrastructure de security.

Lorsque vous exécutez votre site à partir de Visual Studio, vous lancez le server Web Visual Studio sous votre propre count, et ce server Web s'authentifiera auprès de SQL Server à l'aide de NTLM / Kerberos comme vous, puisqu'il s'exécute sous vos informations d'identification.

Lorsque vous visitez le site à partir du browser, votre site s'exécute à partir du pool d'applications IIS avec l'identité dudit pool d'applications, généralement un user local nommé IUSER _… Cet user local, lors de l'authentification avec SQL Server à l'aide de NTLM / Kerberos s'authentifiera en tant qu'user anonyme, car le count local n'a aucune signification sur l'ordinateur / domaine distant hébergeant le server SQL.

La solution consiste à modifier l'identité du pool d'applications pour un user qui peut s'authentifier avec le server SQL. Pour cela, la machine d'hébergement IIS doit être jointe au même domaine que la machine hôte de SQL Server (ou un domaine qui approuve le domaine de l'ordinateur hôte SQL Server) et l'identité du pool d'applications doit être changée en count de ce domaine. Donc, si la machine SQL Server s'exécute sur une machine jointe au domaine FOO, alors:

  • assurez-vous que la machine IIS est jointe à FOO
  • créer un user de domaine FOO \ MyWebApp
  • changer l'identité du pool d'applications en FOO \ MyWebApp
  • append un identifiant SQL pour FOO \ MyWebApp
  • accorder l'autorisation nécessaire dans SQL à FOO \ MyWebApp

L'alternative d'utiliser l'authentification SQL est mauvaise pour plusieurs raisons (potentiel d'exposer le mot de passe dans web.config, potentiel d'exposer le mot de passe lors de l'authentification sur le réseau). Si la machine d'hébergement IIS n'est pas jointe au domaine, vous pouvez utiliser des counts miroir (counts locaux avec le même nom et le même mot de passe sur l'hôte IIS et l'hôte SQL) mais également erronés: ne peut pas fonctionner avec Kerberos, le mot de passe du count doit être maintenu en synchronisation sur les deux hôtes etc.

Une approche consiste à créer un count de service pour l'application à utiliser. Vous créez le count dans Active Directory ou similaire. Dans IIS, définissez le pool d'applications pour qu'il fonctionne sous ce count de service. Dans SQL Server, accordez des permissions pour le count de service, directement ou en plaçant le count de service dans un rôle.

Voici un article sur la façon de faire cela .

Créez un count de service géré dans le domaine auquel appartient à la fois la machine SQL Server et la machine Web Server (IIS). Ensuite, exécutez le pool d'applications des servers Web sur le count de service géré. Créez une connection SQL Server à l'aide du count de service géré. Lisez l'article Technet suivant pour plus d'informations sur la création de counts de services gérés.

http://technet.microsoft.com/en-us/library/dd548356(v=ws.10).aspx