Jak przyznać sobie dostęp administratora do lokalnej instancji serwera SQL?

Zainstalowałem SQL Server 2008 R2 na mojej lokalnej maszynie. Ale nie mogę utworzyć nowej bazy danych z powodu praw (lub ich braku).

"CREATE DATABASE PERMISSION DENIED"

Więc próbowałem przypisać uprawnienia administratora do mojego obecnego loginu

" Użytkownik nie ma uprawnień do wykonania tej czynności."

Próbowałem również utworzyć nowy login, który miałby uprawnienia administratora, ale bez powodzenia. jak przyznać sobie uprawnienia administratora żebym mógł stworzyć bazę danych? mogę ponownie zainstalować, ale wolę nie.

Author: Darren, 2012-03-27

6 answers

Tak-wygląda na to, że zapomniałeś dodać się do roli sysadmin podczas instalacji SQL Server. Jeśli jesteś lokalnym Administratorem na swoim komputerze, ten wpis na blogu może pomóc ci użyć SQLCMD, aby przenieść swoje konto do grupy SQL Server sysadmin bez konieczności ponownej instalacji. To trochę luka w zabezpieczeniach w SQL serverze, jeśli mnie pytasz, ale to ci pomoże w tym przypadku.

 70
Author: Brian Knight,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-30 14:52:48

Otwórz okno wiersza polecenia. Jeśli masz już uruchomioną domyślną instancję SQL Server, uruchom następujące polecenie w wierszu polecenia, aby zatrzymać usługę SQL Server:

net stop mssqlserver

Teraz przejdź do katalogu, w którym zainstalowany jest SQL server. Katalog może być na przykład jednym z nich:

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

Wymyśl swój katalog MSSQL i CD do niego jako taki:

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

Teraz uruchom następujące polecenie, aby uruchomić SQL Server w trybie pojedynczego użytkownika. Jako SQLCMD jest określone, można wykonać tylko jedno połączenie SQLCMD (z innego okna wiersza polecenia).

sqlservr -m"SQLCMD"

Teraz otwórz inne okno wiersza polecenia jako ten sam użytkownik, który uruchomił SQL Server w trybie pojedynczego użytkownika powyżej, i w nim Uruchom:

sqlcmd

I naciśnij enter. Teraz możesz wykonywać polecenia SQL przeciwko instancji SQL Server działającej w trybie pojedynczego użytkownika:

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

Źródło .

aktualizacja Nie zapomnij średnika po ALTER SERVER ROLE [sysadmin] ADD MEMBER [<<DOMAIN\USERNAME>>]; i nie dodaj dodatkowy średnik po GO lub polecenie nigdy nie zostanie wykonane.

 83
Author: Darren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-02 03:56:15

Przyjąłem bazę danych SQL 2012, w której nie byłem sysadminem, ale Administratorem na komputerze. Używałem SSMS z "Run as Administrator", dodałem moje konto NT jako login SQL i ustawiłem rolę serwera na sysadmin. Nie ma sprawy.

 40
Author: Vince P.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-15 01:30:03

Oto skrypt, który twierdzi, że jest w stanie to naprawić.

Uzyskaj uprawnienia administratora do lokalnego serwera SQL Express za pomocą tego prostego skryptu

Pobierz link do skryptu

Opis

Ten skrypt poleceń pozwala na łatwe dodanie się do sysadmina rola lokalnej instancji serwera SQL. Musisz być członkiem Lokalna grupa administratorów systemu Windows lub dostęp do poświadczeń użytkownika, który jest. Scenariusz obsługuje SQL Server 2005 i nowsze.

Skrypt jest najbardziej przydatny, jeśli jesteś programistą próbującym używać SQL Server 2008 Express, który został zainstalowany przez kogoś innego. W tym sytuacja zwykle nie będziesz miał uprawnień administratora do SQL Server 2008 Instancja Express, ponieważ domyślnie tylko osoba instalująca SQL Server 2008 otrzymuje uprawnienia administracyjne.

Użytkownik, który zainstalował SQL Server 2008 Express może korzystać z SQL Server Studio zarządzania do przyznania niezbędne przywileje dla Ciebie. Ale co jeśli SQL Server Management Studio nie zostało zainstalowane? Lub gorzej, jeśli instalacja użytkownika nie jest już dostępna?

Ten skrypt rozwiązuje problem za pomocą kilku kliknięć!

Uwaga: musisz podać plik BAT z 'nazwą instancji' (prawdopodobnie będzie to 'MSSQLSERVER' - ale może nie być): możesz uzyskać wartość, uruchamiając najpierw następujące polecenie w "Microsoft SQL Server Management Console":

 SELECT @@servicename

Następnie skopiuj wynik do użycia, gdy plik BAT wyświetli monit o 'nazwę instancji SQL'.

  @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
 29
Author: Chris Gessler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-09 14:38:56

Microsoft ma artykuł na ten temat. Przechodzi przez to wszystko krok po kroku.

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

W skrócie polega na uruchomieniu instancji sqlserver z -m, jak sugerują wszystkie inne odpowiedzi. Jednak Microsoft zapewnia nieco bardziej szczegółowe instrukcje.

Ze strony startowej Uruchom Zarządzanie serwerem SQL Studio. W menu Widok wybierz pozycję zarejestrowane serwery. (Jeśli twój serwer nie jest jeszcze zarejestrowanych, kliknij prawym przyciskiem myszy Lokalne Grupy serwerów, wskaż zadania, a następnie kliknij Zarejestruj Serwery lokalne.)

W obszarze zarejestrowanych serwerów kliknij prawym przyciskiem myszy serwer, a następnie kliknij SQL Server Configuration Manager. To powinno poprosić o pozwolenie aby uruchomić jako administrator, a następnie otworzyć Menedżera konfiguracji program.

Close Management Studio.

W Sql Server Configuration Manager, w lewym okienku wybierz SQL Usługi Serwerowe. W prawym okienku znajdź swoją instancję SQL Server. (Domyślna instancja SQL Server zawiera (MSSQLSERVER) po nazwa komputera. Nazwy instancji pojawiają się wielkimi literami o tej samej nazwie że mają w zarejestrowanych serwerach.) Kliknij prawym przyciskiem myszy instancję SQL Serwer, a następnie kliknij Właściwości.

Na karcie Parametry uruchamiania, w polu Określ parametr uruchamiania, wpisz -m, a następnie kliknij Dodaj. (To jest myślnik, a następnie mała litera m.)

Uwaga

Dla niektórych wcześniejszych wersji SQL Server nie ma parametrów startowych tab. W takim przypadku na karcie Zaawansowane kliknij dwukrotnie Uruchom Parametry. Parametry otwierają się w bardzo małym oknie. Ostrożnie. nie zmieniać żadnego z istniejących parametrów. Na samym końcu dodaj nowy parametr; - m, a następnie kliknij OK. (To jest średnik, a następnie myślnik następnie mała litera m.)

Kliknij OK, a po wiadomość do ponownego uruchomienia, kliknij prawym przyciskiem myszy serwer nazwa, a następnie kliknij przycisk Uruchom ponownie.

Po ponownym uruchomieniu SQL Server Twój serwer będzie w trybie single-user mode. Upewnij się, że Agent SQL Server nie jest uruchomiony. If started, to zajmie Twoje jedyne połączenie.

Na ekranie startowym systemu Windows 8 Kliknij prawym przyciskiem myszy ikonę zarządzania Studio. U dołu ekranu wybierz opcję Uruchom jako administrator. (To przekaże Twoje poświadczenia administratora do SSMS.)

Uwaga

W przypadku starszych wersji systemu Windows opcja Uruchom jako administrator pojawia się jako podmenu.

W niektórych konfiguracjach SSMS będzie próbował nawiązać kilka połączeń. Wiele połączeń nie powiedzie się, ponieważ SQL Server jest w jednym użytkowniku mode. Możesz wybrać jedną z następujących czynności do wykonania. Zrób jeden z następujących.

A) połączyć się z Object Explorer za pomocą uwierzytelniania Windows (które zawiera poświadczenia administratora). Rozwiń Bezpieczeństwo, rozwiń Zaloguj się i kliknij dwukrotnie swój własny login. Na stronie role serwera, wybierz sysadmin, a następnie kliknij OK.

B) zamiast łączenia się z Object Explorer, połącz się z zapytaniem Okno za pomocą uwierzytelniania systemu Windows (w tym administratora poświadczenia). (Możesz połączyć się w ten sposób tylko, jeśli nie połączyłeś się z Object Explorer.) Wykonaj kod taki jak poniżej, aby dodać nowy Naprawiono login uwierzytelniania systemu Windows, który jest członkiem sysadmin rola serwera. Poniższy przykład dodaje użytkownika domeny o nazwie CONTOSO\PatK.

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

C) Jeśli twój serwer SQL działa w mieszany tryb uwierzytelniania, połącz się z oknem zapytania za pomocą Windows Uwierzytelnianie (obejmujące poświadczenia administratora). Wykonaj kod, taki jak poniżej, aby utworzyć nowy serwer SQL Login uwierzytelniający będący członkiem Stałego serwera sysadmin rola.

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

Ostrzeżenie:

Zastąp ************ z mocnym hasło.

D) Jeśli twój serwer SQL działa w trybie uwierzytelniania mieszanego, a Ty chcesz zresetować hasło do konta sa, połącz się z zapytaniem Okno za pomocą uwierzytelniania systemu Windows (w tym administratora poświadczenia). Zmień hasło do konta sa za pomocą następujących składnia.

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

Zastąp ************ z mocnym hasłem.

Następujące kroki teraz zmienić SQL Server z powrotem do trybu wielu użytkowników. Zamknij SSMS.

W Sql Server Configuration Manager, w lewym okienku wybierz SQL Usługi Serwerowe. W prawym okienku kliknij prawym przyciskiem myszy instancję SQL Serwer, a następnie kliknij Właściwości.

Na karcie Parametry uruchamiania, w polu istniejące parametry wybierz -m, a następnie kliknij Usuń.

Uwaga

Dla niektórych wcześniejszych wersji SQL Server nie ma parametrów startowych tab. W takim przypadku na karcie Zaawansowane kliknij dwukrotnie Uruchom Parametry. Parametry otwierają się w bardzo małym oknie. Usunąć ;- M które dodałeś wcześniej, a następnie kliknij OK.

Kliknij prawym przyciskiem myszy nazwę serwera, a następnie kliknij przycisk Uruchom ponownie.

Teraz powinieneś być w stanie normalnie połączyć się z jednym z kont który jest teraz członkiem stałej roli serwera sysadmin.

 6
Author: Yair Halberstadt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-13 14:05:45

Jego właściwie wystarczy dodać -m do parametrów startowych w SQL Server Configuration Manager, restart service, przejdź do ssms i dodaj pole wyboru sysadmin na koncie, a następnie usunąć -m restart ponownie i używać jak zwykle.

Opcje Uruchamiania Silnika Bazy Danych

- m uruchamia instancję SQL Server w trybie pojedynczego użytkownika.

 2
Author: norbertas.gaulia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-02 22:11:11