2010-11-04 10 views
2

J'ai une application ASP.NET, en utilisant LINQ pour se connecter à une base de données SQL Server 2008 R2.Demande de l'autorisation de type 'System.Data.SqlClient.SqlClientPermission a échoué

Ma chaîne de connexion:

Data Source=[SqlServerIp];Initial Catalog=[databaseName]User Id=newLogin;Password=newPassword; 

Quand je Déployez l'application sur mon IIS local (qui est pas la même machine que le serveur de base de données), il fonctionne très bien, mais quand je déploie l'application sur d'autres IIS (le même machine SQL Server), il lance une exception:

System.Security.SecurityException: Demande d'autorisation de type « System.Data.SqlClient.SqlClientPermission, System.Data, version = 2.0.0.0, Culture = neutral , PublicKeyToken = b77a5c561934e089 'a échoué.

Quelqu'un sait comment le réparer? Peut-être est-ce dû à une mauvaise configuration d'IIS?

Répondre

0

Le contexte de sécurité sous lequel votre application ASP.net s'exécute n'a pas les autorisations pour charger cet assembly client sql. Le contexte out-of-the-box, ASPNET, le fait, donc il y a un problème de configuration personnalisée qui l'a cassé ... il est difficile de dire quoi sans être capable de regarder la boîte. Mais l'essentiel est que le contexte de sécurité de l'application n'a pas de perms pour cet assembly. Les étapes suivantes devraient vous permettre de travailler:

  1. Ecrire une page qui affiche le contexte de sécurité de l'application:

Response.Write(System.Security.Principal.Current().WindowsIdentity.Name);

  1. Ajouter à l'utilisateur le nom figure sur cette page aux administrateurs groupe. Cela devrait permettre à l'ensemble de se charger.

  2. Réduisez les autorisations de l'utilisateur spécifié à un minimum vers le bas à partir de l'administrateur.

3

Je recevrais cette erreur lorsque j'essayais d'exécuter un service Web en mode débogage. J'ai trouvé que c'était parce que le code était sur un lecteur réseau (dans mon cas, mes documents étaient sur le disque dur).

Je suggère de vérifier que le code n'est pas un lecteur réseau.

+0

Que faites-vous s'il est sur un lecteur réseau? Avoir le code sur un lecteur réseau est une configuration acceptable. il suffit de déplacer le code localement n'est pas une solution acceptable. – Snowburnt

1

j'avais fait face au même problème, et je résolus de cette façon:

Changer l'identité du pool d'applications que mon application utilise dans IIS pour compte préconstruites NetworkService. L'identité par défaut est ApplicationPoolIdentity et il semble qu'elle ne dispose pas de suffisamment de privilèges pour accéder aux ressources réseau.

+0

A travaillé pour moi aussi! Merci beaucoup! –

Questions connexes