web-dev-qa-db-fra.com

Autorisation CREATE DATABASE refusée dans la base de données 'maître' (code EF en premier)

J'utilise le code d'abord dans mon projet et le déploie sur l'hôte, mais j'obtiens une erreur

Autorisation CREATE DATABASE refusée dans la base de données 'maître'.

Ceci est ma chaîne de connexion:

<add name="DefaultConnection" 
     connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-test-2012615153521;Integrated Security=False" 
     providerName="System.Data.SqlClient;User ID=test;Password=test"/>
48
Mohammad

J'ai eu le même problème. Ce qui a fonctionné pour moi:

  1. Accédez à SQL Server Management Studio et exécutez-le en tant que Administrator.
  2. Choisissez Sécurité -> Puis Connexions
  3. Choisissez le usernames ou les utilisateurs qui accéderont à votre base de données sous les noms d'utilisateur et double-cliquez dessus.
  4. Donnez-leur un rôle de serveur qui leur donnera les informations d'identification pour créer la base de données. Dans mon cas, public a déjà été vérifié. J'ai donc vérifié dbcreator et sysadmin.
  5. Exécutez à nouveau la base de données update sur la console du gestionnaire de packages. La base de données devrait maintenant être créée avec succès.

Voici une image pour que vous puissiez avoir une photo plus grande, j’ai bien sûr brouillé mes références:  enter image description here

36
Willy David Jr

Assurez-vous d’avoir l’autorisation de créer une base de données (comme mentionné par l’utilisateur2012810).

ou

Il semble que votre code utilise d'abord une autre chaîne de connexion (ou une chaîne par défaut) . Avez-vous défini le nom de la connexion sur votre classe de contexte?

public class YourContext : DbContext
    {
        public YourContext() : base("name=DefaultConnection")
        {

        }

        public DbSet<aaaa> Aaaas { get; set; }
    }
19
Shahab J

J'ai eu le même problème en essayant de créer une base de données en utilisant Code First (sans approche de base de données). Le problème est que EF ne dispose pas d’autorisations suffisantes pour créer une base de données pour vous.

J'ai donc progressé en utilisant le code d'abord (en utilisant une approche de base de données existante).

Pas : 

  1. Créez une base de données dans le studio de gestion de serveur SQL (de préférence sans tables).
  2. De retour sur Visual Studio, ajoutez une connexion à la base de données nouvellement créée dans l'explorateur de serveurs.
  3. Maintenant, utilisez la chaîne de connexion de la base de données et ajoutez-la dans app.config avec un nom comme "Connexion par défaut".
  4. Maintenant, dans la classe Context, créez-lui un constructeur, étendez-le depuis la classe de base et transmettez le nom de la chaîne de connexion en tant que paramètre . 

    public class DummyContext : DbContext
    {
      public DummyContext() : base("name=DefaultConnection")
      {
      }  
    }
    

5.Et exécutez maintenant votre code et voyez que les tables sont ajoutées à la base de données fournie.

15
Sarath Rachuri

Exécutez Visual Studio en tant qu'administrateur, cela a fonctionné pour moi

9
Marlon Vidal

Cette erreur peut également se produire si vous avez plusieurs projets dans la solution et si le mauvais est défini comme projet de démarrage.

Cela est important car la chaîne de connexion utilisée par Update-Database provient du projet de démarrage plutôt que du "Projet par défaut" sélectionné dans la console du gestionnaire de packages.

(crédits à masoud )

6
Roman Starkov

J'ai résolu ce problème à ma façon . Essayez la chaîne de connexion de cette façon:

<add name="MFCConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MFC.mdf;Initial Catalog=MFC;Integrated Security=false;User ID=sa;Password=123"
  providerName="System.Data.SqlClient" />

n'oubliez pas de définir la base de données par défaut du maître sur MFC (dans votre cas, aspnet-test-2012615153521).

5
cheny

Comme le suggère l'erreur, la connexion SQL n'a pas le droit de créer une base de données. Les autorisations sont accordées lorsque la connexion a les rôles requis. Le rôle autorisé à créer, modifier et supprimer une base de données est dbCreator . Par conséquent, il convient de l'ajouter à la connexion pour résoudre le problème. Cela peut être fait sur SQL Management Studio en cliquant avec le bouton droit de la souris sur l'utilisateur, puis en choisissant Propriétés> Rôles de serveur. J'ai rencontré la même erreur et l'ai résolue en faisant exactement cela.

3
cham

Vérifiez votre chaîne de connexion. Lorsqu'il pointe vers une base de données inexistante, EF tente de créer des tables dans la base de données master. Cette erreur peut se produire.
Dans mon cas, il y avait une faute de frappe dans le nom de la base de données.

1
Sam Sch

Si vous exécutez le site sous IIS, vous devrez peut-être définir l'identité du pool d'applications sur un administrateur. 

1
stuartdotnet

Étape 1: Déconnectez-vous de votre compte local.

Étape 2: connectez-vous à nouveau au serveur avec votre utilisateur administrateur

Étape 3: Explorateur d'objets -> Sécurité -> Connexions -> Faites un clic droit sur le nom de votre serveur -> Propriétés -> Rôles de serveur -> sysadmin -> OK

Étape 4: Déconnectez-vous et connectez-vous à votre connexion locale et créez une base de données.

Vérifiez que la chaîne de connexion est dans votre Web.Config. J'ai enlevé ce noeud et l'ai mis dans mon Web.Debug.config et c'est l'erreur que j'ai reçue. Je l'ai renvoyé à Web.config et j'ai bien travaillé.

1
scottndecker

Je vais ajouter ce que j'ai eu à faire, car il s'agit d'une fusion de ce qui précède ..___. J'utilise le code en premier, j'ai essayé d'utiliser 'create-database' mais j'ai l'erreur dans le titre .. .Fermé et rouvert (en tant qu'administrateur cette fois) - la commande n'a pas été reconnue, mais 'update-database' a été utilisé de telle manière. Même erreur.

Voici les étapes que j'ai prises pour le résoudre:

1) Ouverture de SQL Server Management Studio et création d'une base de données "Vidéos"

2) Explorateur de serveurs ouvert dans VS2013 (sous «Affichage») et connecté à la base de données.

3) Cliquez avec le bouton droit sur la connexion -> Propriétés et saisissez la chaîne de connexion.

4) Dans le web.config, j'ai ajouté la chaîne de connexion

   <connectionStrings>
<add name="DefaultConnection"
  connectionString="Data Source=MyMachine;Initial Catalog=Videos;Integrated Security=True" providerName="System.Data.SqlClient"
  />
  </connectionStrings>

5) Lorsque je configure le contexte, je dois faire référence à DefaultConnection:

using System.Data.Entity;

namespace Videos.Models
{
public class VideoDb : DbContext
{
    public VideoDb()
        : base("name=DefaultConnection")
    {

    }

    public DbSet<Video> Videos { get; set; }
}
}

6) Dans la console du gestionnaire de packages, exécutez 'update-database' pour créer la ou les tables.

N'oubliez pas que vous pouvez utiliser Seed () pour insérer des valeurs lors de la création, dans Configuration.cs:

        protected override void Seed(Videos.Models.VideoDb context)
        {
        context.Videos.AddOrUpdate(v => v.Title,
            new Video() { Title = "MyTitle1", Length = 150 },
            new Video() { Title = "MyTitle2", Length = 270 }
            );

        context.SaveChanges();
        }
1
VictorySaber

Exécutez Visual Studio en tant qu'administrateur et insérez votre identifiant d'authentification SQL SERVER (qui a le droit de créer une base de données) et votre mot de passe dans la chaîne de connexion, cela a fonctionné pour moi.

1
Alexandre le Grand

Pour moi, je ferme simplement toute la session en cours, y compris le SQL Server Management Studio puis je rouvre, puis le script ci-dessous fonctionne bien 

IF EXISTS (SELECT NAME FROM master.sys.sysdatabases WHERE NAME = 'MyDb')
DROP DATABASE mydb RESTORE DATABASE SMCOMDB FROM DISK = 'D:/mydb.bak' 
0
sam

La solution qui a fonctionné pour moi a consisté à utiliser la chaîne de connexion Entity Framework créée lors de la première utilisation de l'assistant de base de données lors de la création du fichier edmx. La chaîne de connexion requiert les références au fichier de métadonnées, telles que "métadonnées = res: // /PSEDM.csdl|res:// /PSEDM.ssdl|res://*/PSEDM.msl". En outre, la chaîne de connexion doit être dans la configuration de l'application appelante.

HT à ce poste pour m'avoir orienté dans cette direction: Model First avec DbContext, ne parvient pas à initialiser une nouvelle base de données

0
Corey

La solution à ce problème est aussi simple que de manger un morceau de gâteau. Ce problème se pose généralement lorsque vos informations d'identification d'utilisateur changent et que SQL Server n'est pas en mesure de vous identifier. Il n'est pas nécessaire de désinstaller l'instance de serveur SQL existante. Vous pouvez simplement installer une nouvelle instance avec un nouveau nom d'instance. Disons que si votre dernier nom d'instance était 'Sqlexpress', alors cette fois lors de l'installation, nommez votre instance comme 'Sqlexpress1'. N'oubliez pas également de sélectionner le mode de mixage (c'est-à-dire Authentification du serveur SQL et Authentification Windows) lors de l'installation et de fournir un mot de passe de l'administrateur système qui sera utile si un tel problème se produisait à l'avenir . Cette solution résoudra définitivement ce problème. . Merci.. 

0
user7556293

J'ai rencontré ce qui semblait être cette erreur. Je courais sur Windows et j'ai trouvé que mon utilisateur administrateur Windows ne disposait pas des privilèges d'administrateur pour la base de données.

  1. Arrêtez SQL Server à partir de ‘Services’

 Disable Services

  1. Ouvrez la fenêtre de commande (en tant qu'administrateur) et exécutez le mode mono-utilisateur en tant qu'administrateur local avec cette commande (la version de MSSQL peut être différente):
"C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\Binn\sqlservr.exe" -m -s SQLEXPRESS
  1. Ouvrir une autre fenêtre de commande (en tant qu'administrateur)
  2. Ouvrez sqlcmd sur ce terminal avec: 
sqlcmd -S .\SQLEXPRESS
  1. Ajoutez maintenant le rôle sysadmin à votre utilisateur:
sp_addsrvrolemember 'domain\user', 'sysadmin'
GO
  1. Réactiver SQL Server à partir de ‘Services’

Crédit pour: https://social.msdn.Microsoft.com/Forums/sqlserver/en-US/76fc84f9-437c-4e71-ba3d-3c9ae794a7c4/

0
Chris

Je n'ai aucune preuve de ma solution, juste des hypothèses.

Dans mon cas, cela est dû au nom de domaine dans la chaîne de connexion. Je suppose que si le serveur DNS n'est pas disponible, il ne parvient pas à se connecter à la base de données. Entity Framework tente donc de créer cette base de données. Mais la permission est refusée, ce qui est correct.

0
Tomas Kubes

J'ai eu le même problème et j'ai tout essayé sur Internet. Mais SSMS RUN AS ADMINISTRATOR fonctionne pour moi ... Si vous rencontrez toujours un problème, assurez-vous d'avoir téléchargé le serveur SQL.

0
Nikhil Tayal