الصلاحية هي طريقة للتحكم بطرق الوصول لقاعدة البيانات وهناك عدة انواع للصلاحيات
اولا هناك مايسمى صلاحيات النظام System Privileges
هناك اكثر من 80 صلاحية لكن لايمكن سردها والمتعامل معها عد بسيط والذي يعطي هذه الصلاحيات للمستخدمين هو الDBA حيث انه يمكن ان يعطي صلاحية DBa لمستخدم اخر
DBA "DATABASE ADMINiSTRITOR" وتعتبر اعلى صلاحية من صلاحيات النظام
وهذه الصلاحية تمكن مدير قاعدة البيانات من
create new users انشاء مستخدم/ مستخدمين جدد
Remove Users حذف مستخدم وكامل صلاحياته
Remove Tables انشاء جداول
Drop Any Tableحذف اي جدول مع البناء الهيكلي له ما عدا جداول المعجمية dictionary Table
"جداول تنشأ من نظام الاوركل تحتوي على بيانات عن الجداول المنشاءة والمستخدمين والصلاحيات وسنطرق لبعضها خلا الدروس حسب الحاجة "
Back Up Tables صلاحية عمل نسخة احتياطية للجداول
ثانيا صلاحيات المستخدم USER System Privileges
عندما ينشأ المستخدم فان مدير قاعدة البيانات يمكن له ان يعطيه صلاحيات من اهم هذه الصالحيات هي
-امكانية اتصال بقاعدة البيانات Create Session
- انشاء جدول ضمن مجاله Create Tables
انشاء جداول وهمية Create View
انشاء متسلسلات Create SeQuence
انشاء اجراءات Create Procedure
اخر نوع من الصلاحيات يدعى صلاحيات الهدف "Object Privileges"
هذا النوع يطبق على اجزاء قاعدة البيانات المستهدفة للبيانات تعني بذلك الجداول والالجداول الوهمية و الاجراءات و المتسلسلات
وكل مستخدم يمكلك OBJECT معين بامكانه ان يعطي صلاحيات المطبقة لمستخدم اخر
ويمكن له ان يجعل هذا الهدف عام
وهنا ساورد كل "" وما هي الصلاحيات التي يمكن ان تعطى للتطبق عليه
اولا TABLE الجداول -->ALTER ,DELETE,INDEX,INSERT,REFERENCES,SELECT,UPDATE
VIEW الجداول الوهمية --> DELETE,SELECT,UPDATE,INSERT
SEQUENCE "المتسلسلات "--> ALTER,SELECT
PROCEDURE "الاجراءات " --> EXECUTE
المستخدم :
SQL
create role admin;
create role data_entry;
create role viewr;
ثانيا:
نمنح الوظائف الامتيازات التالية:
SQL
grant connect,resource,dba to admin;
grant select any table,update any table,delete any table,insert any table
to admin;
grant select any sequence, alter any sequence
to admin;
grant connect,resource to data_entry;
grant select any table,update any table,delete any table,insert any table
to data_entry;
grant select any sequence, alter any sequence
to data_entry;
grant connect,resource to viewr;
grant select any table
to viewr;
grant select any sequence
to viewr;
ثالثا:
نقوم بمنح الوظائف السابقة الاستعلام من جدول الوظائف الموجود بالأوراكل:
*مستخدمي ORACLE 8,8i
قم بالدخول باسم المستخدم التالي (internal/oracle) وعمل التالي:
SQL
grant select
on dba_role_privs
to admin;
grant select
on dba_role_privs
to data_entry;
grant select
on dba_role_privs
to viewr;
*مستخدمي ORACLE9i
قم بالدخول باسم المستخدم التالي (sys/sys as sysdba) تأكد من كلمة المرور حسب ماقمت بتعديله.
رابعا:
نقوم الآن بإنشاء المستخدمين ومنح كل حسب وظيفته:
SQL
grant admin to user1 identified by u123;
grant data_entry to user2 identified by u123;
grant viewr to user3 identified by u123;
الآن تم إنشاء الوظائف ومنحها الامتيازات ومنح الامتيازات للمستخدمين, بقي الآن دور FUNCTION التي سوف توضع في الفورم
أولا:
قم بفتح النموذج المراد وضع الوظائف عليه
ثانيا:
قم بالذهاب الى Program Units واضغط على زر create
إختر Function وقم بتسميتها بـ USER_ROLE ثم قم بلصق الكود التالي:
SQL
FUNCTION USER_ROLE(ROLEE VARCHAR2,USERS VARCHAR2) RETURN BOOLEAN
IS
CURSOR V_ROLES IS SELECT GRANTED_ROLE
FROM DBA_ROLE_PRIVS WHERE GRANTEE=UPPER(USERS);
ROLES_RECORD VARCHAR2(100);
BEGIN OPEN V_ROLES;
LOOP
FETCH V_ROLES INTO ROLES_RECORD; EXIT WHEN V_ROLES%NOTFOUND;
IF ROLES_RECORD=ROLEE THEN RETURN(TRUE);
END IF;
END LOOP;
RETURN(FALSE);
END;
يتم في هذه الدالة استعلام عن الوظيفة الممنوحة حسب اسم المستخدم والرجوع بها
ثالثا:
في نفس النموذج قم بعمل Trigger من نوع WHEN-NEW-FORM-INSTANCE ووضع الاشياء التي تريد اخفاءها على حسب اسم الوظيفة كما في المثال التالي:
SQL
IF USER_ROLE('data_entry',USER) THEN
Set_item_Property('CONTROL.USER_MANAGMENT', ENABLED, PROPERTY_FALSE);
END IF;
عند وضع تحقق لوظيفة أخرى قم بالتعديل على اسم الوظيفة والعناصر فقط بعمل ELSE IF أو IF