Wie erteile ich mir Administratorzugriff auf eine lokale SQL Server-Instanz?

92

Ich habe SQL Server 2008 R2 auf meinem lokalen Computer installiert. Ich kann jedoch aufgrund von Rechten (oder fehlenden Rechten) keine neue Datenbank erstellen.

"ERSTELLUNG DER DATENBANKERLAUBNIS VERWEIGERT"

Daher habe ich versucht, meinem aktuellen Login die Administratorrechte zuzuweisen

"Der Benutzer hat keine Berechtigung zum Ausführen dieser Aktion."

Ich habe auch versucht, ein neues Login zu erstellen, das Administratorrechte hat, aber ohne Glück. Wie erteile ich mir Administratorrechte, damit ich eine Datenbank erstellen kann? Ich kann neu installieren, aber ich bevorzuge es nicht.

SkonJeet
quelle
1
Versuchen Sie, eine Verbindung über die SQL Server-Authentifizierung oder die Windows-Authentifizierung herzustellen?
Darren
Windows-Authentifizierung (siehe Titel). Ich verbinde mich erfolgreich. Die Fehler stammen aus dem Versuch, Verwaltungsaufgaben auszuführen.
SkonJeet

Antworten:

70

Ja, anscheinend haben Sie vergessen, sich bei der Installation von SQL Server der Sysadmin-Rolle hinzuzufügen. Wenn Sie ein lokaler Administrator auf Ihrem Computer sind, können Sie mit diesem Blogbeitrag mithilfe von SQLCMD Ihr Konto in die SQL Server-Systemadministratorgruppe aufnehmen, ohne es neu installieren zu müssen. Wenn Sie mich fragen, ist dies eine Sicherheitslücke in SQL Server, aber in diesem Fall hilft es Ihnen weiter.

Brian Knight
quelle
15
Es ist keine Sicherheitslücke, lokale Administratoren müssen Rechte an SQL Server haben. Tatsächlich kann ein lokaler Administrator ohnehin auf die Daten von SQL Server zugreifen, indem er die Datendateien auf einen anderen Computer kopiert (und dann bei Bedarf zurückkopiert) Ihre einzige Möglichkeit, dies zu
umgehen,
DAS soll einfacher sein als deinstallieren / neu installieren? Kaum! In meinem Fall wurden wir auf eine andere Domain migriert. Alle vorhandenen Logins sind wertlos.
dudeNumber4
8
Link ist tot (und Antworten nur auf Links werden nicht empfohlen). stackoverflow.com/a/9889484/389424 hat die gleichen Anweisungen wie der ursprüngliche Blog-Beitrag
janv8000
80

Öffnen Sie ein Eingabeaufforderungsfenster. Wenn bereits eine Standardinstanz von SQL Server ausgeführt wird, führen Sie den folgenden Befehl an der Eingabeaufforderung aus, um den SQL Server-Dienst zu beenden:

net stop mssqlserver

Wechseln Sie nun in das Verzeichnis, in dem der SQL Server installiert ist. Das Verzeichnis kann beispielsweise eines der folgenden sein:

C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn

Finden Sie Ihr MSSQL-Verzeichnis heraus und legen Sie CDes als solches ab:

CD C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn

Führen Sie nun den folgenden Befehl aus, um SQL Server im Einzelbenutzermodus zu starten. Wie SQLCMDangegeben, kann nur eine SQLCMDVerbindung hergestellt werden (über ein anderes Eingabeaufforderungsfenster).

sqlservr -m"SQLCMD"

Öffnen Sie nun ein anderes Eingabeaufforderungsfenster als denselben Benutzer wie den, der SQL Server im Einzelbenutzermodus oben gestartet hat, und führen Sie darin Folgendes aus:

sqlcmd

Und drücken Sie die Eingabetaste. Jetzt können Sie SQL-Anweisungen für die SQL Server-Instanz ausführen, die im Einzelbenutzermodus ausgeführt wird:

create login [<<DOMAIN\USERNAME>>] from windows;

-- For older versions of SQL Server:
EXEC sys.sp_addsrvrolemember @loginame = N'<<DOMAIN\USERNAME>>', @rolename = N'sysadmin';

-- For newer versions of SQL Server:
ALTER SERVER ROLE [sysadmin] ADD MEMBER [<<DOMAIN\USERNAME>>];

GO

Quelle .

AKTUALISIERT Vergessen Sie kein Semikolon nach ALTER SERVER ROLE [sysadmin] ADD MEMBER [<<DOMAIN\USERNAME>>];und fügen Sie kein zusätzliches Semikolon nach hinzu, da GOder Befehl sonst nie ausgeführt wird.

Darren
quelle
Kurzer Hinweis, dass sp_addsrvrolemember durch ersetzt wurde ALTER SERVER ROLE. zBALTER SERVER ROLE [sysadmin] ADD MEMBER [domain\username]
Fermin
Vergessen Sie nicht, das GO;am Ende hinzuzufügen
NMrt
Angesichts der Tatsache, dass viele von uns jetzt SQL Server ohne SSMS ausführen, halte ich dies für eine viel bessere Antwort.
Chaim Eliyah
38

Ich habe eine SQL 2012-Datenbank übernommen, in der ich kein Systemadministrator, sondern Administrator auf dem Computer war. Ich habe SSMS mit "Als Administrator ausführen" verwendet, mein NT-Konto als SQL-Anmeldung hinzugefügt und die Serverrolle auf "sysadmin" gesetzt. Kein Problem.

Vince P.
quelle
14
Diese Lösung funktionierte für mich mit einem zusätzlichen Schritt: Der SQL Server musste im Einzelbenutzermodus durch Hinzufügen des Flags "-m" gestartet werden. Dies kann mit dem "SQL Server Configuration Manager" erfolgen, klicken Sie mit der rechten Maustaste auf die Serverinstanz und wählen Sie Eigenschaften aus, wechseln Sie zur Registerkarte "Startparameter" und fügen Sie -m hinzu.
Maets
Das ist fantastisch. So viel einfacher als die anderen Antworten.
McKay
Auf jeden Fall am schnellsten und am besten von allen Antworten
Johnny
Ziemlich unkompliziert und wirkt wie ein Zauber. Danke Vince und Maets.
Edgar Salazar
1
Dies ist eigentlich die richtige Antwort. Ein Hinweis: Um SQL in den Einzelbenutzermodus zu bringen, musste ich> net stop MSSQL $ SQLEXPRESS ausführen und dann> net start MSSQL $ SQLEXPRESS / m
Ev.
29

Hier ist ein Skript, das behauptet, dies beheben zu können.

Mit diesem einfachen Skript erhalten Sie Administratorrechte für Ihren lokalen SQL Server Express

Download-Link zum Skript

Beschreibung

Mit diesem Befehlsskript können Sie sich ganz einfach der Sysadmin-Rolle einer lokalen SQL Server-Instanz hinzufügen. Sie müssen Mitglied der lokalen Windows-Administratorgruppe sein oder Zugriff auf die Anmeldeinformationen eines Benutzers haben. Das Skript unterstützt SQL Server 2005 und höher.

Das Skript ist am nützlichsten, wenn Sie als Entwickler versuchen, SQL Server 2008 Express zu verwenden, das von einer anderen Person installiert wurde. In dieser Situation haben Sie normalerweise keine Administratorrechte für die SQL Server 2008 Express-Instanz, da standardmäßig nur der Person, die SQL Server 2008 installiert, Administratorrechte gewährt werden.

Der Benutzer, der SQL Server 2008 Express installiert hat, kann SQL Server Management Studio verwenden, um Ihnen die erforderlichen Berechtigungen zu erteilen. Was aber, wenn SQL Server Management Studio nicht installiert wurde? Oder schlimmer, wenn der installierende Benutzer nicht mehr verfügbar ist?

Dieses Skript behebt das Problem mit nur wenigen Klicks!

Hinweis: Sie müssen der BAT-Datei einen 'Instanznamen' geben (wahrscheinlich 'MSSQLSERVER' - aber möglicherweise nicht): Sie können den Wert erhalten, indem Sie zuerst Folgendes in der "Microsoft SQL Server-Verwaltungskonsole" ausführen ":

 SELECT @@servicename

Kopieren Sie dann das Ergebnis, das verwendet werden soll, wenn die BAT-Datei zur Eingabe des Namens der SQL-Instanz auffordert.

  @echo off 
    rem 
    rem **************************************************************************** 
    rem 
    rem    Copyright (c) Microsoft Corporation. All rights reserved. 
    rem    This code is licensed under the Microsoft Public License. 
    rem    THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF 
    rem    ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY 
    rem    IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR 
    rem    PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. 
    rem 
    rem **************************************************************************** 
    rem 
    rem CMD script to add a user to the SQL Server sysadmin role 
    rem 
    rem Input:  %1 specifies the instance name to be modified. Defaults to SQLEXPRESS. 
    rem         %2 specifies the principal identity to be added (in the form "<domain>\<user>"). 
    rem            If omitted, the script will request elevation and add the current user (pre-elevation) to the sysadmin role. 
    rem            If provided explicitly, the script is assumed to be running elevated already. 
    rem 
    rem Method: 1) restart the SQL service with the '-m' option, which allows a single connection from a box admin 
    rem            (the box admin is temporarily added to the sysadmin role with this start option) 
    rem         2) connect to the SQL instance and add the user to the sysadmin role 
    rem         3) restart the SQL service for normal connections 
    rem 
    rem Output: Messages indicating success/failure. 
    rem         Note that if elevation is done by this script, a new command process window is created: the output of this 
    rem         window is not directly accessible to the caller. 
    rem 
    rem 
    setlocal 
    set sqlresult=N/A 
    if .%1 == . (set /P sqlinstance=Enter SQL instance name, or default to SQLEXPRESS: ) else (set sqlinstance=%1) 
    if .%sqlinstance% == . (set sqlinstance=SQLEXPRESS) 
    if /I %sqlinstance% == MSSQLSERVER (set sqlservice=MSSQLSERVER) else (set sqlservice=MSSQL$%sqlinstance%) 
    if .%2 == . (set sqllogin="%USERDOMAIN%\%USERNAME%") else (set sqllogin=%2) 
    rem remove enclosing quotes 
    for %%i in (%sqllogin%) do set sqllogin=%%~i 
    @echo Adding '%sqllogin%' to the 'sysadmin' role on SQL Server instance '%sqlinstance%'. 
    @echo Verify the '%sqlservice%' service exists ... 
    set srvstate=0 
    for /F "usebackq tokens=1,3" %%i in (`sc query %sqlservice%`) do if .%%i == .STATE set srvstate=%%j 
    if .%srvstate% == .0 goto existerror 
    rem 
    rem elevate if <domain/user> was defaulted 
    rem 
    if NOT .%2 == . goto continue 
    echo new ActiveXObject("Shell.Application").ShellExecute("cmd.exe", "/D /Q /C pushd \""+WScript.Arguments(0)+"\" & \""+WScript.Arguments(1)+"\" %sqlinstance% \""+WScript.Arguments(2)+"\"", "", "runas"); >"%TEMP%\addsysadmin{7FC2CAE2-2E9E-47a0-ADE5-C43582022EA8}.js" 
    call "%TEMP%\addsysadmin{7FC2CAE2-2E9E-47a0-ADE5-C43582022EA8}.js" "%cd%" %0 "%sqllogin%" 
    del "%TEMP%\addsysadmin{7FC2CAE2-2E9E-47a0-ADE5-C43582022EA8}.js" 
    goto :EOF 
    :continue 
    rem 
    rem determine if the SQL service is running 
    rem 
    set srvstarted=0 
    set srvstate=0 
    for /F "usebackq tokens=1,3" %%i in (`sc query %sqlservice%`) do if .%%i == .STATE set srvstate=%%j 
    if .%srvstate% == .0 goto queryerror 
    rem 
    rem if required, stop the SQL service 
    rem 
    if .%srvstate% == .1 goto startm 
    set srvstarted=1 
    @echo Stop the '%sqlservice%' service ... 
    net stop %sqlservice% 
    if errorlevel 1 goto stoperror 
    :startm 
    rem 
    rem start the SQL service with the '-m' option (single admin connection) and wait until its STATE is '4' (STARTED) 
    rem also use trace flags as follows: 
    rem     3659 - log all errors to errorlog 
    rem     4010 - enable shared memory only (lpc:) 
    rem     4022 - do not start autoprocs 
    rem 
    @echo Start the '%sqlservice%' service in maintenance mode ... 
    sc start %sqlservice% -m -T3659 -T4010 -T4022 >nul 
    if errorlevel 1 goto startmerror 
    :checkstate1 
    set srvstate=0 
    for /F "usebackq tokens=1,3" %%i in (`sc query %sqlservice%`) do if .%%i == .STATE set srvstate=%%j 
    if .%srvstate% == .0 goto queryerror 
    if .%srvstate% == .1 goto startmerror 
    if NOT .%srvstate% == .4 goto checkstate1 
    rem 
    rem add the specified user to the sysadmin role 
    rem access tempdb to avoid a misleading shutdown error 
    rem 
    @echo Add '%sqllogin%' to the 'sysadmin' role ... 
    for /F "usebackq tokens=1,3" %%i in (`sqlcmd -S np:\\.\pipe\SQLLocal\%sqlinstance% -E -Q "create table #foo (bar int); declare @rc int; execute @rc = sp_addsrvrolemember '$(sqllogin)', 'sysadmin'; print 'RETURN_CODE : '+CAST(@rc as char)"`) do if .%%i == .RETURN_CODE set sqlresult=%%j 
    rem 
    rem stop the SQL service 
    rem 
    @echo Stop the '%sqlservice%' service ... 
    net stop %sqlservice% 
    if errorlevel 1 goto stoperror 
    if .%srvstarted% == .0 goto exit 
    rem 
    rem start the SQL service for normal connections 
    rem 
    net start %sqlservice% 
    if errorlevel 1 goto starterror 
    goto exit 
    rem 
    rem handle unexpected errors 
    rem 
    :existerror 
    sc query %sqlservice% 
    @echo '%sqlservice%' service is invalid 
    goto exit 
    :queryerror 
    @echo 'sc query %sqlservice%' failed 
    goto exit 
    :stoperror 
    @echo 'net stop %sqlservice%' failed 
    goto exit 
    :startmerror 
    @echo 'sc start %sqlservice% -m' failed 
    goto exit 
    :starterror 
    @echo 'net start %sqlservice%' failed 
    goto exit 
    :exit 
    if .%sqlresult% == .0 (@echo '%sqllogin%' was successfully added to the 'sysadmin' role.) else (@echo '%sqllogin%' was NOT added to the 'sysadmin' role: SQL return code is %sqlresult%.) 
    endlocal 
    pause
Chris Gessler
quelle
2
Hat für mich gearbeitet. Eine Sache zu beachten, stellen Sie sicher, dass Sie die .js-Erweiterung der zugeordnet haben, Microsoft ® Windows Based Script Hostsonst funktioniert dieser Voodoo nicht (ich hatte meine auf notepad.exe zugeordnet).
Phil Cooper
2
Links sind tot - "Die Archivgalerie wurde zurückgezogen".
stuartd
3
@ Stuartd - fügte das Skript hinzu
Chris Gessler
Wenn Sie Probleme haben, sich mit dem obigen Skript als Administrator hinzuzufügen. Versuchen Sie, Ihr Login zur Datenbank hinzuzufügen, und führen Sie dann das Skript aus.
Ram
2
Jemand hat dies zu GitHub hinzugefügt. Dieses Skript ist eine echte Zeitersparnis. gist.github.com/wadewegner/1677788
Patrick
6

Microsoft hat einen Artikel zu diesem Problem. Es geht alles Schritt für Schritt durch.

https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/connect-to-sql-server-when-system-administrators-are-locked-out

Kurz gesagt, es geht darum, die Instanz von sqlserver mit -mallen anderen Antworten zu starten . Microsoft bietet jedoch etwas detailliertere Anweisungen.

Starten Sie auf der Startseite SQL Server Management Studio. Wählen Sie im Menü Ansicht die Option Registrierte Server. (Wenn Ihr Server noch nicht registriert ist, klicken Sie mit der rechten Maustaste auf Lokale Servergruppen, zeigen Sie auf Aufgaben, und klicken Sie dann auf Lokale Server registrieren.)

Klicken Sie im Bereich Registrierte Server mit der rechten Maustaste auf Ihren Server, und klicken Sie dann auf SQL Server Configuration Manager. Dies sollte um Erlaubnis bitten, als Administrator ausgeführt zu werden, und dann das Configuration Manager-Programm öffnen.

Schließen Sie Management Studio.

Wählen Sie in SQL Server Configuration Manager im linken Bereich SQL Server Services aus. Suchen Sie im rechten Bereich Ihre Instanz von SQL Server. (Die Standardinstanz von SQL Server enthält (MSSQLSERVER) nach dem Computernamen. Benannte Instanzen werden in Großbuchstaben mit demselben Namen wie in registrierten Servern angezeigt.) Klicken Sie mit der rechten Maustaste auf die Instanz von SQL Server, und klicken Sie dann auf Eigenschaften.

Geben Sie auf der Registerkarte Startparameter im Feld Startparameter angeben den Wert -m ein, und klicken Sie dann auf Hinzufügen. (Das ist ein Bindestrich, dann Kleinbuchstabe m.)

Hinweis

Für einige frühere Versionen von SQL Server gibt es keine Registerkarte Startparameter. Doppelklicken Sie in diesem Fall auf der Registerkarte Erweitert auf Startparameter. Die Parameter öffnen sich in einem sehr kleinen Fenster. Achten Sie darauf, keine der vorhandenen Parameter zu ändern. Fügen Sie ganz am Ende einen neuen Parameter hinzu; -m und klicken Sie dann auf OK. (Das ist ein Semikolon, dann ein Bindestrich und dann ein Kleinbuchstabe m.)

Klicken Sie auf OK. Klicken Sie nach der Meldung zum Neustart mit der rechten Maustaste auf Ihren Servernamen, und klicken Sie dann auf Neu starten.

Nach dem Neustart von SQL Server befindet sich Ihr Server im Einzelbenutzermodus. Stellen Sie sicher, dass der SQL Server-Agent nicht ausgeführt wird. Wenn es gestartet wird, wird Ihre einzige Verbindung hergestellt.

Klicken Sie im Windows 8-Startbildschirm mit der rechten Maustaste auf das Symbol für Management Studio. Wählen Sie am unteren Bildschirmrand die Option Als Administrator ausführen aus. (Dadurch werden Ihre Administratoranmeldeinformationen an SSMS übergeben.)

Hinweis

Bei früheren Windows-Versionen wird die Option Als Administrator ausführen als Untermenü angezeigt.

In einigen Konfigurationen versucht SSMS, mehrere Verbindungen herzustellen. Mehrere Verbindungen schlagen fehl, da sich SQL Server im Einzelbenutzermodus befindet. Sie können eine der folgenden Aktionen auswählen. Führen Sie einen der folgenden Schritte aus.

a) Stellen Sie mithilfe der Windows-Authentifizierung (einschließlich Ihrer Administratoranmeldeinformationen) eine Verbindung zum Objekt-Explorer her. Erweitern Sie Sicherheit, erweitern Sie Anmeldungen und doppelklicken Sie auf Ihre eigene Anmeldung. Wählen Sie auf der Seite Serverrollen die Option Systemadministrator aus, und klicken Sie dann auf OK.

b) Anstatt eine Verbindung mit dem Objekt-Explorer herzustellen, stellen Sie mithilfe der Windows-Authentifizierung (einschließlich Ihrer Administratoranmeldeinformationen) eine Verbindung mit einem Abfragefenster her. (Sie können nur dann eine Verbindung herstellen, wenn Sie keine Verbindung zum Objekt-Explorer hergestellt haben.) Führen Sie Code wie den folgenden aus, um eine neue Windows-Authentifizierungsanmeldung hinzuzufügen, die Mitglied der festen Serverrolle sysadmin ist. Im folgenden Beispiel wird ein Domänenbenutzer mit dem Namen CONTOSO \ PatK hinzugefügt.

CREATE LOGIN [CONTOSO\PatK] FROM WINDOWS;   ALTER SERVER ROLE
sysadmin ADD MEMBER [CONTOSO\PatK];   

c) Wenn Ihr SQL Server im gemischten Authentifizierungsmodus ausgeführt wird, stellen Sie mithilfe der Windows-Authentifizierung (einschließlich Ihrer Administratoranmeldeinformationen) eine Verbindung zu einem Abfragefenster her. Führen Sie Code wie den folgenden aus, um eine neue SQL Server-Authentifizierungsanmeldung zu erstellen, die Mitglied der festen Serverrolle sysadmin ist.

CREATE LOGIN TempLogin WITH PASSWORD = '************';   ALTER
SERVER ROLE sysadmin ADD MEMBER TempLogin;   

Warnung:

Ersetzen Sie ************ durch ein sicheres Passwort.

d) Wenn Ihr SQL Server im gemischten Authentifizierungsmodus ausgeführt wird und Sie das Kennwort des sa-Kontos zurücksetzen möchten, stellen Sie mithilfe der Windows-Authentifizierung (einschließlich Ihrer Administratoranmeldeinformationen) eine Verbindung zu einem Abfragefenster her. Ändern Sie das Passwort des sa-Kontos mit der folgenden Syntax.

ALTER LOGIN sa WITH PASSWORD = '************';   Warning

Ersetzen Sie ************ durch ein sicheres Passwort.

Die folgenden Schritte ändern SQL Server jetzt wieder in den Mehrbenutzermodus. Schließen Sie SSMS.

Wählen Sie in SQL Server Configuration Manager im linken Bereich SQL Server Services aus. Klicken Sie im rechten Bereich mit der rechten Maustaste auf die Instanz von SQL Server, und klicken Sie dann auf Eigenschaften.

Wählen Sie auf der Registerkarte Startparameter im Feld Vorhandene Parameter die Option -m aus, und klicken Sie dann auf Entfernen.

Hinweis

Für einige frühere Versionen von SQL Server gibt es keine Registerkarte Startparameter. Doppelklicken Sie in diesem Fall auf der Registerkarte Erweitert auf Startparameter. Die Parameter öffnen sich in einem sehr kleinen Fenster. Entfernen Sie das zuvor hinzugefügte; -m und klicken Sie dann auf OK.

Klicken Sie mit der rechten Maustaste auf Ihren Servernamen, und klicken Sie dann auf Neu starten.

Jetzt sollten Sie in der Lage sein, eine normale Verbindung mit einem der Konten herzustellen, das jetzt Mitglied der festen Serverrolle sysadmin ist.

Yair Halberstadt
quelle
2

Es reicht tatsächlich aus, -m zu den Startparametern in SQL Server Configuration Manager hinzuzufügen, den Dienst neu zu starten, zu ssms ein Kontrollkästchen sysadmin in Ihrem Konto hinzuzufügen, dann -m Neustart erneut zu entfernen und wie gewohnt zu verwenden.

Startoptionen für den Database Engine Service

-m Startet eine Instanz von SQL Server im Einzelbenutzermodus.

norbertas.gaulia
quelle