none
Securitymode RRS feed

  • Frage

  • Moin,

    kann mir jemand sagen, wie man mit Hilfe von Transact-SQL den Securitymode des SQL-Servers lesen und einstellen kann? Also integriert / Datenbank / gemischt?

    Also nicht mit Hilfe irgendwelcher Tools oder SQLDMO, sondern "direkt"?

    Schöne Grüße aus Hamburg

    Jochen

    Montag, 8. August 2011 13:28

Antworten

  • Hallo Sansibla,

    mit T-SQL ist dies nicht so einfach zu bewerkstelligen, da es sich dabei um einen Installationsparameter handelt und nach einer Änderung auf alle Fälle ein Neustart des SQL-Server-Dienstes notwendig ist.

    siehe auch: http://msdn.microsoft.com/de-de/library/ms188670.aspx

    Wenn Du es jedoch unbedingt über T-SQL machen möchtest, kannst Du dies so machen.

    USE [master]
    GO
    EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', REG_DWORD, 2
    GO
    


    Dies beruht darauf das die Login Methode nur das setzen eines Registry-Schlüssels ist. Mit dem oben genannten Beispiel schaltest Du in den gemischten Authentifizierungs-Modus. Anschl. müsstest Du dann noch per T-SQL das SA Passwort vergeben. z.B.:

    ALTER LOGIN sa ENABLE ;
    GO
    ALTER LOGIN sa WITH PASSWORD = 'sa' ;
    GO
    


    Jetzt ist nur noch ein Neustart des SQL-Server Dienstes nötig und der gemischt Modus mit dem Benutzer SA und dem gesetzten Passwort steht Dir zur Verfügung.

     


    Gruß Falk
    Falk Krahl
    • Als Antwort markiert Sansibla Donnerstag, 11. August 2011 08:36
    Montag, 8. August 2011 14:20
  • Hallo Jochen,

    wie man den LoginMode einstellt und was dabei zu beachten ist, hat Falk Dir ja schon beschrieben.

    Lesen kann man die Einstellung etwas einfacher über die ServerProperty Funktion mit dem Property "IsIntegratedSecurityOnly":

    SELECT SERVERPROPERTY('IsIntegratedSecurityOnly') AS OnlyIntegrated
    


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    • Als Antwort markiert Sansibla Donnerstag, 11. August 2011 08:36
    Montag, 8. August 2011 15:57

Alle Antworten

  • Hallo Sansibla,

    mit T-SQL ist dies nicht so einfach zu bewerkstelligen, da es sich dabei um einen Installationsparameter handelt und nach einer Änderung auf alle Fälle ein Neustart des SQL-Server-Dienstes notwendig ist.

    siehe auch: http://msdn.microsoft.com/de-de/library/ms188670.aspx

    Wenn Du es jedoch unbedingt über T-SQL machen möchtest, kannst Du dies so machen.

    USE [master]
    GO
    EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', REG_DWORD, 2
    GO
    


    Dies beruht darauf das die Login Methode nur das setzen eines Registry-Schlüssels ist. Mit dem oben genannten Beispiel schaltest Du in den gemischten Authentifizierungs-Modus. Anschl. müsstest Du dann noch per T-SQL das SA Passwort vergeben. z.B.:

    ALTER LOGIN sa ENABLE ;
    GO
    ALTER LOGIN sa WITH PASSWORD = 'sa' ;
    GO
    


    Jetzt ist nur noch ein Neustart des SQL-Server Dienstes nötig und der gemischt Modus mit dem Benutzer SA und dem gesetzten Passwort steht Dir zur Verfügung.

     


    Gruß Falk
    Falk Krahl
    • Als Antwort markiert Sansibla Donnerstag, 11. August 2011 08:36
    Montag, 8. August 2011 14:20
  • Hallo Jochen,

    wie man den LoginMode einstellt und was dabei zu beachten ist, hat Falk Dir ja schon beschrieben.

    Lesen kann man die Einstellung etwas einfacher über die ServerProperty Funktion mit dem Property "IsIntegratedSecurityOnly":

    SELECT SERVERPROPERTY('IsIntegratedSecurityOnly') AS OnlyIntegrated
    


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    • Als Antwort markiert Sansibla Donnerstag, 11. August 2011 08:36
    Montag, 8. August 2011 15:57
  • Moin,

    und schönen Dank, beides hat mir sehr geholfen.

    Noch eine Rückfrage: "xp_instance_regwrite" verwendet nicht notwendigerweise den tatsächlichen Registrypfad, sondern versionsunabhängig den jeweils richtigen Pfad?

    Schon auf meinem Entwicklungsrechner ist der Pfad ein anderer, aber http://social.msdn.microsoft.com/Forums/en-US/sqlsetupandupgrade/thread/eda8fb3c-4c56-491d-a5d1-66d34fb6efa7/ scheint dsas ja ebenfalls so zu erläutern, oder?

    Schöne Grüße aus dem stürmischen Hamburg

    Jochen

    Dienstag, 9. August 2011 07:15
  • Hallo Sansibla,

    "xp_instance_regwrite" verwendet denn Pfad den Du angibst. Er sollte bei Dir eigentlich genauso sein, es sei denn Du hast eine Instanz installiert. In dem Falle ändert sich der Pfad fogender Maßen ab:

    N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\Microsoft SQL Server\<Instanzname>\MSSQLServer', N'LoginMode'

     


    Gruß Falk
    Falk Krahl
    Dienstag, 9. August 2011 10:49
  • "xp_instance_regwrite" verwendet denn Pfad den Du angibst. Er sollte bei Dir eigentlich genauso sein, es sei denn Du hast eine Instanz installiert. In dem Falle ändert sich der Pfad fogender Maßen ab:

    N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\Microsoft SQL Server\<Instanzname>\MSSQLServer', N'LoginMode'


    Leider ist xp_instance_regwrite /-read nicht dokumentiert, so dass man nichts genaues über die Funktion sagen kann. Aber mit xp_instance_regread kann man gefahrlos experimentieren.

    Das folgede Script liest das Backup-Verzeichnis aus der Registry aus. Wenn ich es unverändert lasse, also kein Instanzennamen im Pfad angebe, dann erhalte ich immer die Daten der Instanz, an der ich gerade aktuell angemeldet bin; egal ob Standard- oder benannte Instanz.

    DECLARE @dir nvarchar(100);
    
    EXEC master.sys.xp_instance_regread
       N'HKEY_LOCAL_MACHINE',N'Software\Microsoft\MSSQLServer\MSSQLServer'
       ,N'BackupDirectory'
       ,@dir output
    
    SELECT @dir
    

    Wo man den genauen Reg-Pfad angeben muss, ist xp_regwrite / xp_regread.


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Dienstag, 9. August 2011 15:46
  • Eine gute und oft übersehene Methode ist auch die Verwendung der Facets!
    Diese kann man teilweise auch für ältere Versionen anwenden, die dieses Feature noch nicht kannten.
    Siehe auch:
     
    Hierzu ruft man im Objekt Explorer mit einem Rechtsklick auf den Server die Einstellungen für "Facets" auf. Dort findet man das Facet "Servereinstellungen".
    Allerdings lässt sich der Login Mode hierüber nur anzeigen und nicht ändern.
     
    Einen schönen Tag noch,
    Christoph

    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu
    Mittwoch, 10. August 2011 07:07