چندین سال است که Microsoft SQL Server به عنوان امنترین سیستم مدیریت دیتابیس (DBMS) شناخته میشود. طبق گفتهی واحد امنیت عمومی NIST، در بین شرکتهای ارائه دهنده پایگاههای داده، SQL Server دارای کمترین آسیبپذیری امنیتی میباشد و علاوه بر آن ITIC نیز Microsoft SQL Server را ایمنترین دیتابیس نامیده است. این دیتابیس طوری طراحی شده است که با کاهش ریسکهای امنیتی بالقوه به صورت پیشفرض، موجب فراهم نمودن امنیت میگردد و در نتیجه مدیران را قادر میسازد که با توجه به نیازمندیهای سازمان خود ویژگیهای اتصال و Remote مورد نظر خود را تعیین نمایند. درحالیکه چشمانداز دادهها، حجم، دسترسپذیری و خطرات بالقوه درحال تکامل است، نیازمندیهای امنیتی نیز دائماً درحال تغییر میباشند. تازهترین ویژگیهای SQL Server 2016 به طور قابلملاحظهای استانداردهای امنیت داده را بالا برده و ویژگیهای تازه و بهبود یافتهای را برای محافظت از داده در مقابل تهدیدات مختلف فراهم مینماید. درک ویژگیهای امنیتی و بهترین راهکارهای ارائه شده میتواند حتی برای توسعهدهندگان و مدیرانی که با نسخههای قبلی SQL Server آشنایی دارند، دشوار باشد.
ویژگیهای امنیتی SQL Server 2016
ویژگیهای امنیتی SQL Server 2016 را میتوان در سه حوزه مورد بررسی قرار داد. هر حوزه نشاندهندهی یک رویکردی امنیت دادهای خاص به امنسازی داده از نقضهای امنیتی یا خطرات بالقوه است. این حوزهها شامل کنترل دسترسی، رمزگذاری داده و نظرات پیشگیرانه است. در کنترل دسترسی، مجوزها منحصراً برای کاربران و برنامههای کاربردی تعریف میگردند تا از نقضهای امنیتی پیشگیری گردد. رمزگذاری داده طراحی شده است تا استفاده از دادههای حساس توسط اشخاص یا گروههای غیرمجاز پیشگیری شود. مانیتورینگ پیشگیرانه نیز روی ردیابی جهت ورود افراد و فعالیتهایی که ممکن است مخرب باشند، تمرکز دارد.
در ادامه علاوه بر ویژگیهای امنیتی جدید و بروزرسانیشدهی SQL Server که در SQL Server 2016 در دسترس است، چند راهکار امنیتی مرتبط با امنیت دیتابیس، از جمله احراز هویت در Active Directory، فایروال ویندوز و رمزگذاری هارد درایو بررسی خواهند شد. هدف این است که درکی از قابلیتهای در دسترس برای توسعهدهندگان و مدیران دیتابیس فراهم گردد، تا بتوانند دادهها را با امنیت بیشتری ارائه نمایند.
بررسی لایههای امنیتی
جهت مرتب کردن ویژگیهای امنیتی با حوزهای کارآمد، مفهوم کلی امنیت داده در چند لایه تقسیمبندی میشود. هر لایه نشاندهندهی یک بخش منطقی از چشمانداز امنیتی با توجه به نوع دسترسی، محتوای قابلدسترسی و نگرانیهای امنیتی میباشد. ویژگیها و راهکارهای امنیتی در لایههای حفاظتی که به آنها اعمال میشوند، گروهبندی میگردند. بعضی از این ویژگیها را میتوان به بیش از یک لایه اعمال نمود. در ادامه هر لایهای که در بالا مشخص شده است، به طور مختصر بررسی میشود و برای نشان دادن اینکه ویژگیها و راهکارهای امنیتی مشخص را چطور میتوان برای امنسازی دادههای حساس مورد استفاده قرار داد، طی یک سناریو مرور میشود.
حفاظت از برنامههای کاربردی
حفاظت از برنامه کاربردی به طور کلی روی Permissionها تمرکز دارد، به این شکل که برای کاربران مجاز، دسترسی به داده را فراهم نموده و برای دیگر کاربران دسترسی را غیرفعال میکند. از نگاه DBAها کنترل این بخش معمولاً دشوار است، زیرا توسعهدهندگان باید عملکرد ایمنی را در یک برنامه فراهم نمایند. در قدیم، منطق سوءاستفاده کردن از اطلاعات حساس در لایهی Application گسترش داده شده است. این امر نیازمند این است که امنیت در تمام ماژولها و برنامههای کاربردی که به داده دسترسی دارند، پیادهسازی شود. گزینهی دیگر این است که Viewهای مخصوصی برای جلوگیری از قرار گرفتن در معرض دادههای حساس ایجاد گردد. این Viewها میتوانند روی عملکرد دیتابیس تأثیر بگذارند و مستعد خطا هستند. SQL Server 2016 ویژگیهایی را فراهم مینماید که دسترسی به فیلدهای داده که حاوی اطلاعات حساس هستند را محدود میکنند و همچنین شامل لایههای اضافیِ امنیت برنامهی کاربردی برای امن نگاه داشتن دادههای شخصی ارزشمند است، حتی زمانی که داده در حالت In-Motion میباشد.
به عنوان مثال این سناریو را درنظر بگیرید که یک بیمارستان برای کنترل دسترسی به دادههای بیمار نیازمند الزامات سختگیرانهای است که در سطحی دقیقتر از مواردی مانند اجازهدادن، لغو کردن اجازه و یا اجازه ندادن باشد. برای مثال یک برنامهی دیتابیس که دسترسی به دادههای بیمار را فراهم مینماید، ممکن است مستلزم این باشد که پزشکان تنها به اطلاعات بیمار خود دسترسی داشته باشند. الزامات مشابهی در محیطهای بسیاری وجود دارند، از جمله امور مالی، قانون، دولت و برنامههای نظامی.
Row-Level Security یکی از ویژگیهای SQL Server است که منطق دسترسی را در یک سیاست امنیتی در سطح Per-Row تسهیل و متمرکز میسازد. RLS مشتریان را قادر میسازد که دسترسی به ردیفها را در یک جدول دیتابیس براساس ویژگیهای کاربری که T-SQL را اجرا میکند (مانند عضویت گروه یا ساختار اجرا) کنترل کند. RLS از قابلیت فیلتر و مسدود کردن استفاده میکند تا تعیین نماید که چه رکوردهایی برای یک تعامل خاص قابل رویت است و در نتیجه دادهها را از خواندن و نوشتن غیرمجاز (بروزرسانی/حذف) محافظت مینماید. از آنجایی که اینگونه قابلیتها در Database Engine سنجیده میشوند، هیچ منطق دیگری در برنامهی Client موردنیاز نیست.
در همان سناریوی بیمارستان، فرض کنید که نمایندگان مشتری باید سؤالات بیماران را مطرح نمایند. زمانی که رکورد یک بیمار به نمایش درمیآید، نماینده باید توانایی دیدن اطلاعات خاصی را داشته باشد تا بتواند به طور دقیق پاسخ بدهد. بعضی از اطلاعات مانند جزئیات خاص مربوط به سلامت یا اطلاعات مالی یا مربوط به بیمه باید برای تطبیق با قانون HIPAA محرمانه بمانند. SQL Server 2016 ویژگی جدیدی به نام Dynamic Data Masking یا به اختصار DDM را معرفی میکند. با DDM مدیران IT میتوانند با قدمهایی ساده، سیاستها یا قوانین جدیدی را تعریف کنند تا هر اطلاعاتی که به طور شخصی قابلتشخیص بوده و برای تعامل کاربر موردنیاز نیست را بپوشانند. قابلیت مشاهدهی دادههای Unmask، محدود به افرادی است که دارای حق دسترسی مناسب هستند که توسط عضویت در گروه امنیتی مدیریت میگردد. از این طریق کاربرِ سرویس میتواند بدون داشتن دسترسی به اطلاعات محرمانه رکورد یک بیمار را مشاهده نماید. اطلاعات بیمار در شرایط امنی قرار دارد، با این حال کاربر میتواند با دسترسی به دادههای مناسب به سؤالات پاسخگو باشد، بدون اینکه به حریم شخصی وارد شود.
در سطح دیتابیس، برنامهها و کاربران عمومی نباید به قابلیتهای Query خاص (Ad Hoc) دسترسی داشته باشند، به خصوص زمانی که پای دادههای حساس در میان باشد. یک راهکار خوب باید از دسترسی کاربران به جداول داده جلوگیری نماید و عملکردی مبتنی بر نقش و مختص به Task با Viewها و فرایندهای ذخیره شده فراهم نماید. برنامهها باید Queryها را به عنوان Queryهای پارامتریک با برنامهنویسی اجرا کنند تا از حملات Injection جلوگیری گردد. این امر مکمل استفاده از RLS و DDM است، زیرا اعمال از پیش تعیین شدهی View کاربر و فرایند، احتمال دور زدن فیلترینگ یا سوءاستفاده از موتور دیتابیس را کاهش میدهد.
همچنین SQL Server میتواند از اطلاعات حساس بیماران، مانند شمارهی کارت اعتباری یا شمارههای شناسایی چه آن داده In-Motion باشد و چه At-Rest محافظت نماید. ویژگی Always Encrypted که در SQL Server 2016 اضافه شده، به Clientها اجازه میدهد که دادههای حساس را در سطح برنامهی Client رمزگذاری کنند. کلیدهای رمزگذاری به صورت خارجی مدیریت میشوند و هرگز برای موتور دیتابیس (SQL Database یا SQL Server) افشا نمیگردند. در نتیجه Always Encrypted بین کسانی که صاحب داده هستند (و میتوانند آن را مشاهده کنند) و کسانی که داده را مدیریت میکنند (اما نباید دارای دسترسی باشند) تمایز قائل میشود. این امر به بیمارستان این توانایی را میدهد که دادهها را به صورت At Rest رمزگذاری کند و دسترسی پرسنل غیرمجاز از جمله DBAها را به دادههای حساس کاهش میدهد. این امر همچنین به این معنی است که الزامات امنیتی کمتری برای پذیرش کارمندان DBA موردنیاز خواهد بود.
محافظت لایهای برنامه کاربردی داده در درجهی نخست روی کنترل دسترسی تمرکز دارد و تنها دسترسی را برای اشخاص یا گروههای مورد نظر فراهم مینماید و در مقابل دیگران از داده محافظت مینماید. توسعهدهندگان و مدیران با Always Encrypted (به همراه کنترلهای دسترسی مانند Dynamic Data Masking، Row-Level Security و Queryهای پارامتریک) میتوانند بیش از پیش به Clientها و مشتریان تضمین دهند که دادهها تحت حفاظت هستند.
ـــــــــــــــــــــــــــــــــــــــــــــ
بررسی امنیت دادهها در SQL Server 2016 – قسمت اول
بررسی امنیت دادهها در SQL Server 2016 – قسمت دوم
بررسی امنیت دادهها در SQL Server 2016 – قسمت سوم
بررسی امنیت دادهها در SQL Server 2016 – قسمت چهارم (پایانی)