Benutzer mit den meisten Antworten
CREATE DATABASE Berechtigung verweigert

Frage
-
Guten Tag!
Meine Applikation soll ermöglichen, dass Datensätze in eine bestehende Tabelle eingetragen werden, und dort auch wieder gelöscht werden können. Hierfür habe ich über VisualStudio 2010 eine neues Element "Dienstbasierte Datenbank" hinzugefügt, und dort die entsprechende Tabelle "Mitgliedersuche" erstellt (Eine Primary Key Id, der Rest nvarchar(255). Dann habe ich eine neue Klasse erstellt:class KundenmeisterContext : DbContext { public DbSet<Mitglied> Mitgliedersuche { get; set; } }
In der Mitglied-Klasse habe ich ein zusätzliches Feld[Key] [DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)] public int Id { get; set; }
eingefügt, nachdem ich mir über NuGet die EntityFramework.dll 4.3.1.0 ins Projekt geholt habe.
In der Main-Methode erhoffte ich mir Ergebnisse für Einträge und Lösschen in der Tabelle mit folgendem Code:
// TODO: "Die CREATE-DATABASE-Berechtigung wurde in der 'master'-Datenbankverweigert" // Vorhandene Daten der letzten Suche aus der Datenbank enfernen. using (var db = new KundenmeisterContext()) { foreach (var item in db.Mitgliedersuche) { db.Mitgliedersuche.Remove(item); } db.SaveChanges(); Console.WriteLine("Alte Daten wurden aus Datenbank entfernt."); } // TODO: "Die CREATE-DATABASE-Berechtigung wurde in der 'master'-Datenbankverweigert" // Gefundene Mitglieder in der Datenbank abspeichern. using (var db = new KundenmeisterContext()) { foreach (var item in m1) { db.Mitgliedersuche.Add(item); } db.SaveChanges(); Console.WriteLine("Daten wurden in Datenbank gespeichert."); // Möglicher Ansatz, um gefundene Mitglieder alphabetisch von der Datenbank auszugeben. var mitglieder = from m in db.Mitgliedersuche orderby m.Name, m.Vorname select m; Console.WriteLine("Gefundene Mitglieder:"); foreach (var item in mitglieder) { Console.WriteLine(item.Id); Console.WriteLine(item.Titel); Console.WriteLine(item.Anrede); Console.WriteLine(item.Vorname); Console.WriteLine(item.Name); Console.WriteLine(item.Geburtsdatum); Console.WriteLine(item.Strasse); Console.WriteLine(item.Plz); Console.WriteLine(item.Ort); Console.WriteLine(item.Land); Console.WriteLine(item.ZweigstelleID); Console.WriteLine(item.Zweigstelle); Console.WriteLine(item.Funktion); Console.WriteLine(); } }
Leider verweigert er mir aber Einträge in die DB mit "Die CREATE-DATABASE-Berechtigung wurde in der 'master'-Datenbankverweigert" als Exception-Message.
Ich habe schon eine Weile herumgegoogelt, msdn (und mein Chef) schlagen z.B. vor, dass ich Visual Studio mit Administratorrechten starten soll (hab ich ja schon alles versucht). Ich verstehe einfach nicht, warum ich diese Rechteprobleme in meiner eigenen Applikation habe, und ja alles direkt aus VS erstellt habe.
Ich gebe noch den app.config-Eintrag an, den VS auch selbst erstellt hat:<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </configSections> <connectionStrings> <add name="KundenmeisterIF.Properties.Settings.JagdSVDBConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\JagdSVDB.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient" /> </connectionStrings> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> <parameters> <parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True" /> </parameters> </defaultConnectionFactory> </entityFramework> </configuration>
Vielen Dank im Voraus für Rat!
Martin
Antworten
-
Hallo Martin,
da Du DbContext verwendest, versucht das Entity Framework im Standard die Datenbank zu erstellen,
wozu sie naturgemäß die Berechtigungen dafür benötigt.
Um das Erzeugen zu unterdrücken, setze Database.SetInitializer auf Null.
Deine Verbindungszeichenfolge, die eine vorhandene anfügen möchte, passt wiederum nicht dazu,
siehe Entity Framework Connection StringsGruß Elmar
- Als Antwort markiert Martin Krainer Montag, 23. Juli 2012 15:06
-
hallo Martin,
ich gehe mal davon aus, dass Du Windows 7 mit UAC benutzt.
Probier mal SSMS mit dem gleichen Account via Windows Authentication und versucht dort eine neue DB zu erstellen - dies duerfte vermutlich ebenfalls eine Fehlermeldung ergeben.
Das Problem liegt dann darin, dass dein Windows Account nicht die benoetigten Berechtigungen hat, um eine neue DB zu erstellen.
Du wirst jetzt vermutlich einwenden, dass Du local Admin Rechte hast und daher denkst sysadmin Rechte auf dem SQL Server Express zu haben - dem ist aber wegen UAC nicht der Fall selbst wenn Du local Admin Gruppe vial BUILTIN\Administrators sysadmin Rechte haette, da UAC Dir diese wegnimmt.
Versuch daher mal, VS 2010 mit "Run as Administrator" zu starten und dann die App in VS2010 laufen zu lassen oder direkt deine app.exe mit "Run as Administrator" auszufuehren.
Um die Probleme mit UAC zu vermeiden, kannst Du einfach ein Login fuer dein windows account im SQL Server Express erstellen und diesem Login sysadmin privilege zuweisen.
Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.
- Als Antwort markiert Martin Krainer Montag, 23. Juli 2012 15:07
-
Hallo Martin,
das "pluralisieren" kann man dem Entity Framework abgewöhnen:
http://stackoverflow.com/questions/4425027/entity-framework-code-first-naming-conventions-back-to-plural-table-names
(und bei deutscher Benamsung ist das zu empfehlen).
Gruß Elmar
- Als Antwort markiert Martin Krainer Montag, 23. Juli 2012 15:49
Alle Antworten
-
Hallo Martin,
da Du DbContext verwendest, versucht das Entity Framework im Standard die Datenbank zu erstellen,
wozu sie naturgemäß die Berechtigungen dafür benötigt.
Um das Erzeugen zu unterdrücken, setze Database.SetInitializer auf Null.
Deine Verbindungszeichenfolge, die eine vorhandene anfügen möchte, passt wiederum nicht dazu,
siehe Entity Framework Connection StringsGruß Elmar
- Als Antwort markiert Martin Krainer Montag, 23. Juli 2012 15:06
-
Lieber Elmar,
also vielen Dank erstmal.
Woran es noch hapert, ist offensichtlich der connection string. Ich zeige mal den, den ich derzeit probiere:<configuration> <connectionStrings> <add name="KundenmeisterContext" providerName="System.Data.SqlClient" connectionString="Server=.\SQLEXPRESS;Database=JagdSVDB; Trusted_Connection=true;Integrated Security=False;MultipleActiveResultSets=True"/> </connectionStrings> </configuration>
Die Integrated Security hab ich auf False gesetzt, weil er sonst ja meint: Fehler beim zugrunde liegen Anbieter auf Open. Aber er meint halt immer noch, dass ihm der connectionString nicht passt (was ich aber als einen großen Fortschritt betrachte ;) ), obwohl ich deinem Link entsprechend modifiziert habe. Sehen Sie vielleicht etwas, dass ich nicht sehe?
Liebe Grüße
Martin -
hallo Martin,
ich gehe mal davon aus, dass Du Windows 7 mit UAC benutzt.
Probier mal SSMS mit dem gleichen Account via Windows Authentication und versucht dort eine neue DB zu erstellen - dies duerfte vermutlich ebenfalls eine Fehlermeldung ergeben.
Das Problem liegt dann darin, dass dein Windows Account nicht die benoetigten Berechtigungen hat, um eine neue DB zu erstellen.
Du wirst jetzt vermutlich einwenden, dass Du local Admin Rechte hast und daher denkst sysadmin Rechte auf dem SQL Server Express zu haben - dem ist aber wegen UAC nicht der Fall selbst wenn Du local Admin Gruppe vial BUILTIN\Administrators sysadmin Rechte haette, da UAC Dir diese wegnimmt.
Versuch daher mal, VS 2010 mit "Run as Administrator" zu starten und dann die App in VS2010 laufen zu lassen oder direkt deine app.exe mit "Run as Administrator" auszufuehren.
Um die Probleme mit UAC zu vermeiden, kannst Du einfach ein Login fuer dein windows account im SQL Server Express erstellen und diesem Login sysadmin privilege zuweisen.
Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.
- Als Antwort markiert Martin Krainer Montag, 23. Juli 2012 15:07
-
Hallo nochmals, Elmar und Daniel,
vielen Dank für eure Antworten.
Im Endeffekt hab ich dann sogar den Database.SetInitializer gar nicht mehr auf Null setzen müssen, die app.config war natürlich schon anzupassen, der Knackpunkt war aber [DataContract], das einem ohne Name-Angabe offensichtlich ein 's' anhängt. (Ich kann's leider nicht genauer beschreiben, da ich den Arbeits-PC schon runtergefahren habe).
Auf jeden Fall funkt's jetzt.
Liebe Grüße
Martin
-
Hallo Martin,
das "pluralisieren" kann man dem Entity Framework abgewöhnen:
http://stackoverflow.com/questions/4425027/entity-framework-code-first-naming-conventions-back-to-plural-table-names
(und bei deutscher Benamsung ist das zu empfehlen).
Gruß Elmar
- Als Antwort markiert Martin Krainer Montag, 23. Juli 2012 15:49