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 :
<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 :
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é.
Contactez nos experts, ils vous aideront avec plaisir.
Contacter