افزایش امنیت سرور SQL: راهنمای جامع احراز هویت و مدیریت دسترسی(Authentication)
امنیت SQL Server از جنبههای حیاتی مدیریت پایگاه داده است که یکپارچگی دادهها را تضمین کرده و از دسترسی غیرمجاز جلوگیری میکند. این بخش اول به مفاهیم بنیادی احراز هویت (Authentication) و مجوز دسترسی (Authorization) در SQL Server میپردازد.
احراز هویت: تأیید هویت
احراز هویت فرآیند تأیید هویت کاربر هنگام تلاش برای اتصال به SQL Server است. SQL Server از دو حالت اصلی احراز هویت پشتیبانی میکند: احراز هویت ویندوز (Windows Authentication) و احراز هویت SQL Server (SQL Server Authentication).
- احراز هویت ویندوز: این روش ارجح است که از حسابهای کاربری و گروهی ویندوز برای احراز هویت استفاده میکند. هنگامی که کاربری با احراز هویت ویندوز متصل میشود، SQL Server برای تأیید هویت کاربر به سیستم عامل متکی است. این حالت اغلب به عنوان “امنیت یکپارچه” (Integrated Security) شناخته میشود.
- احراز هویت SQL Server: در این حالت، SQL Server مجموعه لاگینهای (نام کاربری و رمز عبور) خود را مدیریت میکند. کاربران نام کاربری و رمز عبور را مستقیماً به SQL Server ارائه میدهند. این حالت زمانی ضروری است که کاربران از دامنههای غیرویندوزی متصل میشوند یا الزامات برنامه خاصی آن را ایجاب میکند.
شما میتوانید SQL Server را برای احراز هویت حالت ترکیبی (Mixed Mode) تنظیم کنید که امکان هر دو نوع را فراهم میآورد. برای ایجاد یک لاگین SQL Server، از دستوری مشابه زیر استفاده میکنید:
CREATE LOGIN [YourNewLogin] WITH PASSWORD = 'YourStrongPassword123!', CHECK_POLICY = ON, CHECK_EXPIRATION = ON;
این دستور یک لاگین جدید به نام YourNewLogin با رمز عبور قوی ایجاد میکند که سیاست رمز عبور و تاریخ انقضا را اعمال مینماید.
اصولگیران (Principals): چه کسی به چه چیزی دسترسی دارد؟
اصولگیران موجودیتهایی هستند که میتوانند منابع SQL Server را درخواست کنند. آنها کاربران، گروهها و فرآیندها را در محیط SQL Server نشان میدهند. اصولگیران میتوانند در سطح سرور (لاگینها) یا در سطح پایگاه داده (کاربران) وجود داشته باشند.
- اصولگیران سطح سرور (لاگینها): اینها حسابهایی هستند که SQL Server برای احراز هویت اتصالات از آنها استفاده میکند. آنها در پایگاه داده
masterذخیره میشوند. میتوانید اصولگیران سرور موجود را با استفاده از کوئری زیر مشاهده کنید:
SELECT name, type_desc, is_disabled FROM sys.server_principals;
- اصولگیران سطح پایگاه داده (کاربران): هنگامی که یک لاگین به SQL Server احراز هویت میشود، میتواند به عنوان یک *کاربر* به یک پایگاه داده خاص متصل شود. یک کاربر یک اصولگیرنده در یک پایگاه داده است و به یک لاگین نگاشت میشود. یک لاگین واحد میتواند به کاربران مختلف در پایگاههای داده مختلف نگاشت شود. ایجاد یک کاربر پایگاه داده از یک لاگین شامل دستوری مانند:
CREATE USER [YourDatabaseUser] FOR LOGIN [YourNewLogin];
- این دستور یک کاربر
YourDatabaseUserرا در پایگاه داده فعلی ایجاد میکند که با اصولگیرنده سرورYourNewLoginمرتبط است.
نقشها (Roles): گروهبندی اصولگیران
نقشها مجموعهای از اصولگیران هستند. آنها مدیریت مجوزها را با اجازه دادن به شما برای اعطای مجوزها به یک نقش به جای هر اصولگیرنده به صورت جداگانه، ساده میکنند.
- نقشهای ثابت سرور (Fixed Server Roles): اینها نقشهای از پیش تعریف شده با مجموعههای خاص و ثابت از مجوزهای سرتاسری سرور هستند (مانند
sysadmin،securityadmin،dbcreator). به عنوان مثال،sysadminکنترل کامل بر نمونه SQL Server دارد. - نقشهای ثابت پایگاه داده (Fixed Database Roles): اینها نقشهای از پیش تعریف شده در هر پایگاه داده هستند (مانند
db_owner،db_datareader،db_datawriter). کاربری که در نقشdb_datareaderقرار دارد، میتواند تمام دادههای موجود در پایگاه داده را بخواند. - نقشهای تعریف شده توسط کاربر (User-Defined Roles): میتوانید نقشهای سفارشی خود را در هر دو سطح سرور و پایگاه داده ایجاد کنید تا مجوزها را مطابق با نیازهای خاص خود سازماندهی نمایید.
برای افزودن یک کاربر به یک نقش پایگاه داده، میتوانید از دستور زیر استفاده کنید:
ALTER ROLE db_datareader ADD MEMBER YourDatabaseUser;
مجوز دسترسی (Authorization): تعریف دسترسی
مجوز دسترسی فرآیندی است که تعیین میکند یک اصولگیرنده احراز هویت شده چه کارهایی را میتواند در SQL Server انجام دهد. این شامل اعطا (Grant)، ممنوعیت (Deny) یا لغو (Revoke) مجوزهای خاص بر روی منابع امنیتی (Securables) است.
- منابع امنیتی (Securables): اینها منابعی هستند که میتوان بر روی آنها مجوز اعطا کرد. آنها شامل اشیاء سطح سرور (مانند پایگاههای داده، Endpoints)، اشیاء سطح پایگاه داده (مانند جداول، نماها، رویههای ذخیره شده) و اشیاء سطح شماتیک هستند.
- مجوزها (Permissions): اینها اقدامات خاصی هستند که یک اصولگیرنده میتواند بر روی یک منبع امنیتی انجام دهد (مانند
SELECT،INSERT،UPDATE،DELETEبر روی یک جدول؛EXECUTEبر روی یک رویه ذخیره شده).
برای اعطای مجوز SELECT بر روی جدولی به نام Employees به یک کاربر YourDatabaseUser، از دستور زیر استفاده میکنید:
GRANT SELECT ON Employees TO YourDatabaseUser;
برعکس، برای جلوگیری از عملیات DELETE بر روی همان جدول برای کاربری دیگر، ممکن است از دستور زیر استفاده کنید:
DENY DELETE ON Employees TO AnotherUser;
درک این مفاهیم بنیادی احراز هویت، اصولگیران، نقشها و مجوز دسترسی، کلید ساختن یک محیط SQL Server قدرتمند و امن است.