یکی از مهمترین بخشهایی که باید به آن توجه کرد امنیت در SQL است که اگر درست به آن توجه نکنیم میتواند باعث ایجاد مشکلات امنیتی و درز اطلاعات مهم سازمان خواهد شد.
زمانی که یک دیتابیس را ایجاد میکنید، امنیت زیادی نخواهد داشت و اگر روش ایجاد امنیت بر روی دیتابیس را ندانید، شاید تمام اطلاعت خود را از دست بدهید.
۴-۱ روشهای احراز هویت
برای اینکه روشهای احراز هویت در SQL Server 2022 را بررسی کنیم بهتر است صفحهی اول نرمافزار SSMS را مشاهده کنید که در شکل ۱-۴ مشخص شده است.
شکل ۱-۴ احراز هویت
همانطور که در شکل ۱-۴ مشاهده میکنید احراز هویت SQL از چند قسمت تشکیل شده است که در زیر همهی آنها را بررسی خواهیم کرد:
Windows Authentication
یک روش احراز هویت است که در سرویسگیرندههای ویندوزی تعبیه شده است، این یک روش پیشفرض است که خود ویندوز بر روی آن تأکید میکند، در زمان نصب SQL این روش بهصورت پیشفرض اجرا خواهد شد و کاربر مورد نظر برای ورود به SQL تأیید خواهد شد.
اصولاً سازمانها برای مدیریت آسانتر کاربران یک سرویس Active directory در شبکه خود ایجاد میکنند و کاربران را بهصورت متمرکز در آن تعریف میکنند و بعد میتوان از طریق احراز هویت Windows Athentication به این کاربران دسترسی داد، اصولاً هر کاربر در ویندوز یک شمارهی خاص با نام SID دارد که با بقیه متمایز خواهد بود.
SQL Server Authentication
این روش از احراز هویت مختص نرمافزار SQL است و رمز عبور و نام کاربری در داخل دیتابیس نرمافزار تعریف میشود.
۴-۲ ایجاد کاربر و اعطای دسترسی به آن
همانطور که در اوایل کتاب گفتیم، زمانی که سرور SQL را عضو شبکه دامین میکنید، میتوانید از کاربران Active Directory برای دسترسی به SQL استفاده کنید و مجوزهای لازم را برای آن در نظر بگیرید، اما اگر بخواهید کاربر محلی در SQL ایجاد کنید باید بهمانند شکل ۲-۴ این کار را انجام دهید:
در شکل ۳-۴ باید کاربر خود را ایجاد کنید، در قسمت Login Name باید نام کاربر خود را وارد کنید و در زیر آن SQL Server Authentication را انتخاب کنید، با انتخاب این گزینه شما یک کاربر در داخل SQL Server ایجاد میکنید.
شکل ۳-۴ ایجاد کاربر
یک رمز عبور پیچیده وارد کنید مانند Test@12345، اگر میخواهید رمز عبور شما با خط مش سازمان شما یکی باشد باید تیک گزینهی Enforce password policy را انتخاب کنید، خط مش سازمان برای رمز عبور میتواند موارد زیر باشد:
زمانی که این گزینه را انتخاب میکنید باید موارد زیر رعایت شود:
- رمز عبور نباید شامل نام کاربری باشد.
- رمز عبور حداقل هشت کاراکتر باشد.
- رمز عبور باید شامل حروف (a-z)، (A-Z) و اعداد (۰-۹) باشد.
- رمزهای غیرالفبایی مانند: تعجب (!) ، علامت دلار ($) ، علامت عدد (#) یا درصد(٪).
در ادامه کار اگر تیک گزینهی Enforce Password Expiration را انتخاب کنید به این معنا است که یک تاریخ برای انقضاء رمز عبور کاربران در نظر گرفته خواهد شد و قبل از اینکه تاریخ انقضاء برسد به کاربران هشدارهای لازم داده خواهد شد تا رمز عبور خود را تغییر دهند.
گزینهی User Must Change Passeowrd at next Login را انتخاب کنید کاربر بعد از ورود باید رمز عبور را خودش تغییر دهد.
در آخر شکل ۳-۴ میتوانید کاربر مورد نظر را به دیتابیس مورد نظر خود تخصیص دهید، تا دسترسی اولیه به آن را داشته باشد.
در ادامه کار بهمانند شکل ۴-۴ وارد تب Server Role شوید، در این قسمت گزینههای مختلف دسترسی وجود دارد که در جدول ۱-۴ به طور کامل آن را بررسی میکنیم.
شکل ۴-۴ دسترسی به کاربر
جدول ۱- ۴ بررسی Role دسترسی
نام Role | توضیحات |
sysadmin | کاربران عضو sysadmin میتوانند هر فعالیتی را در سرور انجام دهند. یعنی آزاد و رها هستند. |
serveradmin | کاربران عضو serveradmin میتوانند پیکربندی سرور مورد نظر را تغییر دهند و همچنین میتوانند سرور را خاموش کنند. |
securityadmin | اعضای گروه securityadmin میتوانند قسمت Login و جزئیات آنها را مدیریت کنند، کاربرانی که عضو این نقش هستند توانایی این را دارند که مجوزهای سطح سرور را اعطا کنند مانند GRANT و DENY و یا REVOKE ، آنها همچنین میتوانند در صورت دسترسی به دیتابیس مجوزهای آن را هم مدیریت کنند، علاوه بر این هم آنها میتوانند رمزهای عبور کاربران را ریست کنند. |
processadmin | کاربرانی که عضو نقش processadmin باشند میتوانند فرایندهای در حال اجرا را خاتمه دهند. |
setupadmin | کاربران این نقش میتوانند با استفاده از زبان پرسوجو یا همان Transact-SQL سرورها SQL را اضافه یا حذف کنند، البته در صورت استفاده از Management Studio کاربر مورد نظر حتماً باید عضو sysadmin هم باشد. |
bulkadmin | اعضای نقش bulkadmin میتوانند دستور BULK INSERT را اجرا کنند (دستور BLUNK INSERT میتواند با استفاده از فایلهای txt یا csv مقادیر زیادی از اطلاعات را به جداول اضافه کند). |
diskadmin | کاربران عضو نقش diskadmin میتوانند فایلهای موجود بر روی دیسک را مدیریت کنند. |
dbcreator | کاربران دارای نقش dbcreator میتوانند هر پایگاه دادهای را ایجاد، مدیریت و حذف کنند و حتی میتوانند پایگاهدادهی مورد نظر را بازیابی کنند. |
public | زمانی که یک کاربر ایجاد میکنید بهصورت پیشفرض نقش public به آن تعلق میگیرد، این نقش به این صورت است که زمانی که مدیر یک object ایجاد میکند میتواند مشخص کند که کاربرانی که نقش public را دارند بتوانند به آن object دسترسی داشته باشند. |
برای اینکه به کاربر ali دسترسی کامل دهیم تیک گزینهی securityadmin را بهمانند شکل ۵-۴ انتخاب میکنیم.
شکل ۵-۴ دسترسی به کاربر
در ادامه کار وارد تب User Mapping شوید در این صفحه که در شکل ۶-۴ مشخص شده است، شما میتوانید مشخص کنید که کاربر مورد نظر بر روی کدام دیتابیس دسترسی لازم را داشته باشد.
شکل ۶-۴ دسترسی به دیتابیس
در پایین شکل ۶-۴ که در شکل ۷-۴ مشخص شده است چندین Role وجود دارد که میتوانید برای دسترسی به دیتابیس توسط کاربر مورد نظر مشخص کنید، برای اینکه بیشتر با گزینههای مورد نظر آشنا شویم به جدول ۲-۴ توجه کنید.
شکل ۷-۴ دسترسی به دیتابیس
جدول ۲- ۴ Role دسترسی
نام Role | توضیحات |
db_owner | کاربرانی که نقش db_owner را دریافت میکنند میتوانند بر کلیهی تنظیمات و نگهداری پایگاهداده مورد نظر را انجام دهند و همچنین میتوانند پایگاهداده را در sql حذف کنند، البته در بعضی از مواقع این نوع دسترسی کارایی ندارد و باید مجوز سطح سرور به آنها داده شود. |
db_securityadmin | اعضای این نقش توانایی تغییر عضویت در نقشها را دارند و همچنین میتوانند وظیفه مدیریت اختیارات را برعهده دارند. |
db_accessadmin | این نقش به کاربران این اجازه را میدهد که بر روی Login کردن در SQL نظارت و دسترسی داشته باشد. |
db_backupoperator | این قابلیت را به کاربران میدهد تا بتوانند از پایگاهداده پشتیبان تهیه کنند. |
db_ddladmin | اعضای این گروه توانایی اجرای دستورات از نوع DDL را دارند. |
db_datawriter | اعضای این گروه توانایی تغییر، حذف، و اضافهکردن هیچ اطلاعاتی را در جدولهای تعریف شده توسط کاربر ندارند. |
db_datareader | اعضای این نقش، توانایی خواندن اطلاعات از جدولهای تعریف شده توسط کاربر را دارد. |
db_denydatawriter | اعضای این نقش نمیتوانند دادههای موجود در جداول کاربران موجود در یک پایگاهداده را اضافه، اصلاح یا حذف کنند. |
db_denydatareader | کاربرانی که این نقش را دارند نمیتوانند هیچ دادهای را از جدولهای تعریف شده توسط کاربر بخوانند. |
در شکل ۸-۴ تیک گزینهی db_securityadmin را انتخاب کنید تا کاربر مورد نظر دسترسی کامل به دیتابیس داشته باشد.
شکل ۸-۴ دسترسی به دیتابیس
بعد از انجام کار میتوانید بر روی OK کلیک کنید تا کاربر مورد نظر ایجاد شود، بعد از ایجاد کاربر بهمانند شکل ۹-۴ بر روی کاربرمورد نظر کلیک راست کنید و گزینهی Properties را انتخاب کنید.
شکل ۹-۴ بررسی کاربر
در شکل ۱۰-۴ جزئیات مربوط به کاربر ali را مشاهده میکنید، در تب Securables یک سری دسترسیهای پیشرفته وجود دارد که میتوانید از طریق مدیر SQL به کاربران و دیتابیس مورد نظر اعطا کنید.
شکل ۱۰-۴ بررسی تب Securables
در تب Status که در شکل ۱۱-۴ مشخص شده است میتوانید مشخص کنید که کاربر مورد نظر توانایی متصل شدن به Database Engine را داشته باشد یا نه و یا اینکه کاربر مورد نظر را فعال و یا غیرفعال کنید.
شکل ۱۱-۴ بررسی قسمت Status
اگر بخواهیم یک کاربر از طریق Active Directory را به لیست Logins اضافه کنیم باید بهمانند شکل ۱۲-۴ بر روی Logins کلیک راست کنید و گزینهی New Login را انتخاب کنید.
شکل ۱۲-۴ ایجاد کاربر Active Directory
در شکل ۱۳-۴ باید گزینهی Windows authentication را انتخاب کنید و بر روی Search کلیک کنید.
شکل ۱۳-۴ ایجاد کاربر Active Directory
در شکل ۱۴-۴ باید از قسمت Location دومین خود را انتخاب کنید و کاربر مورد نظر خود را در کادر مشخص شده وارد کنید تا با کلیک بر روی Check Names آن را پیدا کنید.
شکل ۱۴-۴ ایجاد کاربر Active Directory
اگر به شکل ۱۵-۴ توجه کنید بعد از انتخاب کاربر از نوع دومین دیگر نمیتوانید رمز عبور و دیگر گزینهها را خودتان وارد و انتخاب کنید بلکه این اطلاعات از طریق سرویس Active Directory انجام میگیرد.
شکل ۱۵-۴ ایجاد کاربر Active Directory
همانطور که در شکل ۱۶-۴ مشاهده میکنید هم کاربر ali و هم کاربر spsql که از نوع دومین بوده به لیست SQL اضافه شده است، برای اینکه با این کاربران وارد SQL شویم باید بر روی آیکون مورد نظر کلیک کنید.
شکل ۱۶-۴ ایجاد کاربر Active Directory
قبل از اینکه ادامه دهیم باید این نکته را متذکر شویم که برای ورود با کاربر تحت دومین باید با همان کاربر اول وارد ویندوز شوید و بعد از آن میتوانید با انتخاب windows Authentication از آن کاربر استفاده کنید ولی برای ورود با کاربر ali که از نوع SQL Authentication است باید گزینهی SQL Server Authentication را انتخاب کنید و طبق شکل ۱۷-۴ کاربر ALI را وارد و بر روی Connect کلیک کنید، بعد از کلیک با خطایی روبرو خواهید شد که اجازه ورود به سرور را به کاربر ali نمیدهد.
شکل ۱۷-۴ احراز هویت SQL
برای حل خطای شکل ۱۷-۴ باید بهمانند شکل ۱۸-۴ بر روی سرور کلیک راست کنید و گزینهی Properties را انتخاب کنید.
در شکل ۱۹-۴ وارد تب Security شوید و گزینهی SQL Server and Windows Authentication mode را انتخاب کنید، با این کار هم با احراز هویت SQL و هم Windows میتوانیم وارد سرور SQL شویم.
شکل ۱۹-۴ احراز هویت SQL
در شکل ۲۰-۴ مشخص شده است که کاربر ali که از نوع SQL Authentication است توانسته وارد سرور SQL شود.
شکل ۲۰-۴ احراز هویت SQL
ایجاد کاربر از طریق Query
یکی دیگر از راههای ایجاد کاربر یا موارد خاص دیگر استفاده از دستورات SQL است که در این قسمت میخواهیم این کار را انجام دهیم، برای شروع باید بر روی نام سرور SQl کلیک راست کنید و گزینهی New Query را بهمانند شکل ۲۱-۴ انتخاب کنید.
شکل ۲۱-۴ ایجاد کاربر از طریق Query
در صفحه بازشدهی شکل ۲۲-۴ دستورات زیر را وارد کنید و بعد از آن کلید F5 را فشار دهید:
USE [DB1]
CREATE LOGIN [reza] WITH PASSWORD='۱', DEFAULT_DATABASE=[DB1], CHECK_EXPIRATION=ON, CHECK_POLICY=ON
در دستور بالا و در خط اول باید مشخص کنیم که بر روی چه دیتابیسی قرار است کار کنیم که در اینجا دیتابیس DB1 انتخاب شده است، در خط بعد باید دستورات اصلی را وارد کنیم، با دستور CREATE LOGIN مشخص میکنیم که میخواهیم یک LOGIN جدید ایجاد کنیم که بعد از آن هم در [] نام کاربر را که reza است وارد میکنیم و با دستور WITH PASSWORD رمز عبور آن را که حتماً هم باید در ‘’ باشد را مشخص میکنیم، در ادامه باید ویژگیهای این کاربر را مشخص کنیم، مثلاً برای اینکه مشخص کنیم که دیتابیس پیشفرضی که کاربر بر روی آن کار میکند را باید با دستور DEFAULT_DATABASE=[DB1] مشخص کنیم و بعد از آن میتوانیم ویژگیهای دیگر آن مانند Enforce Password Policy و Enforce Password Expiration را فعال کنید.
بعد از درست واردکردن دستور مورد نظر بر روی کلید F5 فشار دهید تا بهمانند شکل ۲۲-۴ کاربر مورد نظر ایجاد شود.
شکل ۲۲-۴ ایجاد کاربر از طریق Query
اگر به شکل ۲۳-۴ توجه کنید، کاربر مورد نظر در لیست Logins قرار گرفته است و برای اینکه بررسی بیشتری داشته باشیم بر روی آن کلیک راست کنید و گزینهی Properties را انتخاب کنید.
شکل ۲۳-۴ بررسی کاربر
همانطور که در شکل ۲۴-۴ مشاهده میکنید اطلاعات کاربر reza دقیقاً همان چیزی است که در دستورات وارد کردیم.
شکل ۲۴-۴ بررسی کاربر
اگر بخواهیم با استفاده از دستور مشخص کنیم که کاربر مورد نظر فعال باشد و یا غیرفعال باید دستور زیر را وارد کنیم:
ALTER LOGIN reza ENABLE;
در دستور بالا کاربر reza فعال میشود و اگر بخواهید غیرفعال کنید باید از دستور DISABLE استفاده کنید.