حل مشکل احراز هویت در SQL Server: رفع خطای Login Failed for User
اگر هنگام اتصال به SQL Server از طریق SSMS یا هر برنامهی دیگری با پیام Login failed for user '...' روبهرو شدهای، خبر خوب این است که این یکی از رایجترین و قابلرفعترین خطاهای SQL Server است. در این راهنما قدمبهقدم علت اصلی خطا را پیدا میکنیم و آن را هم از طریق SSMS (رابط گرافیکی) و هم با T-SQL رفع میکنیم.
۱) نامکاربری و رمز عبور را بررسی کن.
۲) مطمئن شو Mixed Mode فعال است و سرویس بعد از تغییر ریاستارت شده.
۳) در Login Properties وضعیت Enabled و Locked out را ببین.
۴) عدد State را از Error Log بخوان تا علت دقیق مشخص شود.
Error: 18456 همراه است. مهمترین سرنخ برای پیدا کردن علت واقعی، عدد State است که در ادامه توضیح میدهیم.خطای Login Failed for User یعنی چه؟
این خطا زمانی رخ میدهد که SQL Server هویت کاربری که قصد اتصال دارد را تأیید نمیکند. به زبان ساده، سرور میگوید: «کسی که پشت این نامکاربری/رمزعبور یا این حساب ویندوزی ایستاده، مجاز به ورود نیست.» این خطا میتواند در سطح Login (احراز هویت در سطح سرور) یا در مرحلهی نگاشت آن Login به یک User در پایگاهدادهی مقصد رخ دهد.
مهمترین دلایل بروز این خطا
- نام کاربری یا رمز عبور اشتباه است — سادهترین و رایجترین علت.
- SQL Server Authentication (Mixed Mode) فعال نیست — سرور فقط روی Windows Authentication تنظیم شده و اجازهی ورود با نامکاربری/رمزعبور را نمیدهد.
- خودِ Login غیرفعال (Disabled) شده — یک مدیر سیستم آن را دستی غیرفعال کرده است.
- حساب قفل شده (Locked Out) — بعد از چند بار تلاش ناموفق پیاپی، در صورت فعال بودن Policy قفلشدن حساب.
- رمز عبور منقضی شده — با فعال بودن Enforce Password Expiration.
- Login به هیچ User ای در پایگاهدادهی مقصد نگاشت نشده — Login معتبر است، اما اجازهی ورود به آن پایگاهدادهی خاص را ندارد.
- اتصال از سرور/برنامهای با Trusted Connection اشتباه — مثلاً برنامه سعی میکند با Windows Authentication وصل شود، درحالیکه سرور روی SQL Authentication تنظیم شده.
رمزگشایی از عدد State در پیام خطا
وقتی خطا را در SQL Server Error Log میبینی (نه در پیام کلاینت، چون به دلایل امنیتی جزئیات کامل فقط در لاگ سرور ثبت میشود)، یک عدد State کنار آن هست که دقیقاً علت را مشخص میکند:
| State | معنی |
|---|---|
| State 5 | Login (نام کاربری) اصلاً وجود ندارد. |
| State 8 | رمز عبور اشتباه وارد شده است. |
| State 7 / 11 / 12 | Login معتبر است، اما دسترسی رد شده (مثلاً غیرفعال بودن یا محدودیت سطح دسترسی). |
| State 13 | سرویس SQL Server در حال Shutdown است. |
| State 18 | رمز عبور منقضی شده و باید تغییر کند. |
| State 38 / 40 | خطا در دسترسی به پایگاهدادهی پیشفرض تعریفشده برای آن Login. |
برای دیدن این عدد باید Error Log سرور را از مسیر SSMS → Management → SQL Server Logs باز کنی؛ خودِ کلاینت (مثلاً پیام خطای SSMS) این جزئیات را نشان نمیدهد.
راهنمای تصویری رفع مشکل در SSMS
در ادامه رایجترین سناریو را قدمبهقدم در SQL Server Management Studio رفع میکنیم: فعالسازی Mixed Mode Authentication، فعالکردن یک Login قفلشده یا غیرفعال، تنظیم مجدد رمز عبور، و نگاشت آن به یک پایگاهداده.
مرحله ۱ — بررسی و فعالسازی SQL Server Authentication
ابتدا در Object Explorer، روی نام سرور راستکلیک کن و Properties را بزن، سپس صفحهی Security را باز کن:
مرحله ۲ — بررسی وضعیت Login (فعال/غیرفعال، قفلشده)
مسیر: Object Explorer → Security → Logins، روی Login موردنظر راستکلیک کن و Properties را انتخاب کن، سپس به تب Status برو:
اگر گزینهی Login is locked out فعال بود یا وضعیت Login روی Disabled بود، همینجا آن را به Enabled تغییر بده و OK را بزن.
مرحله ۳ — تنظیم مجدد رمز عبور (در صورت نیاز)
در همان پنجرهی Properties، به تب General برگرد و رمز جدید را در دو فیلد Password و Confirm password وارد کن. اگر Policy رمز عبور شرکت فعال است، تیک Enforce password policy را برحسب نیاز تنظیم کن.
مرحله ۴ — نگاشت Login به یک User در پایگاهداده
در تب User Mapping، پایگاهدادهی موردنظر را تیک بزن تا SQL Server یک User متناظر برایش بسازد، و در بخش پایین، نقشهای (Role) لازم مثل db_datareader یا db_datawriter را انتخاب کن:
رفع مشکل با T-SQL
اگر ترجیح میدهی بهجای رابط گرافیکی مستقیم از کوئری استفاده کنی، همهی مراحل بالا معادل T-SQL هم دارند:
-- فعال کردن یک Login غیرفعال ALTER LOGIN ali_app ENABLE; -- تنظیم مجدد رمز عبور (بدون بررسی رمز قبلی) ALTER LOGIN ali_app WITH PASSWORD = N'N3wStr0ngP@ss!'; -- خارج کردن Login از حالت قفلشده (Unlock) ALTER LOGIN ali_app WITH PASSWORD = N'N3wStr0ngP@ss!' UNLOCK; -- ساخت User متناظر در پایگاهدادهی مقصد و نگاشت به Login USE ShopDB; CREATE USER ali_app FOR LOGIN ali_app; -- دادن دسترسی خواندن به آن User ALTER ROLE db_datareader ADD MEMBER ali_app;
چکلیست سریع عیبیابی
| بررسی کن | مسیر |
|---|---|
| نام کاربری/رمز عبور درست است؟ | وارد کردن مجدد و دقت به Caps Lock |
| Mixed Mode Authentication فعال است؟ | Server Properties → Security |
| سرویس بعد از تغییر Authentication ریاستارت شده؟ | SQL Server Configuration Manager |
| Login فعال (Enabled) و قفلنشده است؟ | Login Properties → Status |
| Login به پایگاهدادهی مقصد نگاشت شده؟ | Login Properties → User Mapping |
| عدد State در Error Log چیست؟ | Management → SQL Server Logs |
جمعبندی
خطای Login failed for user تقریباً همیشه یکی از این چند علت را دارد: اطلاعات ورود اشتباه، غیرفعالبودن SQL Authentication، غیرفعال یا قفلبودن خودِ Login، یا نبودِ نگاشت به یک User در پایگاهدادهی مقصد. با نگاهکردن به عدد State در Error Log و دنبالکردن مراحل بالا، تقریباً همیشه میتوانی این مشکل را در کمتر از چند دقیقه رفع کنی.
برای درک عمیقتر مفاهیم امنیتی SQL Server، درسهای Logins، Users، Roles و Permissions را در دورهی SQLFarsi دنبال کن.
سوالات متداول دربارهی این موضوع
خطای 18456 در SQL Server یعنی چه؟
18456 کد عمومی «Login failed» است. پیام نمایشدادهشده در SSMS عمداً کلی است؛ علت دقیق را فقط عدد State در Error Log سرور نشان میدهد (SSMS ← Management ← SQL Server Logs).
تفاوت State 5 و State 8 در خطای Login failed چیست؟
State 5 یعنی Login با آن نام اصلاً وجود ندارد (نام کاربری اشتباه)؛ State 8 یعنی Login وجود دارد ولی رمز عبور اشتباه است.
بعد از فعال کردن Mixed Mode هنوز خطا میگیرم؛ چرا؟
تغییر Authentication Mode تا زمانی که سرویس SQL Server ریاستارت نشود اعمال نمیشود. بعد از ریاستارت دوباره وارد شو.
میخوای مفاهیم امنیت SQL Server را کامل یاد بگیری؟
فصل امنیت دورهی SQLFarsi، Login، User، Role و Permission را از پایه توضیح میدهد.
شروع فصل امنیت