Skip to Content

oracle database 2

فيما يلي دليلٌ شامل (Theory + أمثلة + كود) يشرح بالعربية أهم المهام اليومية التي يقوم بها DBA أو المطوّر عند التعامل مع Oracle Database، ويغطي:


1. إنشاء قاعدة بيانات (CDB & PDB في الإصدارات الحديثة)

2. إنشاء المستخدمين (Local & Common)

3. إدارة الأدوار (Roles) والصلاحيات (Privileges)

4. نماذج كود جاهزة مع شرح مبسّط لكل أمر


> جميع الأكواد اختُبرت على Oracle 19c/23c Free، يمكن تنفيذها مباشرة من SQL*Plus أو SQL Developer أو أي أداة توصّل لـ Oracle.


---


### 1) إنشاء قاعدة البيانات (CDB/PDB)


#### أ) CDB (Container Database) – تُنشأ مرة واحدة عادةً أثناء تثبيت Oracle

```sql

-- لا حاجة لكود يدوي في الغالب؛ لكن يمكن إنشاؤها يدوياً عبر DBCA

-- أو من خلال ملف نصي (CREATE DATABASE ...) لكنه خارج نطاق المهام اليومية

```


#### ب) PDB (Pluggable Database) – تُنشأ/تُنسخ/تُقفل حسب الحاجة

```sql

-- 1) إنشاء PDB جديدة من SEED

CREATE PLUGGABLE DATABASE pdb_hr

ADMIN USER hr_admin IDENTIFIED BY "P@ssw0rd#"

ROLES = (DBA)

FILE_NAME_CONVERT = ('/pdbseed/', '/pdb_hr/')

STORAGE (MAXSIZE 5G);


-- 2) فتح الـPDB بعد إنشائها

ALTER PLUGGABLE DATABASE pdb_hr OPEN READ WRITE;


-- 3) جعلها تُفتح تلقائياً عند بدء CDB

ALTER PLUGGABLE DATABASE pdb_hr SAVE STATE;

```


---


### 2) إنشاء المستخدمين


#### أ) Common User (يعمل على مستوى الـCDB + جميع الـPDBs)

- يجب أن يبدأ بـ `C##`

- لا بد من امتلاك صلاحية `CREATE USER` على مستوى CDB


```sql

-- متصل بالـCDB كـ SYS

CREATE USER c##dba_boss IDENTIFIED BY "Boss_123"

DEFAULT TABLESPACE users

QUOTA UNLIMITED ON users

TEMPORARY TABLESPACE temp

PROFILE DEFAULT

PASSWORD EXPIRE

ACCOUNT UNLOCK;


-- السماح له بالدخول

GRANT CREATE SESSION TO c##dba_boss CONTAINER=ALL;


-- منح صلاحيات إدارية (اختياري)

GRANT DBA TO c##dba_boss CONTAINER=ALL;

```


#### ب) Local User (يعمل داخل PDB واحدة فقط)

```sql

-- تأكد أنك متصل بالـPDB (pdb_hr)

ALTER SESSION SET CONTAINER = pdb_hr;


CREATE USER hr_app IDENTIFIED BY "Hr_2025#"

DEFAULT TABLESPACE users

QUOTA 100M ON users

TEMPORARY TABLESPACE temp

PROFILE DEFAULT

ACCOUNT UNLOCK;


-- منح أقل صلاحية تسجيل

GRANT CREATE SESSION TO hr_app;

```


---


### 3) صلاحيات وأدوار (Privileges & Roles)


#### أ) System Privileges (صلاحيات على مستوى النظام)

```sql

-- مثال: السماح للمستخدم hr_app بإنشاء الجداول والفهارس

GRANT CREATE TABLE, CREATE INDEX, CREATE VIEW, CREATE SEQUENCE TO hr_app;

```


#### ب) Object Privileges (صلاحيات على كائنات محددة)

```sql

-- السماح بالقراءة والكتابة على جدول employees

GRANT SELECT, INSERT, UPDATE, DELETE ON hr.employees TO hr_app;

```


#### ج) Roles (تجميع صلاحيات لإعادة استخدامها)

```sql

-- 1) إنشاء الدور

CREATE ROLE hr_clerk;

-- 2) منح صلاحيات للدور

GRANT SELECT, INSERT, UPDATE ON hr.employees TO hr_clerk;

GRANT SELECT ON hr.departments TO hr_clerk;

-- 3) إسناد الدور للمستخدم

GRANT hr_clerk TO hr_app;

```


#### د) Revoke (سحب صلاحية أو دور)

```sql

REVOKE DELETE ON hr.employees FROM hr_app;

REVOKE hr_clerk FROM hr_app;

```


---


### 4) استعلامات مفيدة لمراقبة المستخدمين والصلاحيات


```sql

-- قائمة المستخدمين وموقفهم

SELECT username, account_status, default_tablespace, profile

FROM dba_users

ORDER BY 1;


-- الصلاحيات المباشرة (غير من خلال الأدوار)

SELECT grantee, privilege, admin_option

FROM dba_sys_privs

WHERE grantee IN ('C##DBA_BOSS','HR_APP');


-- الصلاحيات على كائنات محددة

SELECT grantee, owner, table_name, privilege

FROM dba_tab_privs

WHERE grantee = 'HR_APP';


-- الأدوار الممنوحة لمستخدم

SELECT granted_role, admin_option, default_role

FROM dba_role_privs

WHERE grantee = 'HR_APP';

```


---


### 5) نموذج عملي متكامل


السيناريو: 

نريد قاعدة بيانات `pdb_sales` + مستخدم `sales_app` يستطيع فقط قراءة/إدخال/تعديل بيانات جدول `sales.orders` ولا يستطيع الحذف.


```sql

-- 1) إنشاء الـPDB

CREATE PLUGGABLE DATABASE pdb_sales

ADMIN USER sales_admin IDENTIFIED BY "Adm_2025#"

ROLES = (DBA)

FILE_NAME_CONVERT = ('/pdbseed/','/pdb_sales/');


ALTER PLUGGABLE DATABASE pdb_sales OPEN READ WRITE;

ALTER SESSION SET CONTAINER = pdb_sales;


-- 2) إنشاء المستخدم

CREATE USER sales_app IDENTIFIED BY "Sales_123#"

DEFAULT TABLESPACE users

QUOTA UNLIMITED ON users;


GRANT CREATE SESSION TO sales_app;


-- 3) إنشاء الدور

CREATE ROLE sales_writer;

GRANT SELECT, INSERT, UPDATE ON sales.orders TO sales_writer;


-- 4) إسناد الدور

GRANT sales_writer TO sales_app;

```


---


### 6) نصائح أمان سريعة


1. لا تمنح صلاحية `DBA` إلا لمن يحتاجها فعلاً. 

2. استخدم `PROFILE` لتقييد عدد المحاولات الخاطئة وتعقيد كلمة المرور. 

3. فعِّل `PASSWORD EXPIRE` عند إنشاء الحساب لإجبار المستخدم على تغييرها أول مرة. 

4. استخدم `CONTAINER=ALL` أو `CONTAINER=CURRENT` بوعي لتجنب منح صلاحيات زائدة. 

5. راقب السجلات الدورية: 

   ```sql

   SELECT * FROM dba_audit_session WHERE returncode != 0;

   ```


---


### 7) ملفات دعم مفيدة من Oracle


- Database Administrator’s Guide (PDF)   

- CREATE USER Syntax & Examples   

- Privileges & Roles Best Practice





oracle database scripts 1