4

J'ai récemment eu some problems que je pense pourrait être aidé en déboguant mon application ASP.NET MVC dans IIS au lieu du serveur de développement ASP.NET par défaut. Cependant, lorsque j'essaie cela, l'application ne peut pas accéder au serveur de base de données (MS SQL Server 2008 Express) - cela fonctionne bien sur le serveur de développement.Ajouter un utilisateur à SQL Server 2008 - autorisation refusée

L'erreur que je reçois est

Cannot open database 'myDbName' requested by the login. The login failed. Login failed for user 'NT INSTANCE/NETWORK SERVICE'.

Je suppose que cela a fonctionné avant que le serveur de développement accédé à la base de données via mon compte d'utilisateur, et non via le service de réseau comme IIS.

J'ai essayé d'ajouter l'utilisateur NETWORK SERVICE à la base de données, mais il s'avère que je n'ai pas les privilèges d'utilisateur pour le faire - ce n'est pas grave que mon compte Windows sur lequel je me connecte au serveur est admin, ou que je cours le programme dans un contexte d'administrateur. Je ne peux simplement pas ajouter un autre utilisateur à la base de données.

Comment résoudre ce problème?

Répondre

3

Vous pouvez modifier l'utilisateur sous lequel IIS s'exécute: il s'agit d'un paramètre dans les propriétés de l'ApplicationPool sous lequel votre site Web s'exécute.

Nous le faisons tout le temps car il nous permet de mieux contrôler l'accès des utilisateurs - qui compte NT INSTANCE/NETWORK SERVICE est un peu trop magique pour mon goût ...

1

NETWORK SERVICE est un compte spécial. Si votre serveur de base de données se trouve sur une autre machine de votre serveur IIS, vous devez ajouter le compte:

\ $ en tant qu'utilisateur pour la base de données. Donc, si vous êtes sur un serveur IIS appelé LISA sur le réseau SPRINGFIELD, vous devrez accorder l'accès à SPRINGFIELD \ LISA $ à votre base de données. Notez le signe dollar qui désigne votre utilisateur en tant que compte machine et non une personne réelle.

Si votre serveur de base de données et votre serveur IIS sont identiques, accordez l'accès au compte "NT AUTHORITY \ NETWORK SERVICE". C'est tout le nom du compte. Et cela devrait fonctionner.

+0

C'est le problème - je ne suis pas autorisé à accorder l'accès à tous les comptes d'utilisateurs. La suggestion de teedyay (modification de l'utilisateur par défaut dans le pool d'applications dans IIS) a résolu le problème. Y at-il des inconvénients évidents avec cette solution de contournement que je devrais être au courant de? –

+0

Non, tant que vous gérez correctement le compte, c'est une bonne solution. Dommage que vous n'avez pas de DBA qui pourrait mettre en place pour vous si vous n'avez pas l'accès! –

+0

La chose est, ceci est mon ordinateur portable privé que j'utilise pour le développement de passe-temps. Je suis le seul à accéder au site, et il n'est accessible que localement - je veux juste que ce soit capable de tester les choses dans un environnement dans lequel il est vraiment supposé pouvoir fonctionner. –

0

Courez-vous un système d'exploitation non-anglais ?

Pour certaines raisons, le nom de compte "NT Authority \ Network Service" a été localisé dans d'autres langues. Malheureusement, beaucoup de programmes ont le nom de compte codé en dur au nom anglais, et ne trouveront pas le service de réseau lors de l'exécution sur des versions étrangères de Windows.

+1

Je cours en fait sur une version suédoise de Windows Vista, mais j'en ai tenu compte. J'ai traduit le message d'erreur afin que vous puissiez le lire ...;) –

+0

Je ne parle pas du message d'erreur: quelqu'un à MS a décidé de traduire les noms de connexion du compte - problème, certains logiciels ont les noms de compte en anglais codés en dur, et ne fonctionneront pas sur les versions localisées de Windows. Rappelez-vous, ils n'ont pas seulement traduit les noms d'affichage, ils ont également traduit les noms de connexion, qui sont utilisés par les logiciels pour identifier ces comptes. – Sam