
در دنیای پایگاههای داده سازمانی، فقط اینکه بدانیم «چه کسی به دیتابیس وصل شده» کافی نیست.
سؤالهای مهمتر اینها هستند:
- چه کسی اطلاعات حقوق کارکنان را مشاهده کرده؟
- آیا دادهای حساس بدون مجوز دیده شده؟
- چه 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 را بلد باشد.
سؤالی درباره این مقاله داری؟
اگر نکتهای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفتوگوی واقعی 💬
برو به صفحه پرسش و پاسخ
دیدگاهتان را بنویسید