خانه/ وبلاگ/ بازیابی رمز عبور SA
SQL Server

فراموش کردن رمز عبور SA در SQL Server؛ چگونه آن را تغییر دهیم؟

عیب‌یابی ۲۷ مرداد ۱۴۰۵ ۹ دقیقه مطالعه به‌روزرسانی: ۵ آبان ۱۴۰۵

SA (مخفف System Administrator) قدرتمندترین Login داخلی SQL Server است و به‌طور پیش‌فرض عضو نقش سرور sysadmin است. اگر رمز آن را فراموش کرده‌ای و هیچ Login دیگری با دسترسی مدیریتی نداری، به‌نظر می‌رسد قفل شده‌ای — اما خوشبختانه اگر به سیستم‌عامل سروری که SQL Server روی آن نصب است دسترسی Administrator داشته باشی، می‌توانی با Single-User Mode دوباره کنترل را به دست بگیری.

این روش نیاز به دسترسی Administrator ویندوز روی همان سروری دارد که SQL Server رویش نصب شده. اگر چنین دسترسی‌ای نداری، باید از مدیر سیستم یا DBA سازمانت کمک بگیری.

راه ساده‌تر: استفاده از یک Login دیگر با دسترسی sysadmin

اگر Login دیگری (چه یک حساب ویندوزی و چه یک SQL Login) داری که عضو نقش sysadmin است، نیازی به روش پیچیده‌ی زیر نیست — فقط با آن وصل شو و رمز SA را مستقیم عوض کن:

sql
ALTER LOGIN sa WITH PASSWORD = N'N3wStr0ngP@ss!';
ALTER LOGIN sa ENABLE;

اگر چنین Login ای نداری، ادامه‌ی این راهنما را دنبال کن.

مرحله ۱ — توقف سرویس SQL Server

از SQL Server Configuration Manager یا services.msc، سرویس SQL Server (MSSQLSERVER) را متوقف کن.

مرحله ۲ — استارت سرویس در Single-User Mode

سرویس را از طریق Command Prompt با دسترسی Administrator و با پارامتر -m استارت کن. این حالت باعث می‌شود SQL Server فقط یک اتصال را بپذیرد و آن اتصال به‌صورت خودکار دسترسی sysadmin کامل داشته باشد — حتی بدون رمز عبور صحیح:

cmd
NET STOP MSSQLSERVER
NET START MSSQLSERVER /m"SQLCMD"

مقدار SQLCMD بعد از /m نام برنامه‌ای است که اجازه‌ی اتصال دارد؛ این کار باعث می‌شود فقط از طریق ابزار خط‌فرمان SQLCMD بتوانی وصل شوی و SSMS در این حالت متصل نشود.

مرحله ۳ — اتصال با SQLCMD و بازنشانی رمز

در همان Command Prompt، دستور sqlcmd را اجرا کن و رمز SA را تغییر بده:

cmd + sql
sqlcmd -S localhost -E

بعد از اجرای دستور بالا وارد محیط SQLCMD می‌شوی؛ حالا این دستورها را بزن (بعد از هر خط، GO را جدا اجرا کن):

sql
ALTER LOGIN sa WITH PASSWORD = N'N3wStr0ngP@ss!';
GO
ALTER LOGIN sa ENABLE;
GO

مرحله ۴ — بازگرداندن سرویس به حالت عادی

سرویس را دوباره متوقف و بدون پارامتر -m استارت کن تا به حالت چند-کاربره‌ی معمولی برگردد:

cmd
NET STOP MSSQLSERVER
NET START MSSQLSERVER

حالا می‌توانی در SSMS با نام کاربری sa و رمز جدید وصل شوی.

برای جلوگیری از این وضعیت در آینده، بهتر است حداقل یک Login (ویندوزی یا SQL) دیگر هم عضو نقش sysadmin باشد تا در صورت مشکل با SA، راه جایگزین داشته باشی. رمز SA را هم به یک مدیریت‌کننده‌ی رمز سازمانی (Password Manager) بسپار.

جمع‌بندی

  • اگر Login دیگری با دسترسی sysadmin داری، مستقیم با ALTER LOGIN رمز SA را عوض کن.
  • در غیر این‌صورت، با Single-User Mode (پارامتر -m) و SQLCMD می‌توانی بدون رمز قبلی، رمز جدید تنظیم کنی.
  • این روش نیاز به دسترسی Administrator ویندوز روی سرور دارد.

برای آشنایی بیشتر با مفهوم Login و نقش‌های سرور، درس‌های Logins و Roles را ببین.

سوالات متداول درباره‌ی این موضوع

اگر رمز sa را فراموش کرده‌ام چطور وارد سرور شوم؟

اگر عضو Administrators ویندوز سرور هستی، سرویس را در Single-User Mode (پارامتر -m) اجرا کن؛ در این حالت اعضای Administrators می‌توانند وارد شوند و رمز را تغییر دهند.

تغییر رمز sa روی برنامه‌ها اثر می‌گذارد؟

فقط روی برنامه‌هایی که با sa وصل می‌شوند. توصیه می‌شود برنامه‌ها اصلاً از sa استفاده نکنند و Login جداگانه با حداقل دسترسی داشته باشند.

آیا بهتر است حساب sa غیرفعال شود؟

اگر استفاده نمی‌شود، بله؛ بعد از این‌که یک Login مدیر دیگر ساختی sa را Disable کن تا هدف حملات حدس رمز نباشد.

مصطفی موسویسازنده و نویسنده‌ی SQLFarsi. اگر اشتباهی در مقاله دیدی یا پیشنهادی داری، از طریق mousavi.dev خبر بده.

می‌خوای مفاهیم امنیت SQL Server را کامل یاد بگیری؟

فصل امنیت دوره‌ی SQLFarsi، Login، User، Role و Permission را از پایه توضیح می‌دهد.

شروع فصل امنیت