SQL Server 2008 में उपयोगकर्ता के लिए sysadmin कैसे जोड़ें जब कोई sysadmin खाते मौजूद नहीं हैं


25

मेरे पास SQL ​​Server 2008 इंस्टेंस चल रहा है। दुर्भाग्य से परीक्षण के दौरान मैंने अपने लॉगिन के लिए sysadmin अधिकारों को रद्द कर दिया और अब इसे पढ़ नहीं सकता (क्योंकि मेरे पास sadadmin अधिकार नहीं हैं)।

उदाहरण के लिए SA को छोड़कर कोई अन्य sysadmin खाते नहीं हैं।

मैं सिर्फ विंडोज ऑथेंटिकेशन के लिए स्थापित किया गया था, इसलिए मैंने 2 में रजिस्ट्री में LoginMode हैक किया ताकि मैं Sql प्रमाणीकरण का उपयोग करके SA के रूप में लॉगिन कर सकूं। यह वास्तव में लॉगिन मोड को मिश्रित करने के लिए सेट करता है, हालांकि एसए उपयोगकर्ता डिफ़ॉल्ट रूप से अक्षम है और मैं इसे फिर से उपयोग नहीं कर सकता क्योंकि मेरे पास sysadmin अधिकार नहीं हैं।

मैं SA लॉगिन कैसे सक्षम कर सकता हूं ताकि मैं अपने सामान्य खाते में sysadmin को पुनः प्राप्त कर सकूं और पुन: असाइन कर सकूं? क्या इसके लिए कोई रजिस्ट्री सेटिंग है या यह मास्टर डेटाबेस में संग्रहीत है?

जवाबों:


11

यहां तक ​​कि सबसे uber-admin प्रकार का कनेक्शन विकल्प समर्पित प्रशासक कनेक्शन ( DAC ), जिसका उपयोग केवल स्थानीय कनेक्शन के रूप में किया जा सकता है, और आपको सभी प्रकार की बुराई को पूर्ववत करने देता है, फिर भी लॉगिन क्रेडेंशियल की आवश्यकता होती है। इसलिए मुझे नहीं लगता कि ऐसा करने का कोई आधिकारिक तरीका है।

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

आपको सर्वर स्तर की वस्तुओं (जैसे लॉगिन) को मैन्युअल रूप से पुनर्प्राप्त करने की आवश्यकता होगी


1
धन्यवाद - मैंने इंस्टा को अनइंस्टॉल कर दिया और पुनः इंस्टॉल किया। डेटाबेस को फिर से जोड़ा और सब कुछ फिर से ठीक है। उदाहरण के लिए पुनर्स्थापना के लिए पूर्ण डेटाबेस इंजन इंस्टॉलर का उपयोग करने के लिए चीजों की एक जोड़ी (मेरे पास केवल एक प्रबंधन उपकरण था जो इंस्टॉलर था जो मुझे थोड़ी देर के लिए स्टम्प्ड करता था)। इसके अलावा, आपको डेटाबेस फ़ाइलों पर अनुमतियों को बदलने की आवश्यकता है, अन्यथा संलग्न करते समय आपको एक त्रुटि मिलती है (त्रुटि 5)। इसके अलावा - सभी ने ठीक काम किया।

इसके अलावा, मैंने डेटाबेस फ़ाइलों की एक प्रतिलिपि बनाई, लेकिन यह पता चला कि यह आवश्यक नहीं था। स्थापना रद्द करने से डेटाबेस नहीं निकाले गए। हालाँकि, मैं अभी भी डेटाबेस फ़ाइलों को कॉपी करने की सिफारिश करूंगा, क्योंकि यह व्यवहार SQL सर्वर के विभिन्न संस्करणों पर अलग है।

27

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

यहाँ से PSexec टूल डाउनलोड करें । इसे सर्वर पर रखें और फिर कमांड प्रॉम्प्ट में इस कमांड को निष्पादित करें: psexec -i -s SSMS.exeया sqlwb.exe

यह SSMS को सिस्टम खाते के रूप में खोल देगा जिसमें SQL सर्वर के उदाहरण के लिए sysadmin एक्सेस है। यह SQL सर्वर की स्थापना के दौरान किया जाता है, हालांकि मैंने सुना है कि यह SQL 2012 के साथ ऐसा नहीं होगा।


1
नहीं यह SQL Server 2012 RTM और इसके बाद के संस्करण में काम नहीं करता है। आपको प्राप्त करने के लिए सर्वर के स्थानीय व्यवस्थापक समूह के सदस्य के रूप में एकल-उपयोगकर्ता मोड में SQL सर्वर सेवा को पुनरारंभ करना होगा।
शॉन मेल्टन

15

SQL Server 2008 SQL Server 2005 से भिन्न है, जिसमें स्थानीय व्यवस्थापक अब sysadmin फिक्स्ड सर्वर रोल को इनहेरिट नहीं करते हैं।

जब SQL Server 2008 स्थापित होता है, तो यह आपको साइनसमिन रोल में जोड़े जाने के लिए एक खाता नामित करने के लिए प्रेरित करता है। यदि आप सॉफ़्टवेयर स्थापित होने के बाद बॉक्स प्राप्त करते हैं, हालांकि, इससे आपको बहुत मदद नहीं मिलती है।

सौभाग्य से, Microsoft ने 2005 कार्यक्षमता को संरक्षित किया जब SQL सर्वर एकल उपयोगकर्ता मोड में चल रहा है। यहाँ आप क्या करते हैं:

  • सर्वर में विंडोज़ स्थानीय व्यवस्थापक के रूप में लॉग इन करें
  • sql सर्वर बंद करो
  • कमांड प्रॉम्प्ट पर, निर्देशिका में जहां sqlservr.exe रहता है, sqlservr.exe टाइप करें, और प्रेस दर्ज करें - यह एकल-उपयोगकर्ता मोड में SQL सर्वर शुरू करेगा
  • SQL सर्वर EM खोलें, और अपने खाते को sysadmin निश्चित सर्वर भूमिका में जोड़ें
  • SQL सर्वर बंद करें, पुनरारंभ करें (कमांड लाइन पर या SQL सर्वर EM में

यह समाधान खूबसूरती से काम करता है। बस यह जोड़ना चाहते हैं कि आपको एकल उपयोगकर्ता मोड में sqlservr.exe चलाने के लिए स्थानीय व्यवस्थापक के रूप में लॉग इन नहीं करना है, बस जब आपको एसएसएमएस या ऑस्कल या जो भी हो, उसमें लॉग इन करना होगा।
अबेयर्केज़

5

यह एक महान प्रश्न है और कोई इस स्थिति में होगा और इससे बचाव की आवश्यकता है।

इसका सारा श्रेय कोडिकोनियोर को जाता है

यदि आप सर्वर पर एक विंडोज एडमिनिस्ट्रेटर हैं तो बिना किसी आउटेज और बिना किसी जोखिम के एक्सेस प्राप्त करने के लिए आप PowerShell v2 स्क्रिप्ट का उपयोग कर सकते हैं। यह SQL सर्वर सेवा के लॉगिन टोकन को डुप्लिकेट करके भी करता है, भले ही यह AD सेवा खाते, आभासी खाते के तहत चल रहा हो, या प्रति-सेवा SID के साथ संरक्षित हो।

नीचे स्क्रिप्ट SQL सर्वर सेवाओं को पुनरावृत्त कर देगी और आपको गायब होने पर आपको sysadmin भूमिका में जोड़ देगी :

#GITHUB Link : https://github.com/codykonior/HackSql
$userName = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name

$services = Get-Service | Where { ($_.Name -eq 'MSSQLSERVER' -or $_.Name -like 'MSSQL$*') -and $_.Status -eq "Running" }
foreach ($service in $services) {
    if ($service.Name -eq "MSSQLSERVER") {
        $sqlName = ".\"
    } else {
        $sqlName = ".\$($service.Name.Substring(6))"
    }

    Write-Host "Attempting $sqlName"
    $serviceProcess = Get-WmiObject -Class Win32_Service -Filter "Name = '$($service.Name)'"

    Invoke-TokenManipulation -ProcessId $serviceProcess.ProcessID -ImpersonateUser | Out-Null
    $impersonatedUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
    Write-Host "Service $($service.Name) on PID $($serviceProcess.ProcessID) will connect to $sqlName as $impersonatedUser"

    $sqlConnection = New-Object System.Data.SqlClient.SqlConnection("Data Source=$sqlName;Trusted_Connection=True")
    $sqlConnection.Open()
    $sqlCommand = New-Object System.Data.SqlClient.SqlCommand("If Not Exists (Select Top 1 0 From sys.server_principals Where name = '$userName')
Begin
    Create Login [$userName] From Windows
End

If Not Exists (Select Top 1 0 From master.sys.server_principals sp Join master.sys.server_role_members srp On sp.principal_id = srp.member_principal_id Join master.sys.server_principals spr On srp.role_principal_id = spr.principal_id Where sp.name = '$userName' And spr.name = 'sysadmin')
Begin
    Exec sp_addsrvrolemember '$userName', 'sysadmin'
End", $sqlConnection)
    $sqlCommand.ExecuteNonQuery() | Out-Null
    $sqlConnection.Close()
    Invoke-TokenManipulation -RevToSelf | Out-Null
}

2

आप अभी भी 'sysadmin' एक्सेस के साथ एक लॉगिन बना सकते हैं। Microsoft (सलीम हक्कानी) के प्रिंसिपल डेटा इंजीनियर के लिए धन्यवाद नीचे SQL सर्वर टिप्स एंड ट्रिक लिखा था।

मुझे यह तब मिला जब मैं अपनी परीक्षण मशीन के लिए पासवर्ड भूल जाने पर इसी तरह की स्थिति में फंस गया था।

लिंक: https://blogs.technet.microsoft.com/sqlman/2011/06/14/tips-tricks-you-have-lost-access-to-sql-server-now-what/

यहां वे चरण दिए गए हैं जिन्हें आपको करने की आवश्यकता होगी:

  1. एकल उपयोगकर्ता मोड (या न्यूनतम कॉन्फ़िगरेशन जो एकल उपयोगकर्ता मोड में SQL सर्वर भी डाल देगा) का उपयोग करके SQL सर्वर आवृत्ति प्रारंभ करें

कमांड प्रॉम्प्ट प्रकार से: SQLServr.Exe –m (या SQLServr.exe -f)

नोट: यदि Binn फ़ोल्डर आपके पर्यावरणीय पथ में नहीं है, तो आपको Binn फ़ोल्डर में नेविगेट करना होगा।

(आमतौर पर Binn फोल्डर यहां स्थित होता है: C: \ Program Files \ Microsoft SQL Server \ MSSQL10.MSSQLSERVER \ MSSQL \ Binn)

  1. एक बार SQL सर्वर सेवा एकल उपयोगकर्ता मोड में या न्यूनतम कॉन्फ़िगरेशन के साथ शुरू हो जाने के बाद, अब आप SQL सर्वर से कनेक्ट करने के लिए SQL सर्वर से कनेक्ट करने के लिए SQL सर्वर से कनेक्ट करने के लिए कमांड प्रॉम्प्ट से SQLCMD कमांड का उपयोग कर सकते हैं।

SQLCMD –S

अब आप एक व्यवस्थापक के रूप में SQL सर्वर पर लॉग इन होंगे।

  1. एक बार जब आप SQLCMD का उपयोग करते हुए SQL सर्वर में लॉग इन करते हैं, तो नया खाता बनाने के लिए या SYSADMIN सर्वर भूमिका में एक मौजूदा लॉगिन जोड़ने के लिए निम्न आदेश जारी करें।

एक नया लॉगिन बनाने और SYSADMIN सर्वर भूमिका में उस लॉगिन को जोड़ने के लिए:

1> पासवर्ड बनाएं = 'PASSWORD =' 'के साथ

2> जाना

1> SP_ADDSRVROLEMEMBER ',' SYSADMIN '

2> जाने

SYSADMIN सर्वर भूमिका में एक मौजूदा लॉगिन जोड़ने के लिए, निम्नलिखित पर अमल करें:

1> SP_ADDSRVROLEMEMBER ',' SYSADMIN '

उपरोक्त ऑपरेशन मौजूदा लॉगिन या नए लॉगिन के लिए SYSADMIN विशेषाधिकार देने का ध्यान रखेगा।

  1. एक बार जब उपरोक्त चरण सफलतापूर्वक किए जाते हैं, तो अगला कदम नियमित स्टार्टअप विकल्पों का उपयोग करके SQL सर्वर सेवाओं को बंद करना और शुरू करना है। (इस समय आपको -f या –m की आवश्यकता नहीं होगी)

0

आप अगला कर सकते हैं:
1) प्रशासनिक विशेषाधिकारों के साथ एक विंडोज़ उपयोगकर्ता खाता बनाएँ
2) नए प्रशासनिक खाते के साथ खिड़कियों में लॉगिन करें
3) विंडोज प्रमाणीकरण
4 का उपयोग करके एसक्यूएल सर्वर मैनेजमेंट स्टूडियो खोलें ) अब आप SQL सर्वर में sysadmin के रूप में लॉग इन हैं, इसलिए आप नए खाते बना सकते हैं या sa उपयोगकर्ता को अपडेट कर सकते हैं


2
कोशिश की और यह काम नहीं किया। मैंने उस मशीन पर एक नया व्यवस्थापक लॉगिन खाता बनाया। SQL सर्वर मुझे लॉग इन करने के लिए BUILTIN \ Users भूमिकाओं (जिसमें sysadmin को शामिल नहीं करता है) का उपयोग करता है। इसलिए मैं अभी भी व्यवस्थापक परिवर्तन नहीं कर सकता।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.