النافذة العربية للبرمجة

النافذة العربية للبرمجة
 
الرئيسيةالمشاركاتمكتبة الصورس .و .جبحـثالأعضاءالمجموعاتالتسجيلدخول

شاطر | 
 

 إنشاء المستخدمين و منح الصلاحيات

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل 
كاتب الموضوعرسالة
عبدالهادي الحداد
مدير الموقع
avatar

عدد الرسائل : 483
العمر : 32
الموقع : اليمن الحبيبة
العمل/الترفيه : طالب برمجة
تاريخ التسجيل : 13/06/2008

بطاقة الشخصية
المدير العام / عبدالهادي الحداد:

مُساهمةموضوع: إنشاء المستخدمين و منح الصلاحيات   السبت أغسطس 23, 2008 11:38 am

السلام عليكم :
تحدثنا في الأجزاء السابقة عن إنشاء المستخدمين و منح الصلاحيات ،و لكن ما رأيكم بالتالي :
لديك حوالي 100 مستخدم جديد نريد إنشاءهم ، ثم منح صلاحيات إنشاء الجدوال و المشاهد للجميع ، فالسؤال كم سطراً من التعلميات تحتاج ؟ و في الجهة الأخرى إذا أردت سحب صلاحية معينة من هؤلاء المئة فكم سطراً أخر ستكتب من أجل ذلك ؟ و هل أنت متأكد من أنك لم تنسى أي مستخدم ؟؟
الحل : مجموعة السماحيات Rols .
إذاً Role هي مجموع السماحيات المختلفة التي نود إسنادها فيما بعد إلى مستخدم واحد أو أكثر أو حتى إلى مجموعة سماحيات أخرى .
تتميز role بسهولة إستخدامها المرة تلو الأخرى بحيث يتم إسنادها إلى المستخدم و سحبها منه ، كما أن سحب الصلاحية من role تؤدي إلى سحبها من المستخدم الذي أسندنا له تلك role . يمكن أن تسند أكثر من role إلى مستخدم ما ، كما يمكنك اسناد role واحدة إلى أكثر من مستخدم .

تعليمة إنشاء role :
كود
SQL> create role arabteam_role;

Role created.

بشكل عام :
كود
CREATE ROLE role [NOT IDENTIFIED | IDENTIFIED
{BY password | EXTERNALLY | GLOBALLY | USING package}]

- ماذا لو أردنا منح role مشروطة لمستخدم ما ؟ أي يجب عليه كتابة كلمة سر لتمكين هذه role ؟؟
كود
SQL> create role arabteam_role
identified by arabteam_pass;

Role created.

ماذا لو أردنا مصادقة نظام التشغيل ( كما فعلنا مع المستخدمين ) لتمكين role ؟
كود
SQL> create role arabteam_role
identified Externally;

كيف نسند السماحيات إلى role ؟
بالطريقة نفسها التي أسندنا فيها السماحيات للمستخدمين :
كود
SQL> grant create table to arabteam_role;
Grant succeeded

الآن كيف نسند role إلى المستخدمين ؟
كود
SQL> grant arabteam_role to arabteam;
Grant succeeded

حتى أننا نستطيع إسناد role إلى أخرى ، فتصبح الثانية تحوي صلاحيات الأولى :

كود
SQL> grant arabteam_role1 to arabteam_rol2;
Grant succeeded

بشكل عام :
كود
GRANT role [, role ]...
TO {user|role|PUBLIC}
[, {user|role|PUBLIC} ]...
[WITH ADMIN OPTION]

تمكين و إلغاء تمكين Roles :
يستطيع المستخدم arabteam أن يفعل أو يلغي عمل role معينة قام مدير القاعدة أو أي مستخدم آخر بإسنادها إليه . قد يسأل البعض: أي مجنون يلغي صلاحيات ممنوحة إليه ؟؟؟
الجواب سيدركه مطوري التطبيقات أكثر من غيرهم : في التطبيقات قد يتشارك الموظفون اسم مستخدم واحد لإستعمال التطبيق ، و لكن نريد فرض مستويات من الحماية على مستوى السمتخدم الواحد ، أي قد نسمح لموظف (س) بسماحيات أكثر من الموظف (ع) رغم أن الإثنين يقومان بتسجيل الدخول بالمستخدم arabteam .
أرجو أن الفكرة قد وصلت .
كيف نستطيع التفعيل :
بإستخدام التعليمة set :
كود
Set role arabteam_role;

ماذا لو أراد المستخدم أن يفعل role مشروطة بكلمة سر ؟؟
كود
set role arabteam_role identified by arabteam_pass;

ماذا لو أراد المستخدم تفعيل جميع roles التي يملكها ماعدا role معينة ؟
كود
set role all except arabteam_role;

لمطوري التطبيقات :
هناك dbms_session.set_role لتمكين role معينة ، و لكن إنتبه فلا يمكنك استعمال في PL/SQL Stored Procedure بل نستطيع إستعمالها فقط عن طريق Anonymous block أو عن طريق TRIGGER على مستوى الفورم .

أي :
كود
SQL> begin
2 dbms_session.set_role('arabteam_role');
3 end;
4 /

PL/SQL procedure successfully completed.

إنظر إلى التالي:
كود
SQL> create or replace procedure set_proc
2 is
3 begin
4 dbms_session.set_role('role1');
5 end;
6 /

Procedure created.

SQL> execute set_proc;
BEGIN set_proc; END;

*
ERROR at line 1:
ORA-06565: cannot execute SET ROLE from within stored procedure
ORA-06512: at "SYS.DBMS_SESSION", line 124
ORA-06512: at "SYSTEM.SET_PROC", line 4
ORA-06512: at line 1

أرجو أن الفكرة قد وصلت .
ماذا لو أردنا إنشاء role لا يمكن تفعيلها إلا عن طريق تنفيذ package معينة ؟؟؟؟
ننشىء role خاصة نسميها Application Role بالطريقة التالية :

كود
create role arabteam_approle
identified using arabteam.SetRole_package;

ملاحظة هامة جداً : كل عمليات set التي تجريها سوف يتم التراجع عنها عند تسجيل الخروج بحيث تعود مجموعة السماحيات الإفتراضية التي يتم إسنادها بالشكل :
كود
SQL> alter user arabteam
2 default role arabteam_role;

User altered.

- يتم سحب الصلاحية من role بنفس الطريقة التي إستعملناها مع user :
كود
revoke create table from arabteam_role;

- حذف الصلاحية يتم بالتعليمة التالية :
كود
drop role arabteam_role;

أخيراً : توجد مجموع من Roles التي يتم إنشاءها إفتراضياً مع تنصيب أوراكل :
1- CONNECt : للتوافقية مع الإصدارات المختلفة من الأوراكل سيرفر و تضم صلاحية واحدة فقط هي create session >
2- Resource : و هي role قوية تضمن صلاحيات تتيح للمستخدم إنشاء جداوله بأي مساحة على أي table space بالإضافة إلى مميزات أخرى . في رأيي إن هذه role تمنح للمستخدمين المميزين في القاعدة . تحوي هذه role على :
كود
CREATE SESSION
UNLIMITED TABLESPACE

بالإضافة إلى سماحيات إنشاء الجدوال و المشاهد و إجرائيات PL/SQL ....
3- dba : و هي role الشهيرة جداً و هي تحوي جميع السماحيات التي تجعل من المستخدم "معلم الداتا بيس " أو المستخدم الذي لا يخضع إلا للمستخدم sys . هذه role خطيرة جداً فهي تجعل المستخدم قادراً على كل شيء في القاعدة حتى عملية التخريب المقصودة أو غير المقصودة و في العادة لا تمنح هذه role إلا لشخص و احد فقط و هي مدير القاعدة الرئيسي أما البقية فيتم منحهم أجزاء من هذه role . تحوي هذه role على السماحيات التالية :

كود
ADVISOR ,AUDIT ANY ,DROP USER ,RESUMABLE ,ALTER USER , CREATE JOB , ANALYZE ANY , BECOME USER , CREATE ROLE , CREATE RULE , CREATE TYPE , CREATE USER , CREATE VIEW , ALTER SYSTEM , AUDIT SYSTEM , CREATE TABLE , DROP PROFILE ,ALTER PROFILE , ALTER SESSION , DROP ANY ROLE,
DROP ANY RULE,DROP ANY TYPE,DROP ANY VIEW ,QUERY REWRITE ,ALTER ANY ROLE , ALTER ANY RULE , ALTER ANY TYPE , ALTER DATABASE , CREATE ANY JOB , CREATE CLUSTER , CREATE LIBRARY , CREATE PROFILE , CREATE SESSION , CREATE SYNONYM , CREATE TRIGGER , DROP ANY INDEX , DROP ANY TABLE , GRANT ANY ROLE , LOCK ANY TABLE ,UNDER ANY TYPE ,UNDER ANY VIEW ,ALTER ANY INDEX , ALTER ANY TABLE , CREATE ANY RULE , CREATE ANY TYPE ,CREATE ANY VIEW ,CREATE OPERATOR ,CREATE RULE SET ,CREATE SEQUENCE ,DROP TABLESPACE , UNDER ANY TABLE ,ALTER TABLESPACE ,BACKUP ANY TABLE ,CREATE ANY INDEX , CREATE ANY TABLE , CREATE DIMENSION
CREATE INDEXTYPE ,CREATE PROCEDURE ,DELETE ANY TABLE ,DROP ANY CLUSTER ,DROP ANY CONTEXT ,DROP ANY LIBRARY ,DROP ANY OUTLINE ,DROP ANY SYNONYM ,DROP ANY TRIGGER ,EXECUTE ANY RULE ,EXECUTE ANY TYPE ,INSERT ANY TABLE ,MANAGE ANY QUEUE ,MANAGE SCHEDULER ,SELECT ANY TABLE ,UPDATE ANY TABLE ,ALTER ANY CLUSTER ,ALTER ANY LIBRARY ,ALTER ANY OUTLINE ,ALTER ANY TRIGGER ,COMMENT ANY TABLE ,CREATE TABLESPACE
DEQUEUE ANY QUEUE ,DROP ANY OPERATOR ,DROP ANY RULE SET ,DROP ANY SEQUENCE ,ENQUEUE ANY QUEUE ,EXECUTE ANY CLASS ,FORCE TRANSACTION ,MANAGE TABLESPACE ,ON COMMIT REFRESH ,ALTER ANY RULE SET ,ALTER ANY SEQUENCE,CREATE ANY CLUSTER ,CREATE ANY CONTEXT ,CREATE ANY LIBRARY , CREATE ANY OUTLINE ,CREATE ANY SYNONYM ,CREATE ANY TRIGGER ,DROP ANY DIMENSION ,DROP ANY DIRECTORY ,DROP ANY INDEXTYPE ,DROP ANY PROCEDURE
RESTRICTED SESSION


توجد العديد من roles الأخرى التي سيكون الحديث حولها طويلة ...
إذا أردت أن تعلم ما هي roles الموجودة و السماحيات على مستوى النظام التي تحويها :
كود
select role , privilege from role_sys_privs;

إذا أردت أن تعلم ما هي roles الموجودة و السماحيات على مستوى الغرض التي تحويها :
كود
select role , privilege from role_obj_privs;


ماذا لو أراد مستخدمنا arabteam أن يعرف ماهي الصلاحيات التي يملكها ؟
على مستوى النظام :
كود
select * from user_sys_privs;

على مستوى الأغراض :

كود
select * from user_obj_privs;

و هكذا انتهى القسم الخاص بــroles .
في القسم القادم إن شاء الله سنتحدث عن إدارة الموارد Resource Manage و كيفية توزيعها بالشكل الأمثل .. أرجو إذا وجدت أي ملاحظات حول طريقة شرحي أو عرض الأفكار أو أي تعقيب على أي فقرة فلا تبخلوا علي بها .... و السلام


إستفتاء
م. حسام فيصل
Jul 29 2006, 03:01 PM
مع أنني لم أجد التفاعل المطلوب كما كنت آمل و لكنني سأستمر عسى أن يصبح الأمر أفضل مع تتالي الدروس (كما آتمنى ) .

اليوم سيكون لدينا جولة مع إدارة الموارد Resources .. و لكن لماذا ؟
تخيلوا السيناريو التالي :
لنفترض أنك مدير للقاعدة في إحدى البنوك أو شركات الإتصالات و تصادف وجود جدول بملايين السجلات ( جدول الإتصالات الهاتفية التي يتم إجراءها ) و جاء موظف جديد ليس له خبرة و نفذ تعليمة select أو Update بدون شرط where أو كانت نتيجة التعليمة التي نفذها تحوي على مليون أو أكثر من السجلات ؟ فما رأيك ؟ ما الذي سيحدث على السيرفر ؟ و هل ستتحمل الشبكة أو السيرفر هذا الضغط ؟ ماذا لو لم يكن موظفا واحداً و كان هناك مجموعة أخرى من الموظفين لن أقول أغبياء و لكن مستهترين و لا يبالون ماذا سوف يحدث ؟ لأنك الوحيد الذي سيلام على توقف القاعدة ...
ما الحل ؟؟
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://awfm.boardlog.com
عبدالهادي الحداد
مدير الموقع
avatar

عدد الرسائل : 483
العمر : 32
الموقع : اليمن الحبيبة
العمل/الترفيه : طالب برمجة
تاريخ التسجيل : 13/06/2008

بطاقة الشخصية
المدير العام / عبدالهادي الحداد:

مُساهمةموضوع: Resource Limit Profiles :   السبت أغسطس 23, 2008 11:42 am


Resource Limit Profiles :
هي مجموعة من القيم التي نضعها لكي نتحكم بحجم الذاكرة أو كمية البيانات التي يستطيع المستخدم إستغلالها ضمن جلسته الحالية ، حيث يتم وضع هذه القيم داخل مانسميه Profile و يتم إسناده إلى مستخدم أو أكثر عن طريق تعليمات create user أو alter user .
ليتم تفعيل هذه الإدارة نحتاج لأن نضع القيمة TRUE إلى البارامتر resource_limit بالطريقة التالية :
كود
Enter user-name: system/oracle

Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> alter system set resource_limit=true;

System altered.

و الآن لنذكر البارامترات التي نستطيع إستخدامها :
1- cpu_per_sesison : و فيها نحدد الوقت الزمني المخصص لكل جلسة و التي تستطيع إستهلاكه من زمن المعالج ، يقاس هذا الوقت بالثانية .
2- session_per_user : كم عدد الجلسات التي يمكن لمستخدم ما أن يقوم بفتحها . (يعلم الجميع بأننا نستطيع تشغيل SQL plus أكثر من مرة و بنفس اسم المستخدم ، كل نسخة من sql plus مفتوحة ندعوها جلسة ) ..
3- connect_time : كم الوقت الزمني الذي تسمح به للمستخدم للإتصال بالقاعدة .
4-IDLE_TIME : الوقت الزمني الذي ستمح به للمستخدم أن يبقي جلسته مفتوحة دون أن يقوم بأي شيء .
5- LOGGICAL_READS_PER_SESSION : كم كمية البيانات التي تريد لمستخدم ما أن يقوم بقراءتها خلال الجلسة الكاملة .. تقاس هذه الكمية بعدد بلوكات البيانات Data Block .. و لكي نفهمها بطريقة مبسطة لإغنها المعادلة التالية : العدد * 4 كيلو بايت ( في العادة ) ...
6- Private_SGA : و هي المساحة المخصصة من الذاكرة لكل جلسة يقوم بفتحها .
7- CPU_PER_CALL : و هو الزمن الأقصى الذي يسمح لتعليمة المستخدم أن تأخذ من زمن المعالج .
8- LOGICAL_READS_PER_CALL : كم كمية البيانات التي تريد لمستخدم ما أن يقوم بقراءتها خلال التعليمة الواحدة .
لنتقل إلى التطبيق العملي :
تعليمة إنشاء Profile :


كود
CREATE PROFILE profile LIMIT
[SESSIONS_PER_USER max_value]
[CPU_PER_SESSION max_value]
[CPU_PER_CALL max_value]
[CONNECT_TIME max_value]
[IDLE_TIME max_value]
[LOGICAL_READS_PER_SESSION max_value]
[LOGICAL_READS_PER_CALL max_value]
[COMPOSITE_LIMIT max_value]
[PRIVATE_SGA max_bytes]
where:
profile is the name of the profile
max_value is an integer, UNLIMITED, or DEFAULT
max_bytes is an integer optionally followed by K or M UNLIMITED, or
DEFAULT

ما رأيكم بالمثال التالي :
سنسمح للمستخدم arabteam بأن يفتح جلستين فقط و سنسمح له بأن يستهلك من وقت المعالج في التعليمة الواحدة دقيقتين فقط و سنسمح له بقراءة 1 ميغا بايت فقط من البيانات في التعليمة الواحدة و سنسمح له بفتح جلسة فقط لمدة ثلاثين دقيقة :
كود
SQL> create profile arabteam_prof limit
2 sessions_per_user 2
3 cpu_per_call 120
4 logical_reads_per_call 1073741824
5 connect_time 1800;

Profile created.
SQL> alter user arabteam profile arabteam_prof;

User altered.

في القسم القادم إن شاء الله سنتحدث عن إدراة كلمات السر .
بالتوفيق للجميع .
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://awfm.boardlog.com
محترف
مبرمج رائع
مبرمج رائع
avatar

عدد الرسائل : 144
العمر : 31
تاريخ التسجيل : 22/07/2008

بطاقة الشخصية
المدير العام / عبدالهادي الحداد:

مُساهمةموضوع: رد: إنشاء المستخدمين و منح الصلاحيات   الأحد أغسطس 24, 2008 7:11 am

مشكووووووووووووووووووووور أخوي على هذا الموضوع ونتمنى المزيد من المواضيع





الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو
 
إنشاء المستخدمين و منح الصلاحيات
استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
النافذة العربية للبرمجة :: قسم قواعد البيانات :: Oracle قسم قواعد البيانات أوراكل-
انتقل الى: