راهنمای SQL Database در Azure و جنبههای امنیتی آنها:
انواع SQL Databases در Azure :
- Azure SQL Database (PaaS)
یک سرویس fully managed برای پایگاه دادههای تکی است.
مناسب برای اپلیکیشنهای مدرنی که نیاز به قابلیتهای SQL دارند، بدون اینکه لازم باشد زیرساخت را مدیریت کنید.
- Azure SQL Managed Instance (PaaS)
یک SQL Server instance کامل با امکان ایجاد چندین پایگاه داده (multiple databases).
سازگاری تقریباً کامل با SQL Server را فراهم میکند؛ از جمله پشتیبانی از SQL Agent و انجام کوئری بین دیتابیسها (cross-database queries).
بهترین گزینه برای مهاجرت (migrate) از پایگاه دادههای محلی (on-prem) با کمترین میزان تغییرات می باشد.
- SQL Server on Azure Virtual Machines (IaaS)
اجرای SQL Server روی یک ماشین مجازی در (Azure VM).
کنترل کامل روی سیستمعامل و تنظیمات SQL Server را در اختیار شما میگذارد؛ مدیریت آن مشابه محیطهای سنتی و محلی (on-prem) خواهد بود.
مناسب برای برنامههای قدیمی یا تخصصی که نیاز به تنظیمات پیشرفته، کنترل کامل بر سرور، یا استفاده از قابلیتهایی دارند که در سرویسهای مدیریتشده (مانند PaaS) پشتیبانی نمیشوند.
تفاوتهای کلیدی بهصورت خلاصه:
Feature | Azure SQL Database | Azure SQL Managed Instance | SQL Server on Azure VM |
Deployment Model | PaaS | PaaS | IaaS |
Instance-Level Features | ندارد | دارد | دارد |
Cross-Database Queries | محدود | دارد | دارد |
SQL Agent Support | ندارد | دارد | دارد |
مسئولیت نگهداری (Maintenance) | مایکروسافت | مایکروسافت | کاربر |
بهترین کاربرد | اپلیکیشنهای ابری مدرن |
مهاجرت از SQLهای محلی |
کنترل کامل بر SQL Server |
ملاحظات امنیتی IaaS در برابر PaaS :
- IaaS (SQL Server on Azure VM)
امنیت کاملاً به عهده کاربر است؛ شامل اعمال وصلههای امنیتی (patching)، تنظیم قوانین فایروال، و پیکربندی رمزنگاری. (encryption) - PaaS (Azure SQL Database و Managed Instance)
رمزنگاری پیشفرض امنیت بهصورت داخلی و خودکار مدیریت میشود؛ شامل بهروزرسانیهای خودکار و محافظت در برابر تهدیدها ( threat protection ).
امنیت پایگاه داده SQL در Azure:
-
گزینههای امنیتی در سطح هویت (Identity-Level Security Options)
Azure SQL از روشهای مختلف احراز هویت پشتیبانی میکند، که شامل SQL Authentication، Microsoft Entra ID Authentication و Contained Users میشود:
- SQL Authentication
احراز هویت سنتی با استفاده از (نام کاربری و رمز عبور). روشی قدیمی از نظر امنیتی در مقایسه با روشهای جدید ضعیفتر است. - Microsoft Entra ID Authentication
از کاربران Entra ID یا Managed Identities استفاده میکند.
مناسب برای ارتباط برنامهها با پایگاه داده بدون نیاز به ذخیره رمز عبور. - Contained Users
کاربرانی هستند که در سطح database یا server تعریف میشوند، و مستقل از لاگینهای سنتی عمل میکنند.
این کاربران نیاز به تعریف در سطح Login ندارند و در داخل خود دیتابیس نگهداری میشوند.
ایجاد یک Login با استفاده از SQL Authentication:
— Create login in the master database (server-level)
CREATE LOGIN sql_user WITH PASSWORD = ‘StrongPassword123’;
ایجاد یک Contained SQL User (در سطح دیتابیس):
— Create a contained SQL user with a password (database-level)
CREATE USER contained_user WITH PASSWORD = ‘SecurePassword123’;
— Assign roles
EXEC sp_addrolemember ‘db_datareader’, ‘contained_user’;
EXEC sp_addrolemember ‘db_datawriter’, ‘contained_user’;
ایجاد کاربر Entra ID (Azure AD User) در Azure SQL:
— Create an Entra ID user (database-level)
CREATE USER [username@domain.com] FROM EXTERNAL PROVIDER.
— Assign roles
EXEC sp_addrolemember ‘db_datareader’, ‘username@domain.com’;
EXEC sp_addrolemember ‘db_datawriter’, ‘username@domain.com’;
✅ SQL Authentication logins در دیتابیس master ساخته میشوند و بین چندین دیتابیس به اشتراک گذاشته میشن.
در مقابل، Contained Users میتونن هم در سطح دیتابیس و هم در سطح سرور تعریف بشن، و احراز هویت مستقل بدون نیاز به login در سطح سرور ارائه بدهند .
۲. Dynamic Data Masking (DDM)
Dynamic Data Masking (DDM) قابلیتی در Azure SQL است که به شما اجازه میدهد اطلاعات حساس (مثل شماره کارت، شماره ملی، ایمیل و…) را از دید کاربران غیرمجاز پنهان کنید.
📌 نحوه عملکرد:
DDM داده را در حالت ذخیرهشده (at rest) تغییر نمیدهد. فقط در نتایج کوئریها (query results) برای کاربران خاص، مقدار ماسکشده (mask) نمایش داده میشود. این قابلیت در سطح ستون (column-level) پیادهسازی میشود.
۳. فعالسازی Always Encrypted در SQL Server
Always Encrypted قابلیتی در SQL Server و Azure SQL است که از دادههای حساس در تمامی مراحل محافظت میکند: در حال استفاده (in use) ، در حال انتقال (in transit) و در حالت ذخیرهشده (at rest). حتی Database Adminها نیز نمیتوانند محتوای رمزگذاریشده را مشاهده کنند.
نحوه فعالسازی Always Encrypted از طریق SSMS (SQL Server Management Studio)
- SSMS را باز کنید.
- روی دیتابیس موردنظر کلیک کرده و روی جدول دلخواه راستکلیک کنید:
مسیر Tasks → Encrypt Columns را انتخاب کنید. - ستونهایی که میخواهید رمزگذاری شوند را انتخاب کنید و نوع رمزگذاری (Deterministic یا Randomized) را مشخص کنید.
- یک Column Master Key (CMK) تعریف کنید — که میتونه در Azure Key Vault ذخیره بشه.
همچنین یک Column Encryption Key (CEK) بسازید — این کلید در SQL Server ذخیره میشه و با CMK رمزگذاری میشه. - مراحل wizard را تکمیل کرده و عملیات رمزگذاری را اجرا کنید.
۴. رهگیری فعالیتهای کاربر و سیستم SQL Audit
SQL Audit قابلیتی است که امکان رهگیری (Tracking) فعالیتها را در سطح سرور و دیتابیس فراهم میکند.
✅ چه کارهایی را پایش میکند؟ چه کاربری به دیتابیس دسترسی پیدا کرده؟چه زمانی و از کجا؟ چه تغییراتی انجام شده؟ این اطلاعات برای پایش امنیتی و رعایت الزامات قانونی (Compliance) حیاتی هستند.
✅ محل ذخیرهسازی لاگها: لاگهای SQL Audit را میتوان به سرویسهای زیر ارسال و آنالیز کرد:
Azure Monitor Event Hub Log Analytics
چه زمانی از چه قابلیتی استفاده کنیم؟
هدف شما چیست؟ | از این قابلیت استفاده کنید |
رمزنگاری کل دیتابیس در حالت ذخیره (at rest) | TDE (Transparent Data Encryption) |
مخفیسازی اطلاعات در خروجی کوئری بدون تغییر در داده اصلی | DDM (Dynamic Data Masking) |
رمزنگاری ستونهای حساس بهصورت سرتاسری (end-to-end) | Always Encrypted |
ثبت فعالیتهای کاربران و سیستم | SQL Audit |
منابع:
🔗 Learn more
https://learn.microsoft.com/en-us/azure/azure-sql/database/features-comparison?view=azuresql
0 مورد نقد و بررسی