افزودن اکانت مدیریتی فراموش شده به SQL Server
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: دو دقیقه

فرض کنید
- تمام اکانت‌های مدیریتی توکار SQL Server را حذف کرده‌اید (یا برایتان حذف کرده‌اند).
- بجز کاربر SA، تمام کاربران را از نقش SYSADMIN حذف کرده‌اید؛ شامل تمام اکانت‌های ویندوزی و همچنین خود SQL Server.
- پسورد SA را هم فراموش کرده‌اید یا ندارید.

خوب، الان چکار می‌خواهید بکنید؟!
احتمالا نصب مجدد سرور را پیشنهاد دهید یا بانک اطلاعاتی Master را بازسازی کنید که در هر دو حالت تمام تنظیمات سرور را از دست خواهید داد. روش دیگری هم بدون از دست دادن تنظیمات سرور وجود دارد که در ادامه آن‌را بررسی خواهیم کرد.


افزودن یک اکانت مدیریتی جدید به SQL Server

اگر دسترسی کامل مدیریتی خود را به SQL Server از دست داده‌اید باید ابتدا به آن سرور لاگین کنید؛ با این فرض که کاربر وارد شده به سیستم، جزو local administrators group است.
 C:\>sqlcmd -S .
1> create login [MachineName\TestUser] from windows;
2> go
1> exec sp_addsrvrolemember 'MachineName\TestUser','sysadmin'
2> go
1> select is_srvrolemember('sysadmin', 'MachineName\TestUser')
2> go
-----------
1
(1 rows affected)
1>
سپس خلاصه مواردی را که ملاحظه می‌کنید، اجرای سه دستور است:
الف) اجرای sqlcmd با پارامتر S و مشخص سازی وهله‌ی مورد نظر
البته حالت کامل آن در صورتیکه از وهله‌ی پیش فرض استفاده نمی‌کنید SQLCMD –S Server_Name\Instance_Name است. S نیز در اینجا باید با حروف بزرگ نوشته شود.
ب) create login را بر روی یکی از اکانت‌های محلی سیستم اجرا کنید. مثلا MachineName\administrator یا هر اکانت موجود دیگری که لازم است. نام آن نیز باید حتما به شکل server_name\user_name باشد.
در حین استفاده از sqlcmd، هر فرمان زمانی اجرا می‌شود که در سطر پس از آن، یک go نوشته شده و enter شود.
ج) سپس توسط sp_addsrvrolemember به این اکانت اضافه شده، دسترسی sysadmin بدهید.

برای آزمایش آن فقط کافی است از متد is_srvrolemember برای کوئری گرفتن استفاده کنید و یا سعی کنید توسط اکانت اضافه شده، به SQL Server لاگین کنید. این اکانت اکنون در قسمت Security/logins قابل مشاهده است.

اگر نمی‌خواهید از اکانت‌های ویندوزی استفاده کنید، create login را به نحو ذیل مقدار دهی کنید:
 C:\>sqlcmd -S .
1> use master
2> go
Changed database context to 'master'.
1> create login test_user with password='123#123'
2> go
1> exec sp_addsrvrolemember 'test_user','sysadmin'
2> go
1>
سپس به این کاربر اضافه شده با کلمه‌ی عبور مشخص، توسط sp_addsrvrolemember دسترسی sysadmin بدهید.
  • #
    ‫۱۰ سال و ۷ ماه قبل، یکشنبه ۱۱ اسفند ۱۳۹۲، ساعت ۱۶:۴۹
     با سلام؛ دستور خط اول را که می‌نویسم ارور زیر را می‌دهد
     Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Login failed for user 'NARM-2-PC\Narm-2'..
    • #
      ‫۱۰ سال و ۷ ماه قبل، یکشنبه ۱۱ اسفند ۱۳۹۲، ساعت ۱۷:۳۸
      در متن قید شده «... با این فرض که کاربر وارد شده به سیستم، جزو local administrators group است ...». یعنی:

  • #
    ‫۸ سال و ۲ ماه قبل، شنبه ۲ مرداد ۱۳۹۵، ساعت ۰۸:۰۵
    با تشکر
    با یوزر ادمین لاگین شدم این ارور رو به من داد
    C:\>SQLCMD -S G510\MSSQLSERVER2012
    Msg 18456, Level 14, State 1, Server G510\MSSQLSERVER2012, Line 1
    Login failed for user 'G510\Administrator'.  
    • #
      ‫۸ سال و ۲ ماه قبل، شنبه ۲ مرداد ۱۳۹۵، ساعت ۱۳:۲۱
      چنین دستوری در متن جایی عنوان نشده‌است. موردی که عنوان شده، این است:
      الف) اجرای sqlcmd با پارامتر S و مشخص سازی وهله‌ی مورد نظر
      «نقطه‌ای» که دراینجا ذکر شده (. sqlcmd -S )، همان اشاره به وهله‌ی پیش فرض است و حالت کلی آن Server_Name\Instance_Name هست.

      نام وهله‌‌های نصب شده‌ی بر روی سیستم را در این مدخل رجیستری ویندوز می‌توانید پیدا کنید (و یا دستور sqlcmd -L را اجرا کنید):
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names