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

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

شاطر | 
 

 إدارة قواعد البيانات( عملي)

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

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

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

مُساهمةموضوع: إدارة قواعد البيانات( عملي)   السبت أغسطس 23, 2008 11:27 am

السلام عليكم و رحمة الله :
إن مجال إدراة قواعد البيانات أوركل لا يجد حقه في هذا المنتدى ، لأن أغلب المشاركات تتمحور حول تطوير التطبيقات بشكل عام ، لذلك رغبت في أن أستغل فترة الصيف لنقوم بسلسلة دروس حول إدارة القاعدة ، أي يمكن أن نعتبرها دورة متكاملة في إدارة القاعدة من المستخدمين حتى البنى الفيزيائية كـDatafiles و Redo log Files و البنى المنطقية Table Spaces ، مروراً بالنسخ الإحتياطي Backup و استخدام RMAN ... إلخ بحسب ما يسمح لنا الوقت .
أتمنى أن تأخذ هذ الدورة بأهمية و أجد التفاعل و يتم التثبيت لكي نستثمر الوقت بأفضل وسيلة للتعلم .
و بدلاً من كثرة الكلام لنبدأ الفعل مع القسم الأول إدارة المستخدمين .





ما هي الحاجة إلى وجود مستخدمين ؟
تكمن الحاجة في حتمية وجود خصوصية للبيانات بحيث يستطيع كل شخص أن يحتفظ ببيناته و قدرته على تعديلها و منح الحق لغيره بالإطلاع عليها أو إجراء العمليات المختلفة عليها .
عندما يريد أحد التعامل مع أوراكل يجب أن تكون له سماحية الدخول إلى النظام و هذه السماحية تؤخذ بالطرق : :
1- Data Dictionary قاموس البيانات .
2- Operating System نظام التشغيل .
3- Networking الشبكة .
سيكون موضوع بحثنا هو الطريقتين الأولى و الثانية .
قبل البدء بعملية إنشاء المستخدمين يجب أن أوضح المصطلحات التالية :
1- Schema المخطط : و هي مجموعة objects التي يملكها المستخدم أي الجداول – index –PL/SQL CODE ....
2- Table Space الفضاء الجدولي : منطقياً هو المكان المخصص لكل مستخدم لكي يقوم بتخزين بياناته عليه ، فيزيائياً هو مجموعة من الملفات التي تخزن البيانات ندعوها data file .
3- Privileges الصلاحية : و تعني إمكانية قيام مستخدم معين بعملية ما على البيانات أو إنشاء بنى جديدة أو حذف بنى موجودة ....إلخ .
4-Quotas : و هي السماحة المخصصة للمستخدم للتخزين على فضاء tablespace معين ...
تعليمة إنشاء user :
الشكل القياسي لها :
كود
[b]CREATE USER user
IDENTIFIED {BY password | EXTERNALLY}
[ DEFAULT TABLESPACE tablespace ]
[ TEMPORARY TABLESPACE tablespace ]
[ QUOTA {integer [K | M ] | UNLIMITED } ON tablespace
[ QUOTA {integer [K | M ] | UNLIMITED } ON tablespace
]...]
[ PASSWORD EXPIRE ]
[ ACCOUNT { LOCK | UNLOCK }]
[ PROFILE { profile | DEFAULT }]




مخيفة ، أليس كذلك ؟
بالطبع لا ، فهي بسيطة و سهلة و سنرى ذلك في سياق السلسة بإذن الله ..
لنبدأ بـ :
1- إنشاء Database User :
كما تحدثنا سابقاً فإنه توجد عدة طرق لإنشاء مستخدم منها Data Dictionary . و فيها يأخذ المستخدم صلاحية الدخول من أوركل أي يكون لديه password . لتعليمة الإنشاء المثال التالي:
كود
create user Arabteam
identified by arabteam_pass


إذا أردنا أن نتوسع أكثر فلنجعل لهذا المستخدم حصة على Users Tablespace و هو فضاء جدولي إفتراضي يتم إنشاءه عند تنصيب Oracle :
كود
create user Arabteam
identified by arabteam_pass
default tablespace users
quota 50m on users


في الحياة العملية لا يجب لمدير القاعدة أن يعرف كلمة السر الخاصة بمستخدم معين و هذا ما نشاهده في حالتنا فقد أسندنا كلمة السر التي نريد إلى المستخدم و هذا لا يصح . لذلك ما رأيكم لو أننا طلبنا من المستخدم أن يقوم بعملية تغيير قسرية لكلمة السر الخاصة به عند أول دخول ؟؟ بذلك " نصفي ذمتنا " (على الطريقة السورية ) ؟؟
كود
create user Arabteam
identified by arabteam_pass
default tablespace users
quota 50m on users
password Expire;


حتى الآن أظن أن الأمور بخير و لا يوجد شيء صعب على الفهم على ما أعتقد .....
ماذا لو أردنا عدم تفعيل الحساب مباشرة ؟ أي ننشء الحساب و لكن المستخدم لن يستطيع إستخدامه ؟
كود
create user Arabteam
identified by arabteam_pass
default tablespace users
quota 50m on users
password Expire
Account Lock;


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

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

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

مُساهمةموضوع: 2- إنشاء Operating System User :   السبت أغسطس 23, 2008 11:30 am


2- إنشاء Operating System User :
و هنا يتم السماح للمستخدم إستخدام النظام بعد مصادقة نظام التشغيل . كلام غامض جداً جداً ؟؟؟؟؟؟
كلنا يعلم أننا يمكن إنشاء مستخدمين في نظام التشغيل الذي نعمل عليه سواء أكان Windows أو Linux أو أي نظام تشغيل آخر ، أفلا يمكننا إستخدام هذه الإمكانية في سماحية الدخول إلى أوراكل ؟ أي يكفي للمستخدم أن يقوم بستجيل الدخول إلى نظام التشغيل ثم يستدعي مثلاً SQL PLUS هكذا :
كود
c:\> sqlplus /

أي دون الحاجة إلى كتابة اسم المستخدم و كلمة المرور ؟؟؟ هذا ما ندعو بمصادقة نظام التشغيل ...
كيف نحقق ذلك ؟
كود
create user Arabteam
identified Externally

و ننشىء مستخدم اسمه ArabTeam على النظام ، و انتهت القصة .. سهلة أليس كذلك ؟؟
و لكن هناك شيء أساسي يجب ذكره : إن اسم مستخدم نظام التشغيل مرتبط بشكل أساسي بالبرامتر OS_AUTHENT_PREFIX ( البارامترات هي مجموعة من القيم التي تحدد طبيعة بعض العمليات الإدارية للقاعدة مثل اسماء data files و control files و النسخ الإحتياطي Backup ..... إلخ و هي مخزنة داخل ملف SPFILE أو PFILE الذين سيكون لهم نقاش طويل بإذن الله ) بحيث يجب أن تكون قيمته "" ... الآن كيف نستطيع فعل ذلك ؟؟؟ لنتبع الخطوات التالية :
1- سجل الدخول بالشكل التالي :
كود
sys/pass as sysdba

2- نفذ التعليمة التالية :
كود
alter system set OS_AUTHENT_PREFIX='' scope=spfile;

3- أغلق القاعدة بالشكل :
كود
shutdown immediate

4- أعد تشغيل القاعدة بالشكل :
كود
startup

و بذلك تم الأمر ..
و الآن لنسجل الدخول بالمستخدم الذي إنشأناه :
كود


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

SQL> create user arabteam
2 identified by arabteam;

User created.

SQL> connect arabteam/arabteam
ERROR:
ORA-01045: user ARABTEAM lacks CREATE SESSION privilege; logon denied


Warning: You are no longer connected to ORACLE.
SQL>

ما الذي حدث ؟؟؟؟
تحدثنا في البداية بضرورة وجود الصلاحيات التي تحكم عمل المستخدم حتى في تسجيل دخوله . لذلك نحتاج إلى منح المستخدم Arabteam القدرة على تسجيل الدخول و ذلك بالطريقة :
كود
SQL> connect system/pass
Connected.
SQL> grant create session to arabteam;

Grant succeeded.

SQL> connect arabteam/arabteam_pass;
Connected.
SQL>

و سيكون لنا حديث طويل جداًعن السماحيات و ذلك في الجزء القادم إن شاء الله .
التعديلات على خصائص المستخدمين :
هل نستطيع إجراء التعديلات على المستخدمين الذين أنشأناهم ؟ هل نستطيع تغيير كلمة المرور أو Quota أو الفضاء الجدولي ؟؟؟
بالطبع نستطيع و ذلك عن طريق التعليمة :

كود
ALTER USER user
[ DEFAULT TABLESPACE tablespace]
[ TEMPORARY TABLESPACE tablespace]
[ QUOTA {integer [K | M] | UNLIMITED } ON tablespace
[ QUOTA {integer [K | M] | UNLIMITED } ON tablespace ]
...]

ما رأيكم بتغيير كلمة المرور للسمتخدم الذي أنشأناه ؟؟
كود
SQL> alter user arabteam
2 identified by pass;

User altered.

ملاحظة : يمكن حتى للمستخدم arabteam نفسه أن ينفذ هذه التعليمة لتغيير كلمة السر الخاصة به .
ما رأيكم بتغيير المساحة المخصصة للسمتخدم للكتابة على الفضاء الجدولي USERS ؟؟؟
كود
SQL> alter user arabteam
2 quota 50m on users;

User altered

و بذلك أنتهى الجزء الخاص بإنشاء السمتخدمين .. سوف نتحدث في الجزء القادم بإذن الله عن السماحيات ...
ملاحظة هامة جداً :
لكي تستطيع تطبيق كل التعليمات التي ذكرناها يجب أن توجد سماحيات للقيام بها ، أي لا تحاول أن تنفذ التعليمات بواسطة Scott ، و إنما أنصح تسجيل الدخول بواسطة SYSTEM ..
م. حسام فيصل
Jul 28 2006, 03:01 AM
أهلاً بالأخوين {عيسى} و Aboalnoor-Delphi7 . و أتمنى أن يستفيد الجميع
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://awfm.boardlog.com
عبدالهادي الحداد
مدير الموقع
avatar

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

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

مُساهمةموضوع: بكلمتين : السماحية هي قدرة المستخدم على فعل شيء ما   السبت أغسطس 23, 2008 11:32 am

[size=21]إدارة السماحيات :
بكلمتين : السماحية هي قدرة المستخدم على فعل شيء ما .
و تعتبر أوركل من أقوى نظم الإدارة التي تحوي على سماحيات متنوعة تكاد تشمل كل شيء حتى السماحيات الصغيرة و هي تعتبر نقطة قوة في صالح أوراكل .
تقسم الصلاحيات إلى نوعين :
1-على مستوى النظام System Level : تسمح بتنفيذ عمليات على القاعدة بشكل عام كإنشاء الجدوال و حذفها .... إلخ .
2- على مستوى الغرض Object : تسمح بتنفيذ عمليات على غرض محدد . مثلاً : حذف سجلات من الجدجول emp .
يتم منح السماحيات إلى السمتخدم عن طريق :
1- مباشر بمنح الصلاحية و تسميته .
2- عن طريق Role ( مجموعة سماحيات سنتعرف إليها لاحقاً ) .
3- عن طريق اسناد السماحية لجميع المستخدمين public .
و لنبدأ بــ
1-System Privilege :
يوجد حوالي 100 صلاحية مختلفة ضمن هذا المستوى تتضمن العمليات على مستوى القاعدة للتعامل مع الأغراض المختلفة مثل الجداول و الفهارس و المتسلسلة Sequence و الفضاءات الجدولية TableSpaces .....
مثال :
تذكرون مثالنا السابق حيث سمحنا للمستخدم Arabteam بتسجيل الدخول ؟
كود
grant create session to arabteam;

فالسماحية Create Session هي على مستوى النظام System Level .
بشكل عام يتم منح الصلاحيات بالشكل :
كود
GRANT {system_privilege|role}
[, {system_privilege|role} ]...
TO {user|role|PUBLIC}
[, {user|role|PUBLIC} ]...
[WITH ADMIN OPTION]

مثال آخر :
- ما رأيكم أن نجعل المستخدم arabteam قادراً على إنشاء جدول ؟؟
كود
grant create table to arabteam;

يمكنك أن تمنح المستخدم أكثر من سماحية في نفس الوقت :
مثال لنجعل المستخدم arabteam قادراً على تنفيذ تعليمة select و Update على أي جدول يريده في القاعدة :
كود
grant select Any table , update any table to arabteam;

لحظة واحدة : ما ذا تعني كلمة Any ؟ و لماذا وضعناها ؟
السبب : عندما نضع Any فهذا يعني الصلاحية المطلقة الكاملة للمستخدم على مستوى القاعدة بشكل عام .
للتوضيح :
عندما نمنح المستخدم صلاحية إنشاء جدول create table فإنه يستطيع فيما بعد حذف الجدول الذي أنشأه فقط . ما ذا لو أردنا إطلاق يده ليعتدي على جداول الأخرين و يقوم بالحذف ؟
كود
grant drop any table to arabteam;

- حسناً : ماذا لو أردنا أن نجعل المستخدم arabteam قادراً على منح الصلاحية التي منحناها له لمستخدم آخر ؟
يمكننا ذلكك إذا أرفقنا with admin option .
أي :
كود
grant create table to arabteam with admin option ;

و بذلك يستطيع المستخدم arabteam منح هذه الصلاحية إلى مستخدم آخر ليكن arabteam2 ....
ماذا لو غضبنا من المستخدم arabteam و أردنا سحب الصلاحية ؟
كود
revoke drop any table from arabteam;

الآن سأذكر الصلاحيات الشائعة مقسمة حسب نوع object الذي نتعامل معه :
كود
الفئة الصلاحية
INDEX CREATE ANY INDEX
ALTER ANY INDEX
DROP ANY INDEX

TABLE CREATE TABLE
CREATE ANY TABLE
ALTER ANY TABLE
DROP ANY TABLE
SELECT ANY TABLE
UPDATE ANY TABLE
DELETE ANY TABLE

SESSION CREATE SESSION
ALTER SESSION
RESTRICTED SESSION

TABLESPACE CREATE TABLESPACE
ALTER TABLESPACE
DROP TABLESPACE
UNLIMITED TABLESPACE

إذا أردت أن تعرف جميع الصلاحيات اكتب الإستعلام التالي ( بعد تسجيل الدخول بإحد الحسابين SYSTEM أو SYS ) :
كود
select distinct privilege
from dba_sys_privs;

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

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

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

مُساهمةموضوع: على مستوى الغرض Object Level :   السبت أغسطس 23, 2008 11:33 am

[size=12]على مستوى الغرض Object Level :
هنا الصلاحية تطبق على غرض محدد: جدول –مشهد view – متسلسلة sequence - إجرائية procedure .
هذه الصلاحيات معدودة على الأصابع :
1- Alter : تطبق على جدول– متسلسلة sequence - إجرائية procedure .
2- Delete : تطبق على جدول – مشهد view .
2-Execute : تطبق على : إجرائية procedure .
3 – Index : أي فهرسة : جدول – مشهد view .
4- Insert : جدول –مشهد view .
5- References : جدول .
6-Select : جدول –مشهد view – متسلسلة sequence .
7- Update : جدول –مشهد view .
مثال : لنجعل مستخدمنا arabteam قادراً على القراءة select من الجدول emp :
كود
SQL> grant select on scott.emp to arabteam;

Grant succeeded.

و لنجعله قادراً على تنفيذ الحزمة dbms_output :
كود
SQL> grant Execute on dbms_output to arabteam;

Grant succeeded.

بشكل عام :
يتم منح صلاحية object privilege بالشكل التالي :
كود
GRANT { object_privilege [(column_list)]
[, object_privilege [(column_list)] ]...
|ALL [PRIVILEGES]}
ON [schema.]object
TO {user|role|PUBLIC}[, {user|role|PUBLIC} ]...
[WITH GRANT OPTION]

ماذا لو أردنا أن نجعل arabteam قادراً على منح الصلاحية لمستخدم آخر ؟؟
كود
SQL> grant select on scott.emp to arabteam with grant option;

Grant succeeded

هنا يجب أن نتوقف عند مقارنة صغيرة :
ما الفرق بين grant option التي استخدمناها مع Object Level و Admin option التي استخدمناها مع System LeveL ؟
تخيلوا السيناريو التالي :
1- قمنا بمنح سماحية ما إلى المستخدم arabteam .
2-قام المستخدم arabteam بمنح هذه الصلاحية إلى المستخدم arabteam2 .
3- سحبنا الصلاحية من المستخدم arabteam .
و السؤال : هل سيتأثر المستخدم arabteam2 بعملية السحب ؟؟
و الجواب :
إذا تم استخدام admin option فإنه لن يتأثر مطلقاً و بوسعه استخدام الصلاحية .
إذا تم إستخدام grant option فإن الصلاحية ستسحب منه أيضاً .

الآن ملاحظة هامة جداً للمطورين :
إذا كانت إجرائياتكم تستفيد من الصلاحيات التي يتمتع بها المستخدم الذي يقوم بتنفيذها ، و تم سحب هذه الصلاحيات لاحقاً ، فإن جميع هذه الإجرائيات ستصبح معطلة و يلزم عملية Recompiles لها ..

الآن بدأت أشعر بالنعاس و أصبحت أرى عبارات Oracle على الجدران ..
لذلك سأتوقف الآن و سأقوم بتجهيز القسم الثالث الذي يشرح ـمجموعات السماحيات Roles على الأغلب غداً إن شاء الله ..
[/size]
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://awfm.boardlog.com
 
إدارة قواعد البيانات( عملي)
استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

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