امنیت در لایه Database

همانطور که قبلاً قول داده بودم،‌الوعده وفا..! اگر به خاطر داشته باشید قرار بر این شد که دو سری مقالات به مقالات سایت اضافه شود،‌ یکی مقالات پایه FreeBSD که دو مطلب انتشار یافت و همچنان ادامه دارد و دومین سری مقالات بنا بر مقالات Hardening بود.
این مطلب اولین شماره مقالات Hardening می‌باشد تا دوستان server های خود را امن کنند، نه اینکه به دیگران آسیب‌رسانی کنند.
sec
سناریو در این مطلب داشتن یک نام کاربری است که قرار است اعمالی خاص روی Database ما انجام دهد،‌ ولی چگونه این اعمال را محدود به یک یا چند سیاست کنیم که در لیست role های Database وجود ندارند؟ پس بهتر است پیش رویم تا قضیه روشن شود.

گذشته از هر گونه دستوری که شروع کنیم، فرض کنید، در یک دپارتمان باید به شخصی دسترسی خیلی خیلی محدود همانند یک select به یکی از فیلد‌های یکی از جداولتان بدهید. این دپارتمان را می‌توانید یک نرم‌افزار و یا هر چیز دیگر فرض کنید. وقتی شما مجبور باشید دسترسی بیشتری برای کار به شخص/نرم‌افزار بدهید، نه تنها ضریب امنیتی پایگاه داده خود را پایین آورده‌اید، بلکه به ایشان اجازه داده‌اید به تمام داده‌های شما که قرار نیست دسترسی کاری داشته باشد سرک بکشد. پس باید فکری دیگر کرد.
به الگوریتم زیر برای قطع دسترسی بیجا به کاربران دقت نمایید:
۱. ایجاد یک پروسیجر و نوشتن تمام اعمالی که کاربر نیاز دارد به عنوان یک پروسیجر.
۲. یک revoke به کل سیستم برای آن کاربر.
۳. یک grant به آن پروسیجر.
برای هر Database Server هم یک زبان وجود دارد:

  • PL/SQL : Oracle

  • PL/pgSQL : PostgreSQL

  • TSQL : MSSQL

  • PL/SQL : DB2

نکته: MySQL زبان خاصی ندارد و باید از Stored Procedure استفاده نمایید.
نکته: سؤال اینجاست که چرا مستقیم دسترسی داده نشد. ۴ فرمان اصلی در SQL عبارتند از :

  • SELECT

  • UPDATE

  • DELETE

  • INSERT

کافیست فقط برای همان فرمان SELECT باز بگذاریم. با فرمان SELECT می‌توان همه جای سرور را کندوکاو کرد، چه رسد به ۳ فرمان بعدی….!
پس بهتر است آنچه را کاربر می‌خواهد برایش بنویسیم و به صورت یک تابع برایش grant کنیم تا از دادن دسترسی مستقیم اجتناب ورزیم.

Share Button

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *