it-swarm.asia

كيف يمكنك إعادة تعيين كلمة مرور sa؟

فقدت كلمة مرور sa على جهاز ، وعندما أقوم بتسجيل الدخول إلى الجهاز مباشرةً باستخدام حساب في مجموعة الإدارة ، لن يسمح لي SQL Server Management Studio بتسجيل الدخول باستخدام مصادقة Windows.

كانت خطتي هي ببساطة تسجيل الدخول إلى الخادم والاتصال عبر مصادقة Windows وإعادة تعيين sa لاستخدام كلمة مرور جديدة. نظرًا لأنني غير قادر على الاتصال عبر مصادقة Windows ، فلن يعمل هذا.

كيف يمكنني إعادة تعيين كلمة مرور sa؟

22
Daniel Williams

يمكنك اتباع الخطوات المذكورة في الرابط أدناه لإعادة تعيين SA كلمة المرور:

الخطوات الملخصة أدناه:

  1. افتح SQL Server Configuration Manager من قائمة ابدأ> البرامج> Microsoft SQL Server 20xx> أدوات التكوين> ذات الصلة بأحدث إصدار من SQL Server قمت بتثبيته (على سبيل المثال ، إذا كان لديك 2005 و 2012 مثبتًا ، فاستخدم إصدار 2012). أليس لديك قائمة ابدأ؟ في شاشة ابدأ في Windows 8 ، ابدأ كتابة SQL Server Con ... حتى يظهر.
  2. أوقف مثيل SQL Server الذي تحتاج إلى استرداده بالنقر بزر الماوس الأيمن على المثيل في SQL Server Services وتحديد "إيقاف"
  3. انقر بزر الماوس الأيمن على المثيل الذي أوقفته للتو ، وانقر على خصائص ، وفي علامة التبويب "خيارات متقدمة" ، في مربع نص الخصائص ، أضف "؛ –m" إلى نهاية القائمة في خيار "معلمات بدء التشغيل" (في الإصدارات الأحدث ، يمكنك الانتقال مباشرةً إلى علامة التبويب "معلمات بدء التشغيل" ، واكتب "-m" وانقر على إضافة ، دون القلق بشأن بناء الجملة أو الفاصلة المنقوطة أو أي شيء آخر).
  4. انقر فوق الزر "موافق" ، وأعد تشغيل مثيل SQL Server
  5. بعد بدء تشغيل مثيل SQL Server في وضع المستخدم المفرد ، يكون حساب مسؤول Windows قادرًا على الاتصال بـ SQL Server باستخدام الأداة المساعدة sqlcmd باستخدام مصادقة Windows. يمكنك استخدام أوامر Transact-SQL مثل "sp_addsrvrolemember" لإضافة معلومات تسجيل دخول حالية (أو تسجيل دخول تم إنشاؤه حديثًا) إلى دور خادم مسؤول النظام.

يضيف المثال التالي الحساب "Buck" في مجال "CONTOSO" إلى دور مسؤول النظام:

EXEC sp_addsrvrolemember 'CONTOSO\Buck', 'sysadmin';

بمجرد استعادة وصول مسؤول النظام ، قم بإزالة "؛ -m" من معلمات بدء التشغيل باستخدام مدير التهيئة وأعد تشغيل مثيل SQL Server مرة أخرى.

ملاحظة: تأكد من عدم وجود مسافة بين "؛" و "-m" ، محلل معلمة التسجيل حساس لمثل هذه الأخطاء المطبعية. يجب أن ترى إدخالاً في ملف SQL Server ERRORLOG الذي يقول "بدأ تشغيل SQL Server في وضع المستخدم الفردي."


مصادر إضافية:

في النهاية ، يمكنك دائمًا نسخ ملفات قاعدة البيانات إلى مثيل آخر ، أو حتى إعادة تثبيت SQL Server (إضافة حساب محلي مثل مسؤول النظام أثناء تلك العملية).

10
TroubleshootingSQL

سيعتمد ما تفعله على إصدار SQL Server الخاص بك ، بالإضافة إلى ما إذا كان بإمكانك تحمل خدمة SQL Server من أجل إنشاء بيانات اعتماد جديدة. لا تتطلب الطريقتان الأوليتان هنا إعادة تشغيل المثيل:


بالنسبة لمثيلات SQL Server 2005 و 2008 و 2008 R2

يمكنك الاتصال باستخدام حساب NT AUTHORITY\SYSTEM (أو طرق أخرى مستترة). هناك بعض التفاصيل في بعض الإجابات هنا:

لدي أيضًا نصيحة حول MSSQLTips.com تعالج هذه المشكلة:

بشكل أساسي ، يمكنك تنزيل PSExec من Microsoft ، ثم استخدامه لتشغيل Studio Studio بمجرد تثبيته:

PsExec -s -i "C:\...\Ssms.exe"

سيتم ربط هذا كـ NT AUTHORITY\SYSTEM وسيسمح لك بالقيام بأشياء في Object Explorer ، مثل:

  • قم بتغيير المثيل إلى SQL Server ووضع مصادقة Windows - انقر بزر الماوس الأيمن فوق اسم الخادم ، وضرب الخصائص ، وقم بتغيير زر الراديو إذا تم تعيينه حاليًا على Windows فقط:

    enter image description here

  • قم بتعيين كلمة المرور لحساب sa - قم بتوسيع الأمان ، قم بتوسيع عمليات تسجيل الدخول ، انقر بزر الماوس الأيمن sa واضغط على خصائص ، وفي مربع الحوار الناتج سيكون هناك حقلين لإدخال كلمة المرور:

    enter image description here

  • قم بإضافة تسجيل الدخول الخاص بك كـ sysadmin - انقر بزر الماوس الأيمن على تسجيلات الدخول الجديدة ... أدخل اسم تسجيل الدخول الخاص بك (في النموذج DOMAIN\username) ثم انتقل إلى علامة التبويب أدوار الخادم وحدد المربع sysadmin وانقر فوق OK:

    enter image description here

  • (أو ، إذا كان تسجيل الدخول الخاص بك مدرجًا بالفعل ، فانقر بزر الماوس الأيمن فوق خصائص ، وتأكد من تحديد sysadmin ضمن أدوار الخادم)


ل SQL Server 2012 والمثيلات الأحدث

بدءًا من SQL Server 2012 ، لم يعد يتم منح NT Authority\SYSTEM حقوق SQL Server افتراضيًا. لذلك هناك طريقة أخرى للقيام بذلك في هذه الإصدارات الأحدث كانت مفصّلة بواسطة Argenis Fernandez :

  1. إذا كانت خدمة كاتب SQL VSS قيد التشغيل ، أوقفها ، وقم بتعليق جميع خطط الصيانة أو برامج النسخ الاحتياطي للجهات الخارجية التي قد تعتمد عليها.
  2. افتح regedit.exe وقم بتغيير قيمة HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SQLWriter\ImagePath للإشارة إلى SQLCMD.exe ، التي ستكون في C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\**<...110|120|130|140...>**\Tools\Binn. بعد التحرير ، يجب أن تبدو قيمة التسجيل على النحو التالي (آسف للتمرير):

    "C:Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\SQLCMD.exe" -S .\instancename -E -Q "ALTER ROLE sysadmin ADD MEMBER [YourDomain\YourUserName];"
    
  3. حاول بدء تشغيل خدمة SQL VSS Writer مرة أخرى (ستحصل على خطأ ، فلا بأس).

  4. يجب أن تكون الآن قادرًا على الاتصال كـ sysadmin باستخدام YourDomain\YourUserName. لذا أوقف خدمة كاتب SQL VSS وأصلح التسجيل وأعد تشغيل الخدمة (إذا كنت بحاجة إلى تشغيلها أو إذا كانت قيد التشغيل قبل بدء ذلك).

لقد مررت بهذا بمزيد من التفاصيل في نصيحة ثانية:

على الرغم من أنني عندما كتبت تلك النصيحة ، فقد استخدمت أسلوبًا أكثر تعقيدًا لعمل نسخة من SQLCMD.exe واستبدال sqlwriter.exe - أسهل كثيرًا في توجيه الخدمة إلى SQLCMD.exe مباشرةً.


إذا كنت تستطيع تحمل خدمة SQL Server إلى أسفل

هناك مسار معتمد رسميًا من Microsoft يتطلب إعادة تشغيل المثيل في وضع مستخدم واحد:

هناك أيضًا وظيفة في dbatools.io ، حل Powershell لإدارة SQL Server ، يسمى Reset-DbaAdmin:


الأمن ليس القضية الرئيسية هنا

أرى الكثير من الأشخاص يطالبون Microsoft بـ "إصلاح" ما يسمى بـ "نقاط الضعف". هذه طرق صالحة لاستعادة الوصول إلى مثيل SQL Server تمتلكه بشكل شرعي. تتطلب جميعها امتيازات عالية على المضيف الفعلي حيث يوجد SQL Server ؛ كما قلت لعدة أشخاص ، إذا كنت لا تريد أن يعبث المطورون بتثبيتات SQL Server ، فلا تجعلهم مسؤولين.

9
Aaron Bertrand