خانه/ امنیت/ Logins

Login: کارت ورود به خودِ سرور، نه به یک پایگاه‌داده‌ی خاص

مبتدی ۱۱ دقیقه مطالعه
این درس و بقیه‌ی درس‌های این فصل (به‌جز تزریق SQL) درباره‌ی مکانیزم امنیتی SQL Server هستند. SQLite (موتور همین Playground) هیچ سیستم احراز هویت یا مجوزدهی‌ای ندارد — امنیتش فقط به سطح دسترسی فایل سیستم‌عامل محدود می‌شود. به همین دلیل، درس‌های این فصل جعبه‌ی اجرا ندارند؛ روی کدهای واقعی SQL Server تمرکز می‌کنیم.

وقتی به یک نمونه (Instance) از SQL Server وصل می‌شوی، اولین سوالی که پاسخ داده می‌شود این است: «اصلاً تو کی هستی؟» — این پاسخ را Login می‌دهد. Login یک شناسه در سطح سرور است؛ به‌تنهایی هیچ اجازه‌ای برای دیدن یا تغییر داده‌ی هیچ پایگاه‌داده‌ای نمی‌دهد — فقط اجازه‌ی «وارد شدن به سرور» را می‌دهد.

دو روش احراز هویت

  • Windows Authentication: از حساب کاربری ویندوز که کاربر با آن وارد سیستم‌عامل شده استفاده می‌کند. رمز عبور جداگانه‌ای نیاز نیست — اعتبارسنجی به‌طور کامل توسط Active Directory/ویندوز انجام می‌شود. گزینه‌ی پیشنهادی مایکروسافت برای محیط‌های سازمانی.
  • SQL Server Authentication: نام کاربری و رمز عبوری که مستقل از ویندوز، مستقیم داخل خودِ SQL Server تعریف و ذخیره می‌شود. برای برنامه‌ها یا کاربرانی که خارج از دامنه‌ی ویندوز هستند لازم است.
sql
-- ساخت یک Login با SQL Server Authentication:
CREATE LOGIN ali_app WITH PASSWORD = N'Str0ngP@ssw0rd!';

-- ساخت یک Login که به یک حساب ویندوزی نگاشت می‌شود:
CREATE LOGIN [DOMAIN\ali] FROM WINDOWS;

Login به‌تنهایی کافی نیست

نکته‌ی مهمی که خیلی از تازه‌کارها اشتباه می‌گیرند: داشتن یک Login معتبر، فقط یعنی سرور تو را می‌شناسد و اجازه‌ی اتصال می‌دهد — اما هنوز به هیچ پایگاه‌داده‌ی خاصی دسترسی نداری. برای این‌که بتوانی داخل یک پایگاه‌داده کاری انجام دهی، آن Login باید به یک User در سطح همان پایگاه‌داده نگاشت شود — موضوع دقیق درس بعدی.

جمع‌بندی این درس

  • Login یک شناسه در سطح کل سرور SQL Server است، نه یک پایگاه‌داده‌ی خاص.
  • دو روش احراز هویت داریم: Windows Authentication و SQL Server Authentication.
  • داشتن Login به‌تنهایی، هیچ اجازه‌ی دسترسی به داده‌های هیچ پایگاه‌داده‌ای نمی‌دهد.

در درس بعدی می‌بینیم چطور یک Login را به یک User در یک پایگاه‌داده‌ی مشخص نگاشت می‌کنیم تا واقعاً بتواند به داده دسترسی داشته باشد.