Kendime yerel bir SQL Server örneğine yönetici erişimi nasıl verebilirim?


94

Yerel makineme SQL Server 2008 R2 kurdum. Ancak haklar nedeniyle (veya eksikliklerden) yeni bir veritabanı oluşturamıyorum.

"VERİTABANI OLUŞTURMA İZNİ REDDEDİLDİ"

Bu yüzden, yönetici ayrıcalıklarını mevcut girişime atamayı denedim

"Kullanıcının bu eylemi gerçekleştirme izni yok."

Ayrıca yönetici ayrıcalıklarına sahip olan ancak şanssız yeni bir giriş oluşturmaya çalıştım. Bir veritabanı oluşturabilmek için kendime yönetici haklarını nasıl veririm? Yeniden kurabilirim ama yapmamayı tercih ederim.


1
SQL Server kimlik doğrulaması veya Windows Kimlik Doğrulaması aracılığıyla bağlanmaya mı çalışıyorsunuz?
Darren

Windows kimlik doğrulaması (başlığa bakın). Başarıyla bağlanıyorum. Hatalar, yönetici görevlerini gerçekleştirme girişiminden kaynaklanır.
SkonJeet

Yanıtlar:


70

Evet - SQL Server'ı kurarken kendinizi sysadmin rolüne eklemeyi unutmuşsunuz gibi görünüyor. Makinenizde yerel bir yöneticiyseniz, bu blog yazısı , hesabınızı yeniden yüklemek zorunda kalmadan SQL Server sysadmin grubuna almak için SQLCMD'yi kullanmanıza yardımcı olabilir. Bana sorarsanız, SQL Server'da biraz güvenlik açığı var ama bu durumda size yardımcı olacaktır.


15
Bu bir güvenlik açığı değildir, yerel yöneticilerin sql sunucu haklarına sahip olması gerekir, aslında yerel bir yönetici yine de veri dosyalarını başka bir makineye kopyalayarak (ve ardından gerekirse geri kopyalayarak) sql sunucusunun verilerine erişebilir. Bunu
aşmanın

BU kaldırma / yeniden yüklemeden daha kolay mıdır? Zorlukla! Benim durumumda, başka bir alana taşındık; mevcut tüm girişler değersiz.
dudeNumber4

8
Bağlantı öldü (ve yalnızca bağlantı yanıtlarının kullanılması önerilmez). stackoverflow.com/a/9889484/389424 , orijinal blog gönderisiyle aynı talimatlara sahip
janv8000

82

Bir komut istemi penceresi açın. Halihazırda çalışmakta olan varsayılan bir SQL Server örneğiniz varsa, SQL Server hizmetini durdurmak için komut isteminde aşağıdaki komutu çalıştırın:

net stop mssqlserver

Şimdi SQL sunucusunun kurulu olduğu dizine gidin. Dizin örneğin şunlardan biri olabilir:

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

MSSQL dizininizi ve bu CDşekilde bulun :

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

Şimdi SQL Server'ı tek kullanıcı modunda başlatmak için aşağıdaki komutu çalıştırın. Gibi SQLCMDbelirtilen ediliyor, tek bir SQLCMDbağlantı (başka komut istemi penceresinden) yapılabilir.

sqlservr -m"SQLCMD"

Şimdi, SQL Server'ı yukarıdaki tek kullanıcı modunda başlatan kullanıcıyla aynı kullanıcıyla başka bir komut istemi penceresi açın ve içinde şunu çalıştırın:

sqlcmd

Ve enter tuşuna basın. Artık tek kullanıcı modunda çalışan SQL Server örneğine karşı SQL ifadelerini çalıştırabilirsiniz:

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

Kaynak .

GÜNCELLENDİ Sonrasına noktalı virgül ALTER SERVER ROLE [sysadmin] ADD MEMBER [<<DOMAIN\USERNAME>>];eklemeyi unutmayın ve GOarkasına fazladan noktalı virgül eklemeyin, aksi takdirde komut hiç çalışmaz .


Sp_addsrvrolemember'ın yerine geçmiştir ALTER SERVER ROLE. örn.ALTER SERVER ROLE [sysadmin] ADD MEMBER [domain\username]
Fermin

GO;Sonuna eklemeyi unutmayın
NMrt

Çoğumuz şimdi SQL Server çalıştıran düşünüldüğünde olmadan SSMS, bu çok daha iyi bir cevaptır hissediyorum.
Chaim Eliyah

39

Bir sistem yöneticisi olmadığım ancak makinede yönetici olduğum bir SQL 2012 veritabanını benimsedim. SSMS'yi "Yönetici Olarak Çalıştır" ile kullandım, NT hesabımı SQL oturumu olarak ekledim ve sunucu rolünü sysadmin olarak ayarladım. Sorun değil.


14
Bu çözüm benim için çalıştı, ek bir adım gerekli: sql sunucusunu "-m" bayrağını ekleyerek tek kullanıcı modunda başlatmak gerekiyordu. Bu, "SQL Server Yapılandırma Yöneticisi" kullanılarak yapılabilir, sunucu örneğine sağ tıklayın ve özellikleri seçin, "Başlangıç ​​Parametreleri" sekmesine gidin ve -m ekleyin.
maets

Bu harika. Diğer cevaplardan çok daha basit.
McKay

1
Kesinlikle en hızlı ve en iyisi
Johnny

Oldukça basit ve bir cazibe gibi çalışıyor. Vince ve maets teşekkürler.
Edgar Froes

1
Bu aslında doğru cevap. Bir not, tek kullanıcı modunda SQL elde etmek için> net stop MSSQL $ SQLEXPRESS ve ardından> net start MSSQL $ SQLEXPRESS / m
Ev.

29

İşte bunu düzeltebileceğini iddia eden bir komut dosyası.

Bu basit komut dosyasıyla yerel SQL Server Express'iniz için yönetici hakları elde edin

Komut dosyasının bağlantısını indirin

Açıklama

Bu komut dosyası, kendinizi yerel bir SQL Server örneğinin sysadmin rolüne kolayca eklemenizi sağlar. Windows yerel Yöneticiler grubunun bir üyesi olmanız veya olan bir kullanıcının kimlik bilgilerine erişiminizin olması gerekir. Komut dosyası, SQL Server 2005 ve sonrasını destekler.

Komut dosyası en çok, başka biri tarafından yüklenmiş SQL Server 2008 Express'i kullanmaya çalışan bir geliştiriciyseniz yararlıdır. Bu durumda, genellikle SQL Server 2008 Express örneğinde yönetici haklarına sahip olmazsınız, çünkü varsayılan olarak yalnızca SQL Server 2008'i kuran kişiye yönetici ayrıcalıkları verilir.

SQL Server 2008 Express'i kuran kullanıcı, size gerekli ayrıcalıkları vermek için SQL Server Management Studio'yu kullanabilir. Peki ya SQL Server Management Studio kurulmamışsa? Yükleyen kullanıcı artık mevcut değilse daha mı kötüsü?

Bu komut dosyası, sorunu yalnızca birkaç tıklamayla çözer!

Not: BAT dosyasına bir 'Örnek Adı' sağlamanız gerekir (Muhtemelen 'MSSQLSERVER' olacaktır - ancak olmayabilir): değeri ilk önce "Microsoft SQL Server Yönetim Konsolunda" çalıştırarak elde edebilirsiniz. ":

 SELECT @@servicename

Ardından, BAT dosyası 'SQL örnek adı' istediğinde kullanılacak sonucu kopyalayın.

  @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

2
Benim için çalıştı. Akılda tutulması gereken bir şey, .js uzantısının, Microsoft ® Windows Based Script Hostaksi takdirde bu voodoo çalışmayacak (benimki notepad.exe ile eşlenmişti) ile eşlendiğinden emin olun .
Phil Cooper

2
Bağlantılar öldü - "Arşiv Galerisi kullanımdan kaldırıldı".
stuartd

3
@stuartd - senaryoyu ekledi
Chris Gessler

Yukarıdaki komut dosyasını kullanarak kendinizi yönetici olarak eklemeyle ilgili sorun yaşıyorsanız. Oturum açma bilgilerinizi veritabanına eklemeyi deneyin ve ardından komut dosyasını çalıştırın.
Ram

2
Biri bunu GitHub'a ekledi. Bu komut dosyası gerçek bir zaman kazandırıcıdır. gist.github.com/wadewegner/1677788
Patrick

6

Microsoft'un bu konuyla ilgili bir makalesi var. Her şeyi adım adım geçiyor.

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

Kısacası -m, diğer tüm cevapların önerdiği gibi sqlserver örneğini başlatmayı içerir . Ancak Microsoft, biraz daha ayrıntılı talimatlar sağlar.

Başlangıç ​​sayfasından SQL Server Management Studio'yu başlatın. Görünüm menüsünde Kayıtlı Sunucular'ı seçin. (Sunucunuz zaten kayıtlı değilse, Yerel Sunucu Grupları'na sağ tıklayın, Görevler'e gidin ve ardından Yerel Sunucuları Kaydet'e tıklayın.)

Registered Servers (Kayıtlı Sunucular) alanında, sunucunuza sağ tıklayın ve ardından SQL Server Configuration Manager öğesine tıklayın. Bu, yönetici olarak çalıştırmak için izin istemeli ve ardından Configuration Manager programını açmalıdır.

Management Studio'yu kapatın.

SQL Server Configuration Manager'da, sol bölmede SQL Server Services'i seçin. Sağ bölmede, SQL Server örneğinizi bulun. (SQL Server'ın varsayılan örneği, bilgisayar adından sonra (MSSQLSERVER) öğesini içerir. Adlandırılan örnekler, Kayıtlı Sunucularda sahip oldukları adla büyük harflerle görünür.) SQL Server örneğini sağ tıklatın ve ardından Özellikler'i tıklatın.

Başlangıç ​​Parametreleri sekmesindeki Bir başlangıç ​​parametresi belirtin kutusuna -m yazın ve ardından Ekle'yi tıklatın. (Bu bir tire sonra küçük harf m'dir.)

Not

SQL Server'ın bazı önceki sürümleri için Başlangıç ​​Parametreleri sekmesi yoktur. Bu durumda, Gelişmiş sekmesinde Başlangıç ​​Parametreleri'ne çift tıklayın. Parametreler çok küçük bir pencerede açılır. Mevcut parametrelerin hiçbirini değiştirmemeye dikkat edin. En sonunda, yeni bir parametre ekleyin; -m ve ardından Tamam'ı tıklayın. (Bu bir noktalı virgül sonra bir tire ve sonra küçük harf m'dir.)

Tamam'a tıklayın ve yeniden başlatılacak mesajın ardından, sunucu adınıza sağ tıklayın ve ardından Yeniden Başlat'a tıklayın.

SQL Server yeniden başlatıldıktan sonra sunucunuz tek kullanıcı modunda olacaktır. SQL Server Agent'ın çalışmadığından emin olun. Başlarsa, tek bağlantınızı alır.

Windows 8 başlangıç ​​ekranında, Management Studio simgesine sağ tıklayın. Ekranın altında Yönetici olarak çalıştır'ı seçin. (Bu, yönetici kimlik bilgilerinizi SSMS'ye iletecektir.)

Not

Windows'un önceki sürümlerinde, Yönetici olarak çalıştır seçeneği bir alt menü olarak görünür.

Bazı konfigürasyonlarda, SSMS birkaç bağlantı kurmaya çalışır. SQL Server tek kullanıcı modunda olduğu için birden çok bağlantı başarısız olur. Gerçekleştirmek için aşağıdaki eylemlerden birini seçebilirsiniz. Aşağıdakilerden birini yapın.

a) Windows Kimlik Doğrulaması (Yönetici kimlik bilgilerinizi içerir) kullanarak Nesne Gezgini ile bağlantı kurun. Güvenlik'i genişletin, Oturum Açma Bilgileri'ni genişletin ve kendi oturum açma bilgilerinizi çift tıklayın. Sunucu Rolleri sayfasında, sysadmin'i seçin ve ardından Tamam'a tıklayın.

b) Nesne Gezgini ile bağlanmak yerine, Windows Kimlik Doğrulamasını (Yönetici kimlik bilgilerinizi içeren) kullanarak bir Sorgu Penceresi ile bağlanın. (Yalnızca Nesne Gezgini ile bağlanmadıysanız bu şekilde bağlanabilirsiniz.) Sysadmin sabit sunucu rolünün bir üyesi olan yeni bir Windows Kimlik Doğrulaması oturumu eklemek için aşağıdaki gibi bir kod çalıştırın. Aşağıdaki örnek, CONTOSO \ PatK adlı bir etki alanı kullanıcısı ekler.

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

c) SQL Server'ınız karma kimlik doğrulama modunda çalışıyorsa, Windows Kimlik Doğrulamasını (Yönetici kimlik bilgilerinizi içeren) kullanarak bir Sorgu Penceresi ile bağlanın. Sysadmin sabit sunucu rolünün bir üyesi olan yeni bir SQL Server Kimlik Doğrulaması oturumu oluşturmak için aşağıdaki gibi kodu yürütün.

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

Uyarı:

************ 'yı güçlü bir parola ile değiştirin.

d) SQL Sunucunuz karma kimlik doğrulama modunda çalışıyorsa ve sa hesabının parolasını sıfırlamak istiyorsanız, Windows Kimlik Doğrulamasını (Yönetici kimlik bilgilerinizi içeren) kullanarak bir Sorgu Penceresi ile bağlanın. Sa hesabının parolasını aşağıdaki sözdizimi ile değiştirin.

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

************ 'yı güçlü bir parola ile değiştirin.

Aşağıdaki adımlar artık SQL Server'ı tekrar çoklu kullanıcı moduna değiştirir. SSMS'yi kapatın.

SQL Server Configuration Manager'da, sol bölmede SQL Server Services'i seçin. Sağ bölmede, SQL Server örneğini sağ tıklatın ve ardından Özellikler'i tıklatın.

Başlangıç ​​Parametreleri sekmesindeki Mevcut parametreler kutusunda -m öğesini seçin ve ardından Kaldır öğesine tıklayın.

Not

SQL Server'ın bazı önceki sürümleri için Başlangıç ​​Parametreleri sekmesi yoktur. Bu durumda, Gelişmiş sekmesinde Başlangıç ​​Parametreleri'ne çift tıklayın. Parametreler çok küçük bir pencerede açılıyor. Daha önce eklediğiniz; -m'yi kaldırın ve ardından Tamam'a tıklayın.

Sunucu adınıza sağ tıklayın ve ardından Yeniden Başlat seçeneğine tıklayın.

Artık sysadmin sabit sunucu rolünün bir üyesi olan hesaplardan birine artık normal şekilde bağlanabilmelisiniz.


2

Aslında Sql Server Configuration Manager'da başlangıç ​​parametrelerine -m eklemek, hizmeti yeniden başlatmak, ssms'ye gitmek ve hesabınızda sysadmin onay kutusu eklemek, ardından -m yeniden başlatmak ve her zamanki gibi kullanmak yeterlidir.

Veritabanı Motoru Hizmeti Başlatma Seçenekleri

-m Tek kullanıcı modunda bir SQL Server örneğini başlatır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.