Oracle Users Privileges
نشر بواسطة : Obay Salah , November 19, 2024
جميع المستخدمين الذين قمنا بإنشائهم في السيناريوهات السابقة لا يمكنهم الاتصال بقاعدة البيانات ناهيك عن القيام بأي مهام أخرى حيث لا يملكون الصلاحيات للقيام بذلك. في الخطوات السابقة قمنا بإنشاء المستخدم وتحديد طريقة التحقق وإعطائه المشاركة المطلوبة وتحديد ﺍلProfile لإدارة كلمة المرور والموارد. ومع ذلك، فنحن الآن ننتظر منحه الصلاحيات للعمل في قاعدة البيانات. يتم منح الصلاحيات من خلال مسؤول قاعدة البيانات أو شخص لديه الصلاحيات. هناك نوعان من الصلاحيات:-
1- - امتيازات النظام: وذلك لتمكين المستخدمين من أداء مهام معينة على قاعدة البيانات.
هناك أكثر من 700 صلاحية System Privileges على قاعدة البيانات، على سبيل المثال:
SYSDBA: يسمح هذا الامتياز للمستخدم بإغلاق وفتح قاعدة البيانات.
CREATE TABLESPACE :يسمح الأمر للمستخدم بإنشاء Tablespace.
بشكل عام، يمكن عرض جميع صلاحيات النظام المتاحة لمسؤول قاعدة البيانات من خلال الاستعلام التالي:
SELECT PRIVILEGE FROM DBA_SYS_PRIVS;
لنفترض أننا نريد منح بعض الصلاحيات System Privileges للمستخدم TEST.
GRANT CREATE TABLESPACE TO TEST;
هذه هي الطريقة التي نمنح بها المستخدم TEST الإذن لإنشاء Tablespace.
يجب أخذ كلمة ANY بعين الاعتبار عند منح الصلاحيات ، ولتوضيح هذا المعنى نلاحظ الفرق بين الأذونات:
SELECT TABLE: يسمح للمستخدم بإجراء عملية SELECT على الجداول المملوكة للمستخدم الذي يمنح الأذونات.
SELECT ANY TABLE: يسمح للمستخدم بإجراء استعلام SELECT على الجداول المملوكة للمستخدمين.
هناك خيار عند منح صلاحيات System Privileges للمستخدمين، وهو الخيار WITH ADMIN OPTION. هذا الخيار يعني أن المستخدم، بعد حصوله على الصلاحيات، يمكنه منحها لمستخدمين آخرين.
GRANT ALTER SYSTEM TO TEST WITH ADMIN OPTION;
يتمتع المستخدم TEST الآن بامتياز ALTER SYSTEM ويمكنه منحه لمستخدمين آخرين. هناك بعض الامتيازات التي لا ينبغي منحها لمسؤولي قواعد البيانات ويجب مراعاة السرية عند منحها، على سبيل المثال
(ALTER DATABASE & SESSION RESTRICTED & SYSOPER & SYSDBA) وصلاحيات أخرى يجب أن تكون مخصصة لمسؤولي قواعد البيانات فقط.
بالطبع، يمكن إلغاء الصلاحيات من المستخدمين، فلنفترض أننا نريد إلغاء إذن CREATE TABLESPACE من المستخدم TEST.
REVOKE CREATE TABLESPACE FROM TEST;
تخيل هذا السيناريو حيث قام مسؤول قاعدة البيانات بمنح المستخدم TEST صلاحية CREATE TABLESPACE عبر خيار WITH ADMIN OPTION، قام المستخدم TEST بإنشاء
Tablespace ثم منح هذا الامتياز لمستخدم آخر باسم TEST1.
أراد مسؤول قاعدة البيانات إلغاء صلاحية CREATE TABLESPACE من المستخدم TEST.
أولاً، سيتم سحب الإذن من المستخدم دون التأثير على المهام التي نفذها من خلال هذا الإذن، وهو هنا إنشاء Tablespace.
ثانياً: لا يتأثر المستخدم TEST1 بسحب الأذونات من المستخدم TEST.
يمكن لهذا المستخدم معرفة أذونات System Privileges التي يمتلكها من خلال الاستعلام عن:-
SELECT PRIVILEGE FROM USER_SYS_PRIVS;
ﻟﻼﺴﺘﻌﻼﻡ:
DBA_ROLES
USER_ROLE_PRIVS
DBA_ROLE_PRIVS
ROLE_ROLE_PRIVS
ROLE_SYS_PRIVS
ROLE_TAB_PRIVS
SESSION_PRIVS
2- Object Privileges: تمكن المستخدمين من الوصول إلى الكائنات والتفاعل معها. بدون هذه الامتيازات، لا يستطيع المستخدم التفاعل إلا مع الكائنات التي يملكها. المستخدم في قاعدة البيانات لديه أذونات بالطبع على الكائنات التي يملكها، ويمكن للمستخدم منح أذونات لمستخدم آخر للوصول إلى الكائنات التي يملكها،
وبالمثل، يمكن لمسؤول قاعدة البيانات منح أذونات للمستخدمين للوصول إلى الكائنات المملوكة لمستخدمين آخرين.
لنفترض أن المستخدم TEST يمتلك جدولاً باسم EXAMPLE، يريد هذا المستخدم منح امتياز SELECT على هذا الجدول للمستخدم TEST1.
GRANT SELECT ON EXAMPLE TO TEST1;
ماذا لو أراد مسؤول قاعدة البيانات منح امتياز SELECT على جدول EXAMPLE المملوك للمستخدم TEST للمستخدم TEST1.
GRANT SELECT ON TEST.EXAMPLE TO TEST1;
يمكن أيضًا استخدام الخيار WITH GRANT OPTION عند منح امتيازات Objects Privileges للإشارة إلى أن هذا المستخدم، بعد حصوله على هذا الامتياز، يمكنه منحه لمستخدمين آخرين.
GRANT INSERT ON EXAMPLE TO TEST1 WITH GRANT OPTION;
الآن يمنح المستخدم TEST1 إذن INSERT على الجدول EXAMPLE المملوك للمستخدم TEST لمستخدمين آخرين.
ماذا لو أراد المستخدم TEST سحب امتياز SELECT من جدول EXAMPLE الذي يملكه من المستخدم TEST1، مع العلم أن المستخدم TEST1 منح هذا الامتياز لمستخدمين آخرين.
لنفترض أنه TEST2، النتيجة هي أن الامتياز سيتم سحبه من المستخدم TEST1 وأيضًا من جميع المستخدمين الذين منحوا الامتياز من خلال المستخدم TEST1؛ هنا هو المستخدم TEST2.
سنتبع هذا السيناريو عمليًا: -
SHOW USER;
نحن نعمل الآن على المستخدم TEST.
يمتلك المستخدم TEST جدول EXAMPLE واحد، والآن سيمنح المستخدم TEST امتياز SELECT على الجدول EXAMPLE الذي يمتلكه للمستخدم TEST1.
GRANT SELECT ON EXAMPLE TO TEST١ WITH GRANT OPTION;
من خلال المستخدم TEST1، يمكنك إجراء SELECT على الجدول أعلاه.
يمكن للمستخدم TEST1 منح امتياز SELECT على الجدول EXAMPLE المملوك للمستخدم TEST للمستخدم TEST2.
GRANT SELECT ON TEST.EXAMPLE TO TEST2;
يمكن للمستخدم TEST2 إجراء عملية SELECT على الجدول EXAMPLE.
SELECT * FROM TEST.EXAMPLE;
نقوم بسحب الصلاحية من المستخدم TEST1.
REVOKE SELECT ON EXAMPLE FROM TEST1;
باستخدام المستخدم TEST1، نقوم بإجراء SELECT لجدول EXAMPLE.
SELECT * FROM TEST.EXAMPLE;
ستلاحظ أن المستخدم TEST1 ليس لديه إذن الآن.
ماذا عن المستخدم TEST2؟
كما أن المستخدم TEST2 ليس لديه إذن للاستعلام عن جدول EXAMPLE.
يمكن منح الإذن على مستوى العمود، على سبيل المثال:
GRANT INSERT (CNO) ON EXAMPLE TO TEST1;
يمكن الاستعلام عن ﺍلObjects Privileges بعدة طرق، بما في ذلك:
DBA_TAB_PRIVS
ALL_TAB_PRIVS
USER_TAB_PRIV
DBA_COL_PRIVS
ALL_COL_PRIVS
USER_COL_PRIVS
SESSION_PRIVS
Comments
لايوجد تعليق حتى الان