Support technique & informations

  1. Support
  2. Hébergement
  3. Hébergement Windows
  4. Comment corriger l’erreur de publication d’une application web avec Entity Framework ?

Comment corriger l’erreur de publication d’une application web avec Entity Framework ?


Cet article est destiné tout particulièrement à corriger l’erreur ci-dessous qui survient lors de la publication d’une application web avec .NET – Entity Framework et qui utilise SQL 2016.

System.Data.SqlClient.SqlException: CREATE DATABASE permission denied in database 'master'.


Qu’est ce qui se passe ?

Nos hébergements sont des hébergements partagés situés dans un environnement qui répond à des critères stricts de sécurité pour qu’un client ne puisse pas accéder au contenu et aux bases de données d’un autre client.

Dans ce cas bien précis, chaque SQL Login se voit attribué le statut DENY à la permission VIEW ANY DATABASE. Avec le statut DENY, vous ne pourrez voir aucune database sauf ‘master’ et ‘tempdb’.

Ainsi, lorsque vous tentez de lancer l’application, Entity Framework fait une requête à la table sysdatabases pour savoir si la base de données existe. Et ne la voyant pas, il essaye de la recréer depuis zéro. La permissions DBA ne permettant de créer une nouvelle base de données, la page web donne une erreur.

Ce phénomène ne se produit pas avec SQL 2014 puisqu’il existait un bug avec le statut DENY de la permission VIEW ANY DATABASE permettant de voir les metadata de toutes les bases de données dans la table sysdatabases de db Master.

Avec la version SQL 2016, le bug qui existait depuis SQL 2005 a été corrigé.

 

Quelle solution envisager ?

Pour utiliser Entity Framework avec nos hébergements mutualisés,, vous devez :

  • Créer une base de données depuis le panneau de contrôle
  • Créer toutes les structures de base de donnes avec le script SQL du panel de MylittleAdmin ou restaurer les bases de données depuis un back up existant.
  • Changer votre web.config pour désactiver db initializer des sections <contexts> et <appSettings>, comme dans l’exemple suivant :

 

<contexts>
<context type="ContosoUniversity.DAL.SchoolContext, ContosoUniversity">
   <!--<databaseInitializer type="ContosoUniversity.DAL.SchoolInitializer, ContosoUniversity" />-->
   </context>
</contexts>
<appSettings>
<add key="DatabaseInitializerForType ContosoUniversity.DAL.SchoolContext, ContosoUniversity" value="Disabled" />
</appSettings>

 

Guide propose par entity Framework :

http://www.entityframeworktutorial.net/code-first/turn-off-database-initialization-in-code-first.aspx

Dans ce cas, quand l’applicaton démarre, Entity Framework ne vérifiera pas l’existence de la base de données.

Solution de contournement :

Supprimer DENY des permissions VIEW ANY DATABASE dans le Login SQL.
Cela ne peut pas être appliqué dans un environnement d’hébergement mutualisé.


Cet article a-t-il été utile?

Vous n'avez pas trouvé la réponse à votre question ?

Contactez nos experts, ils vous aideront avec plaisir.

Contacter