none
Benutzer aus der Applikation in SQL-Server-Datenbank anlegen mit dem Entity-Framework RRS feed

  • Frage

  • Hallo

    Ich möchte in einer bestehenden Applikation mit Entity-Framework (Self-Tracking-Entities) die aktuelle Benutzer-Verwaltung erweitern, so dass neue Benutzer auf dem SQL-Server bzw. für die Datenbank ebenfalls angelegt werden können - damit diese sich per "SQL-Server Authentifizierung" später anmelden können.

    Ich habe dazu leider noch gar keine Erfahrung, und darum die Bitte - vielleicht kann mir hier jemand weiterhelfen und mir ein paar grundlegende Infos dazu liefern; und wie ich vor allem auch dann das Benutzer-Konto via Entity-Framework auf dem Datenbank-Server erstellen kann.

    Vielen Dank vorweg schon mal  &  schönen Gruß

    Michael


    Michael Erlinger

    Samstag, 1. September 2012 18:42

Antworten

  • Folgenden Lösungsansatz verwende ich jetzt:

    try
                {
                    string command = string.Format("CREATE LOGIN {0} WITH PASSWORD='{1}'", loginName,password);
                    ObjectContext.ExecuteStoreCommand(command);
    
                    string cmdUserDb = string.Format("USE {0}", database);
                    ObjectContext.ExecuteStoreCommand(cmdUserDb);
    
                    string command2 = string.Format("CREATE USER {0} FOR LOGIN {1}", loginName, loginName);
                    ObjectContext.ExecuteStoreCommand(command2);
    
                    string cmdExec = string.Format("EXEC sp_addrolemember '{0}', '{1}'", "db_datareader", loginName);
                    ObjectContext.ExecuteStoreCommand(cmdExec);
    
                    cmdExec = string.Format("EXEC sp_addrolemember '{0}', '{1}'", "db_datawriter", loginName);
                    ObjectContext.ExecuteStoreCommand(cmdExec);
                }
                catch (Exception ex)
                {
                    throw ex;
                }


    Michael Erlinger

    • Als Antwort markiert M.Erlinger Donnerstag, 20. September 2012 14:25
    Donnerstag, 20. September 2012 14:25

Alle Antworten

  • Hallo Michael,

    ich glaube nicht, dass das Entity Framework Unterstützung zur Verwaltung von SQL Server Benutzern bietet.

    Wenn deine Anwendungsbenutzer sich auch direkt mit dem Datenbankserver verbinden dürfen, ist das eigentlich kein Hexenwerk, da Benutzername und Passwort identisch sein können.

    Ich gehe in meinen Anwendungen meist aber den Weg, dass ich zwar pro Anwendungsbenutzer auch einen SQL Benutzer erstelle, die Zugangsdaten kennt aber nur die Anwendung selbst. SQL Server Benutzername und Passwort sind in dem Fall separat von der Anwendung erzeugt worden und werden verschlüsselt in der Datenbank hinterlegt.

    In beiden Fällen werden nach dem Login an der Anwendung die SQL Anmeldedaten gelesen und die Verbindung damit aufgebaut.

    Um per SQL Logins und Benutzer zu verwalten, siehe:

      http://msdn.microsoft.com/de-de/library/ms173463.aspx


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Samstag, 1. September 2012 19:40
    Moderator
  • Folgenden Lösungsansatz verwende ich jetzt:

    try
                {
                    string command = string.Format("CREATE LOGIN {0} WITH PASSWORD='{1}'", loginName,password);
                    ObjectContext.ExecuteStoreCommand(command);
    
                    string cmdUserDb = string.Format("USE {0}", database);
                    ObjectContext.ExecuteStoreCommand(cmdUserDb);
    
                    string command2 = string.Format("CREATE USER {0} FOR LOGIN {1}", loginName, loginName);
                    ObjectContext.ExecuteStoreCommand(command2);
    
                    string cmdExec = string.Format("EXEC sp_addrolemember '{0}', '{1}'", "db_datareader", loginName);
                    ObjectContext.ExecuteStoreCommand(cmdExec);
    
                    cmdExec = string.Format("EXEC sp_addrolemember '{0}', '{1}'", "db_datawriter", loginName);
                    ObjectContext.ExecuteStoreCommand(cmdExec);
                }
                catch (Exception ex)
                {
                    throw ex;
                }


    Michael Erlinger

    • Als Antwort markiert M.Erlinger Donnerstag, 20. September 2012 14:25
    Donnerstag, 20. September 2012 14:25