ESC را فشار دهید تا بسته شود

زمیوس آموزش، یادگیری و سرگرمی

آموزش جامع پکیج DBMS_FGA در Oracle

در دنیای پایگاه‌های داده سازمانی، فقط این‌که بدانیم «چه کسی به دیتابیس وصل شده» کافی نیست.

سؤال‌های مهم‌تر این‌ها هستند:

  • چه کسی اطلاعات حقوق کارکنان را مشاهده کرده؟
  • آیا داده‌ای حساس بدون مجوز دیده شده؟
  • چه Queryهایی روی ستون‌های حیاتی اجرا شده‌اند؟

Oracle برای پاسخ به این نیاز حیاتی، قابلیتی قدرتمند به نام Fine-Grained Auditing (FGA) ارائه کرده که از طریق پکیج DBMS_FGA پیاده‌سازی می‌شود.

در این مقاله آموزش Oracle در بخش آموزش پکیج های اوراکلی، با زبانی ساده ولی تخصصی، یاد می‌گیریم:

  • DBMS_FGA چیست
  • چه زمانی باید از آن استفاده کنیم
  • و چگونه آن را به‌صورت کاملاً عملی و استاندارد پیاده‌سازی کنیم

اگر با Oracle کار کرده باشی، حتماً این سناریو را تجربه کرده‌ای:

«سیستم کند شده، کاربران شاکی‌اند، اما هیچ‌کس دقیق نمی‌داند مشکل از کجاست!»

پیشنهاد می کنم این مقاله زیر رو حتما مطالعه کنی.

در این مقاله شما می خوانید

پکیج DBMS_FGA چیست؟ (Fine-Grained Auditing)

DBMS_FGA پکیجی در Oracle Database است که امکان Audit شرطی و سطح‌ستونی را فراهم می‌کند.

تعریف ساده:

DBMS_FGA یعنی:

«وقتی کاربر به ستون خاصی از یک جدول، تحت شرایط مشخص دسترسی پیدا کرد، آن را Audit کن.»

برخلاف Auditing معمولی، FGA:

  • روی ستون (Column) تمرکز دارد
  • دارای شرط (WHERE) است
  • و فقط رفتارهای مهم را ثبت می‌کند

تفاوت Auditing معمولی با DBMS_FGA

DBMS_FGA Auditing معمولی ویژگی
ستون خاص جدول / دستور سطح Audit
✅ دارد ❌ ندارد شرط WHERE
بسیار دقیق محدود Audit روی SELECT
بهینه زیاد حجم لاگ
✅✅ مناسب داده حساس

DBMS_FGA چه زمانی بهترین انتخاب است؟

DBMS_FGA زمانی استفاده می‌شود که:

  • داده‌ها حساس هستند
  • SELECT از UPDATE مهم‌تر است
  • فقط بعضی ستون‌ها نیاز به Audit دارند

مثال‌های واقعی:

  • Audit مشاهده حقوق مدیران
  • Audit اطلاعات هویتی (SSN، کد ملی)
  • Audit داده‌های مالی و بانکی
  • Audit اطلاعات پزشکی

پیش‌نیازهای استفاده از پکیج DBMS_FGA

دسترسی اجرای پکیج

				
					GRANT EXECUTE ON DBMS_FGA TO hr;

				
			

دسترسی مشاهده لاگ‌ها

				
					GRANT SELECT ON DBA_FGA_AUDIT_TRAIL TO hr;

				
			

(یا USER_FGA_AUDIT_TRAIL برای سطح کاربر)

سناریوی عملی استفاده از پکیج DBMS_FGA

فرض کنید جدول زیر را داریم:

				
					CREATE TABLE employees (
    emp_id   NUMBER,
    name     VARCHAR2(50),
    salary   NUMBER,
    dept_id  NUMBER
);

				
			

هدف Audit

Audit انجام شود اگر:

  • دستور SELECT اجرا شد
  • ستون SALARY خوانده شد
  • مقدار حقوق بیشتر از ۱۰۰۰۰ بود

ایجاد Policy با DBMS_FGA

				
					BEGIN
  DBMS_FGA.ADD_POLICY(
    object_schema   => 'HR',
    object_name     => 'EMPLOYEES',
    policy_name     => 'AUDIT_HIGH_SALARY',
    audit_condition => 'salary > ۱۰۰۰۰',
    audit_column    => 'SALARY',
    statement_types => 'SELECT',
    enable          => TRUE
  );
END;
/

				
			

پارامترهای اصلی DBMS_FGA

audit_condition

شرط Audit روی داده‌ها:

				
					salary > ۱۰۰۰۰

				
			

🔹 نکته مهم:

این شرط مستقل از Query کاربر بررسی می‌شود.

audit_column

ستون حساس:

				
					SALARY

				
			

✅ اگر Query این ستون را نخواند، Audit انجام نمی‌شود.

statement_types

نوع دستور:

				
					SELECT

				
			

تست Policy

✅ Audit می‌شود

				
					SELECT salary FROM employees;

				
			

❌ Audit نمی‌شود

				
					SELECT name FROM employees;

				
			

مشاهده لاگ‌های Fine-Grained Auditing

				
					SELECT
  db_user,
  object_name,
  policy_name,
  sql_text,
  timestamp
FROM dba_fga_audit_trail;

				
			

Handler در DBMS_FGA

با Handler می‌توان هنگام Audit:

  • Procedure اجرا کرد
  • لاگ اختصاصی نوشت
  • Alert یا Email ارسال کرد

نمونه Handler

				
					CREATE OR REPLACE PROCEDURE log_fga_event AS
BEGIN
  INSERT INTO audit_log VALUES (USER, SYSDATE);
END;
/

				
			

مدیریت Policyها

غیرفعال کردن

				
					BEGIN
  DBMS_FGA.DISABLE_POLICY(
    object_schema => 'HR',
    object_name   => 'EMPLOYEES',
    policy_name   => 'AUDIT_HIGH_SALARY'
  );
END;
/

				
			

حذف کامل

				
					BEGIN
  DBMS_FGA.DROP_POLICY(
    object_schema => 'HR',
    object_name   => 'EMPLOYEES',
    policy_name   => 'AUDIT_HIGH_SALARY'
  );
END;
/

				
			

سوالات متداول درباره پکیج DBMS_FGA در اوراکل

DBMS_FGA یا Fine-Grained Auditing قابلیتی در Oracle است که برای کنترل و ثبت دسترسی‌های حساس و خاص استفاده می‌شود. تفاوت اصلی آن با Auditing معمولی این است که FGA می‌تواند فقط روی ستون‌های مشخص و تحت شرایط خاص Audit انجام دهد.

به زبان ساده، Auditing معمولی می‌گوید «چه کسی به جدول دسترسی داشت»، اما DBMS_FGA می‌گوید «چه کسی، کِی و دقیقاً به کدام داده حساس دسترسی پیدا کرد».

DBMS_FGA معمولاً در سازمان‌هایی استفاده می‌شود که با داده‌های حساس سروکار دارند؛ مثل اطلاعات مالی، حقوق کارکنان، داده‌های هویتی یا پزشکی.

در این سناریوها مهم نیست فقط چه کسی لاگین کرده، بلکه مهم است چه داده‌ای دیده شده. به همین دلیل، FGA انتخاب اول DBAها برای Audit حرفه‌ای و امنیت‌محور است.

در استفاده استاندارد و درست، DBMS_FGA تأثیر منفی قابل توجهی روی Performance ندارد.

چون FGA فقط زمانی فعال می‌شود که شرط تعریف‌شده برقرار باشد، برخلاف Auditing معمولی که همه چیز را ثبت می‌کند. به همین دلیل، Fine-Grained Auditing یک روش بهینه و هوشمند برای Audit در دیتابیس‌های بزرگ محسوب می‌شود.

این دو رقیب هم نیستند، بلکه مکمل هم‌اند.

Unified Auditing برای Audit کلی سیستم، کاربران و دستورات مناسب است، اما DBMS_FGA زمانی استفاده می‌شود که نیاز به کنترل دقیق روی ستون‌ها و داده‌های حساس وجود دارد.

در محیط‌های حرفه‌ای، معمولاً DBAها از ترکیب Unified Auditing و DBMS_FGA برای بالاترین سطح امنیت استفاده می‌کنند.

جمع‌بندی

DBMS_FGA برای Audit SELECT بی‌نظیر است

Performance-friendly و مناسب محیط عملیاتی

✅ بهترین ابزار برای محافظت از داده‌های حساس

❌ جایگزین Unified Auditing نیست، مکمل آن است.

DBMS_FGA یعنی کنترل هوشمند روی دسترسی به داده‌های حساس

هر DBA یا Oracle Developer حرفه‌ای،

باید Fine-Grained Auditing را بلد باشد.

سؤالی درباره این مقاله داری؟

اگر نکته‌ای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفت‌وگوی واقعی 💬

برو به صفحه پرسش و پاسخ

میثم راد

من یه برنامه نویسم که حسابی با دیتابیس اوراکل رفیقم! از اونایی ام که تا چیزی رو کامل نفهمم،ول کن نیستم، یادگرفتن برام مثل بازیه، و نوشتن اینجا کمک می کنه تا چیزایی که یاد گرفتم رو با بقیه به شریک بشم، با هم پیشرفت کنیم.

دیدگاهتان را بنویسید

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