2012-03-27 32 views
62

मैंने अपनी स्थानीय मशीन पर SQL Server 2008 R2 स्थापित किया। लेकिन, मैं अधिकारों (या की कमी) के कारण एक नया डेटाबेस नहीं बना सकता।मैं अपने आप को स्थानीय SQL सर्वर इंस्टेंस में व्यवस्थापक पहुंच कैसे प्रदान करूं?

तो "डेटाबेस अनुमति अस्वीकृत बनाएँ", मैं अपने वर्तमान लॉगिन करने के लिए व्यवस्थापक विशेषाधिकार आवंटित करने के लिए करने की कोशिश की

"उपयोगकर्ता इस क्रिया को करने की अनुमति नहीं है।"

मैंने एक नया लॉगिन बनाने की भी कोशिश की जिसमें प्रशासन विशेषाधिकार हों लेकिन बिना किसी किस्मत के। मैं अपने आप को व्यवस्थापक अधिकार कैसे प्रदान करूं ताकि मैं डेटाबेस बना सकूं? मैं पुनः स्थापित कर सकता हूं, लेकिन मैं नहीं करना पसंद करता हूं।

+0

क्या आप SQL सर्वर प्रमाणीकरण या Windows प्रमाणीकरण के माध्यम से कनेक्ट करने का प्रयास कर रहे हैं? –

+0

विंडोज प्रमाणीकरण (शीर्षक देखें)। मैं सफलतापूर्वक कनेक्ट कर रहा हूँ। त्रुटियां व्यवस्थापक कार्यों को करने का प्रयास करने से आती हैं। – SkonJeet

उत्तर

49

हां - ऐसा लगता है कि आप SQL सर्वर स्थापित करते समय स्वयं को sysadmin भूमिका में जोड़ना भूल गए हैं। यदि आप अपनी मशीन पर स्थानीय व्यवस्थापक हैं, तो this blog post SQL सर्वर sysadmin समूह में अपना खाता पुनः स्थापित करने के बिना SQLCMD का उपयोग करने में आपकी सहायता कर सकता है। यदि आप मुझसे पूछें तो यह SQL सर्वर में सुरक्षा छेद का थोड़ा सा है, लेकिन यह इस मामले में आपकी सहायता करेगा।

संपादित करें: archive.org पर इंगित करने के लिए मृत लिंक बदल गया। मूल पोस्ट here

+6

यह सुरक्षा छेद नहीं है, स्थानीय प्रशासकों को एसक्यूएल सर्वर के अधिकार होने की आवश्यकता है, वास्तव में एक स्थानीय व्यवस्थापक डेटा फ़ाइलों को दूसरी मशीन पर कॉपी करके एसक्यूएल सर्वर के डेटा तक पहुंचने में सक्षम होगा (और फिर आवश्यक होने पर वापस कॉपी कर रहा है) तो इसके आस-पास आपका एकमात्र तरीका प्रशासनिक अनुमतियों को केवल उन लोगों के लिए सीमित करना है जो इसके लायक हैं .. –

+0

यह अनइंस्टॉल/पुनर्स्थापित करने से आसान होना चाहिए? मुश्किल से! मेरे मामले में, हम दूसरे डोमेन में माइग्रेट किए गए थे; सभी मौजूदा लॉग इन बेकार। – dudeNumber4

+2

लिंक मर चुका है (और केवल लिंक के जवाब निराश हैं)। http://stackoverflow.com/a/9889484/389424 के पास मूल ब्लॉग पोस्ट – janv8000

35

कमांड प्रॉम्प्ट विंडो खोलें। आप SQL सर्वर की डिफ़ॉल्ट उदाहरण पहले से चल रहा है, तो SQL सर्वर सेवा को रोकने के लिए कमांड प्रॉम्प्ट पर निम्न आदेश चलाएँ:

net stop mssqlserver 

अब निर्देशिका जहां एसक्यूएल सर्वर स्थापित किया गया है के लिए जाना। जैसे

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

अपने MSSQL निर्देशिका यह पता लगाने और इसे में CD: उदाहरण के लिए निर्देशिका इनमें से एक हो सकता है

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

अब निम्न आदेश एकल उपयोगकर्ता मोड में एसक्यूएल सर्वर शुरू करने के लिए चलाते हैं। SQLCMD निर्दिष्ट किया जा रहा है, केवल एक SQLCMD कनेक्शन बनाया जा सकता है (अन्य कमांड प्रॉम्प्ट विंडो से)।

sqlservr -m"SQLCMD" 

अब, एक है कि इसके बाद के संस्करण एकल उपयोगकर्ता मोड में एसक्यूएल सर्वर शुरू कर दिया के रूप में ही उपयोगकर्ता के रूप में एक और कमांड प्रॉम्प्ट विंडो खोलें, और उस में, चलाएँ:

sqlcmd 

और Enter दबाएं। अब आप ही उपयोगकर्ता मोड में चल रहा एसक्यूएल सर्वर उदाहरण के खिलाफ SQL कथन निष्पादित कर सकते हैं:

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; 

Source

+1

धन्यवाद डैरेन के समान निर्देश हैं, सराहना की। – SkonJeet

+0

त्वरित नोट कि sp_addsrvrolemember को 'Alter SERVER ROLE' द्वारा हटा दिया गया है। जैसे 'वैकल्पिक सर्वर रोल [sysadmin] सदस्य जोड़ें [डोमेन \ उपयोगकर्ता नाम] ' – Fermin

28

यहां एक ऐसी स्क्रिप्ट है जो इसे ठीक करने में सक्षम होने का दावा करती है।

Get admin rights to your local SQL Server Express with this simple script

Download link to the script

विवरण

यह आदेश स्क्रिप्ट आप आसानी से एक स्थानीय एसक्यूएल सर्वर उदाहरण के सिस्टम प्रशासक भूमिका के लिए अपने आप को जोड़ने के लिए अनुमति देता है। आपको विंडोज स्थानीय व्यवस्थापक समूह का सदस्य होना चाहिए, या उस उपयोगकर्ता के क्रेडेंशियल्स तक पहुंच होनी चाहिए। स्क्रिप्ट एसक्यूएल सर्वर 2005 और बाद में समर्थन करता है।

स्क्रिप्ट सबसे उपयोगी है यदि आप किसी डेवलपर द्वारा SQL सर्वर 2008 एक्सप्रेस का उपयोग करने का प्रयास कर रहे हैं जो किसी और द्वारा स्थापित किया गया था। इस स्थिति में आपके पास आमतौर पर SQL Server 2008 एक्सप्रेस इंस्टेंस के लिए व्यवस्थापकीय अधिकार नहीं होंगे, क्योंकि डिफ़ॉल्ट रूप से केवल SQL सर्वर 2008 स्थापित करने वाले व्यक्ति को व्यवस्थापकीय विशेषाधिकार प्रदान किए जाते हैं।

SQL सर्वर 2008 एक्सप्रेस स्थापित करने वाले उपयोगकर्ता SQL सर्वर प्रबंधन स्टूडियो का उपयोग आपके लिए आवश्यक विशेषाधिकार प्रदान करने के लिए कर सकते हैं। लेकिन क्या यदि SQL सर्वर प्रबंधन स्टूडियो स्थापित नहीं किया गया था? या बदतर उपयोगकर्ता स्थापित करने के लिए अब और उपलब्ध नहीं है?

यह स्क्रिप्ट केवल कुछ क्लिक में समस्या को हल करता है!

ध्यान दें: आप एक 'उदाहरण के नाम' के साथ बैट फ़ाइल प्रदान करना होगा (शायद 'MSSQLSERVER' होने जा रहा - लेकिन यह नहीं हो सकता है): आप पहली बार में निम्नलिखित चलाकर मूल्य प्राप्त कर सकते हैं "Microsoft SQL सर्वर प्रबंधन कंसोल":

SELECT @@servicename 

फिर जब बैट फ़ाइल 'एसक्यूएल उदाहरण के नाम' के लिए संकेत देता का उपयोग करने के परिणाम की प्रतिलिपि बनाएँ।

@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

मेरे लिए काम किया। ध्यान में रखना एक बात है, सुनिश्चित करें कि आपके पास .js एक्सटेंशन 'माइक्रोसॉफ्ट ® विंडोज आधारित स्क्रिप्ट होस्ट' पर मैप किया गया है अन्यथा यह वूडू काम नहीं करेगा (मैंने नोटपैड.एक्सई में मैप किया था)। –

+1

लिंक मर चुके हैं - "पुरालेख गैलरी सेवानिवृत्त हो गया है"। – stuartd

+3

@stuartd - स्क्रिप्ट –

22

मैंने एक एसक्यूएल 2012 डेटाबेस अपनाया जहां मैं एक सिसडमिन नहीं था लेकिन मशीन पर एक प्रशासक था। मैंने "व्यवस्थापक के रूप में चलाएं" के साथ एसएसएमएस का उपयोग किया, मेरे एनटी खाते को एसक्यूएल लॉगिन के रूप में जोड़ा और सर्वर भूमिका को sysadmin पर सेट किया। कोई बात नहीं।

+1

बस इसका इस्तेमाल किया - एक इलाज किया! –

+3

यह समाधान मेरे लिए एक अतिरिक्त कदम की आवश्यकता के साथ काम करता है: "-m" ध्वज जोड़कर एकल उपयोगकर्ता मोड में एसक्यूएल सर्वर शुरू करना पड़ा। यह "SQL सर्वर कॉन्फ़िगरेशन प्रबंधक" का उपयोग करके किया जा सकता है, सर्वर इंस्टेंस पर राइट क्लिक करें और गुणों का चयन करें, टैब "स्टार्टअप पैरामीटर" और एड-एम पर जाएं। – maets

+0

यह कमाल है। अन्य उत्तरों की तुलना में बहुत आसान है। – McKay

2

एसक्यूएल सर्वर कॉन्फ़िगरेशन मैनेजर पर स्टार्टअप पैरामीटर को जोड़ने के लिए वास्तव में पर्याप्त है, सेवा को पुनरारंभ करें, अपने खाते पर एक ऐड चेकबॉक्स sysadmin ssms पर जाएं, फिर हटाएं -एम फिर से शुरू करें और सामान्य रूप से उपयोग करें।

Database Engine Service Startup Options

-m एकल उपयोगकर्ता मोड में SQL सर्वर का एक उदाहरण शुरू होता है।