
Schema Privilege یکی از مهمترین مفاهیمی است که هر توسعهدهنده، DBA یا حتی طراح سیستم باید در Oracle Database 26ai بلد باشد.
وقتی شما یک Schema دارید، در واقع مالک مجموعهای از اشیای دیتابیس هستید؛ مثل جدول، ویو، پروسیجر، پکیج و…
حالا اگر کاربر دیگری بخواهد روی اشیای شما کاری انجام بدهد، باید مجوز داشته باشد.
به این مجوزها میگوییم Schema Privilege.
در نسخههای جدید اوراکل مثل ۲۳ai و ۲۶ai کنترل امنیت و مدیریت دسترسیها هوشمندتر و دقیقتر شده، و همین باعث شده نقش این مفهوم مهمتر از همیشه باشد.
در بسیاری از سیستمهای سازمانی، دانستن اینکه چه کسی، چه زمانی و دقیقاً کدام بخش از داده را تغییر داده یا مشاهده کرده، فقط یک مزیت نیست؛ بلکه یک الزام امنیتی و قانونی است.
در Oracle Database، یکی از پیشرفتهترین قابلیتها در این زمینه، Auditing در سطح ستون (Column‑Level Auditing) است.
پیشنهاد می کنم این مقاله زیر رو حتما مطالعه کنی.
در این مقاله شما می خوانید
Schema Privilege دقیقاً چه کاری انجام میدهد؟
Schema Privilege تعیین میکند چه کسی چه کاری میتواند روی اشیای یک Schema انجام دهد.
این مجوزها به دو دسته تقسیم میشوند:
۱) System Privileges
مجوزهای سیستمی که روی کل دیتابیس تأثیر دارند، اما کاربر را قادر میکنند در شِماهای مختلف عملیات مهم انجام دهد.
مثال:
- CREATE ANY TABLE
- ALTER ANY PROCEDURE
- DROP ANY VIEW
- EXECUTE ANY PROCEDURE
- SELECT ANY TABLE
نام هر کدام را دیدی که ANY داشت، بدان بسیار حساس است و باید با احتیاط داده شود.
۲) Object Privileges
دسترسی مستقیم روی یک شیء خاص در یک schema.
مثلاً:
- SELECT
- UPDATE
- INSERT
- DELETE
- EXECUTE
- REFERENCES
مثال:
GRANT SELECT ON hr.employees TO app_user;
چرا Schema Privilege در اوراکل ۲۶ai اهمیت بیشتری پیدا کرده؟
در نسخه ۲۶ai، اوراکل امکانات امنیتی مبتنی بر AI اضافه کرده که رفتار کاربران، الگوهای دسترسی و خطرات احتمالی را تحلیل میکند.
اگر دسترسیها درست داده نشده باشند:
- نشت اطلاعات
- حذف ناخواسته داده
- اجرای پروسیجرهای حساس
- نوشتن یا آپدیت اشتباهی روی دادههای حیاتی
بهسادگی رخ میدهد.
پس مدیریت صحیح Schema Privilege دیگر فقط یک توصیه نیست؛ بلکه یک ضرورت است.
مهمترین دسترسیهای مربوط به Schema در اوراکل
در ادامه پرکاربردترین و مهمترین دسترسیهایی که در مدیریت شِما با آن سر و کار دارید را آوردهام:
CREATE
اجازه ساختن جدول، ویو یا هر object در شِمای خود کاربر.
CREATE ANY
ایجاد اشیا در شِمای کاربران دیگر. (بسیار خطرناک)
ALTER و ALTER ANY
اجازه تغییر اشیای موجود در شِمای خود یا دیگران.
DROP ANY
حذف اشیا در هر شِما — یکی از خطرناکترین دسترسیها.
EXECUTE
اجازه اجرای پکیجها، پروسیجرها و فانکشنها.
SELECT ANY TABLE
امکان خواندن تمام جداول همه شِماها.
در سیستمهای عملیاتی توصیه نمیشود مگر برای DBA سطح بالا.
یک نکته مهم: مالکیت Schema با Privilege فرق دارد
خیلیها اشتباه میگیرند.
مالک بودن یعنی شما ساختید، نه اینکه دیگران هم بتوانند از آن استفاده کنند.
مثلاً کاربر HR مالک جدول EMPLOYEES است،
اما اگر APP_USER بخواهد SELECT بزند:
باید مجوز بدهیم:
GRANT SELECT ON hr.employees TO app_user;
مثال کاربردی (قابل استفاده در محیط کار)
دسترسی SELECT روی یک جدول
GRANT SELECT ON hr.employees TO app_user;
دسترسی UPDATE فقط روی چند ستون خاص
(قابلیت جدید در نسخههای ۲۱c به بعد)
GRANT UPDATE(salary, commission_pct) ON hr.employees TO app_user;
دسترسی EXECUTE روی یک پکیج
GRANT EXECUTE ON hr.payroll_pkg TO app_user;
ویژگی جدید نسخه ۲۳ai / 26ai: دستور DENY
برای جلوگیری از دسترسی ناخواسته:
DENY SELECT ON hr.employees TO app_user;
دادن دسترسی روی همهی جداول یک Schema (نسخههای جدید)
GRANT READ ON hr.* TO app_user;
دادن EXECUTE روی همهی پروسیجرهای یک Schema
BEGIN
FOR r IN (SELECT object_name FROM dba_objects WHERE owner='HR' AND object_type='PROCEDURE') LOOP
EXECUTE IMMEDIATE 'GRANT EXECUTE ON HR.' || r.object_name || ' TO APP_USER';
END LOOP;
END;
بهترین روشها برای مدیریت Schema Privilege
برای اینکه دیتابیس امن، سریع و قابل مدیریت داشته باشی:
- از دسترسیهای ANY فقط وقتی مجبور هستی استفاده کن.
- همیشه دسترسیها را روی Role بده، نه مستقیم روی User.
- برای کاربران اپلیکیشن فقط READ یا EXECUTE کافی است.
- دسترسی UPDATE، INSERT یا DELETE را فقط اگر واقعاً نیاز دارند بده.
- Audit را روی جداول حساس فعال کن:
AUDIT SELECT, INSERT, UPDATE, DELETE ON hr.employees;
سوالات متداول درباره Schema Privilege در Oracle 26ai
Schema Privilege مجموعهای از مجوزهاست که تعیین میکند یک کاربر چه عملیاتی میتواند روی اشیای یک شِما (Schema) انجام دهد.
Object Privilege فقط روی یک شیء مثل جدول یا ویو اعمال میشود.
دسترسیهایی که کلمه ANY دارند حساسترین هستند، چون به کاربر اجازه میدهند روی اشیای تمام شِماها عملیات انجام دهد.
پنج مورد پرخطر:
DROP ANY TABLEALTER ANY PROCEDURECREATE ANY TABLEEXECUTE ANY PROCEDURESELECT ANY TABLE
این دسترسیها فقط باید به DBA سطح بالا داده شوند.
از نسخههای جدیدتر اوراکل (۲۱c تا ۲۶ai) امکان دادن دسترسی یکجای خواندن روی کل شِما فراهم شده است:
GRANT READ ON hr.* TO app_user;
به این ترتیب کاربر بدون اینکه روی هر جدول جداگانه GRANT بدهید، به همه جداول شِما دسترسی فقط خواندنی خواهد داشت.
بله. از Oracle 23ai به بعد دستور DENY دوباره اضافه شده و در Oracle ۲۶ai کاملتر شده است.
این دستور زمانی استفاده میشود که بخواهید یک کاربر حتی اگر از طریق Role یا دسترسی غیرمستقیم مجوز دارد، باز هم نتواند یک عملیات خاص را انجام دهد.
مثال:
DENY SELECT ON hr.employees TO app_user;
این دستور کاربر را بهطور کامل از خواندن جدول employees منع میکند.
جمعبندی
Schema Privilege در اوراکل ۲۶ai ستون اصلی امنیت و مدیریت درست دیتابیس است.
با فهم دقیق این مجوزها میتوانی ساختار دسترسیها را حرفهای طراحی کنی، از مشکلات امنیتی جلوگیری کنی و دیتابیس را برای هر نوع اپلیکیشن پایدار و امن نگه داری.
سؤالی درباره این مقاله داری؟
اگر نکتهای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفتوگوی واقعی 💬
برو به صفحه پرسش و پاسخ
دیدگاهتان را بنویسید