2017-09-15 3 views
0

J'utilise l'authentification Windows sur Active Directory dans mon site Web ASP.NET MVC. J'essaie maintenant de déployer le site à tester, mais le problème est que je reçois toujours l'exception suivante à la connexion:Échec de la connexion pour l'utilisateur IIS APPPOOL WebExploit

Impossible d'ouvrir la base de données "PrincipalServerDB" demandée par le login. La connexion a échoué. La connexion a échoué pour l'utilisateur 'IIS APPPOOL \ WebExploit'.

J'ai suivi ce tutoriel pour déployer à tester: https://docs.microsoft.com/en-us/aspnet/web-forms/overview/deployment/visual-studio-web-deployment/deploying-to-iis

Et j'utiliser l'authentification comme décrit ici: http://tech.trailmax.info/2016/03/using-owin-and-active-directory-to-authenticate-users-in-asp-net-mvc-5-application/ qui utilise l'authentification OWIN. Je suis conscient que ma question manque de compréhension, mais c'est parce que je ne comprends pas ce qui se passe. Je l'ai essayé en suivant les étapes décrites dans ce poste https://stackoverflow.com/a/7698316/4714502 mais je l'avais déjà fait un script Grant.sql d'accorder l'accès comme suit:

IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'IIS APPPOOL\DefaultAppPool') 
BEGIN 
    CREATE LOGIN [IIS APPPOOL\DefaultAppPool] 
     FROM WINDOWS WITH DEFAULT_DATABASE=[master], 
     DEFAULT_LANGUAGE=[us_english] 
    END 
    GO 
    CREATE USER [WebExploitUser] 
     FOR LOGIN [IIS APPPOOL\DefaultAppPool] 
    GO 
    EXEC sp_addrolemember 'db_owner', 'WebExploitUser' 
    GO 

Dans le premier tutoriel, ils disent:

Lors de l'exécution de l'application dans IIS sur votre ordinateur de développement, l'application accède à la base de données en utilisant les informations d'identification du pool d'applications par défaut. Cependant, par défaut, l'identité du pool d'applications n'a pas l'autorisation d'ouvrir les bases de données. Vous devez donc exécuter un script pour accorder cette autorisation. Dans cette section, vous allez créer le script que vous exécuterez plus tard pour vous assurer que l'application peut ouvrir les bases de données lorsqu'elle s'exécute dans IIS.

Cela signifie que c'est l'application qui a les droits non? Pas l'utilisateur réel? Ne sait pas comment résoudre ce problème ...

Si je regarde dans SSMS, dans mes propriétés PrincipalServerDB, les autorisations montrent WebExploitUser comme défini.

Voici mon pool d'applications dans IIS:

enter image description here

signifie 'Demarré' a commencé en français.

+1

Pouvez-vous vérifier dans IIS quel utilisateur est utilisé pour exécuter le pool d'applications? On dirait que c'est le 'IIS APPPOOL \ WebExploit'. Si c'est le cas, c'est le problème, car vous avez donné l'accès au compte IIS APPPOOL \ DefaultAppPool' à la base de données. Sinon, il y a quelque chose d'autre qui n'est pas configuré correctement. –

+0

@Jan_V J'ai les deux dans ma piscine d'applications. J'ai effectivement essayé d'exécuter le script de subvention avec IIS APPPOOL \ DefaultAppPool' et 'IIS APPPOOL \ WebExploit'. Je vais ajouter une capture d'écran de mon pool d'applications dans IIS –

Répondre

1

Si vous avez exécuté le code que vous avez publié tel quel, vous avez créé l'utilisateur dans la base de données master, et non dans votre base de données utilisateur. Vous devez donc le créer dans la base de données utilisateur et le supprimer de master.

Vous devez exécuter le code suivant:

use PrincipalServerDB; 
create user [IIS APPPOOL\WebExploit] from login [IIS APPPOOL\WebExploit]; 
EXEC sp_addrolemember 'db_owner', 'IIS APPPOOL\WebExploit'; 
+0

Ok, puis-je le faire directement dans SSMS? –

+0

Oui, bien sûr, vous pouvez l'exécuter dans SSMS – sepupic

+1

J'ai mis à jour ma réponse avec votre code pour rendre l'utilisateur db_owner de cette DB – sepupic