منبع اصلی نوشتار زیر در این لینک قرار دارد

سطوح دسترسی

می‌خواهیم در مورد مفاهیم oracle users, security, administration صحبت کنیم.

اگر محتوایی در داخل یوزر است (schema باشه یوزر) بدون cascade یوزر پاک نمی‌شه و حتماً باید با عمل cascade یوزر پاک بشه.

drop user mghaffari cascade;

اوراکل روی بحث محدودیتهای دسترسی در حالت دوم قرار دارد.

۲ نوع دسته‌بندی امنیتی داریم:

  1. همه چیز باز است مگر غیر آن ثابت شود
  2. همه چیز بسته است مگر غیر آن ثابت شود
create user mghaffari identified by 123456;
grant connect,dba to mghaffari;

برای بازپس‌گیری نقش از دستور revoke استفاده می‌کنیم:

revoke connect from mghaffari;
revoke dba from mghaffari;

در دستور پایین یک نقش ایجاد می‌کنیم که فقط دارای دسترسی select‌ در جدول t1‌ است:

create role modir;
grant select on t1 to modir;

یک یوزر دیگه ایجاد می‌کنیم:

create user ehsan identified by 123456;
grant connect, dba to ehsan;

نکته: اگر از یک schema دیگه بخوایم به یک schema دیگه table بسازیم باید اسم schema رو قبل اسم آبجکت بیاریم.

create table ehsan.t1(id number, name varchar2(20));
grant select on ehsan.t1 to modir;
grant modir to mghaffari;

چند insert بر روی جدول t1‌ می‌زنیم، 

insert into ehsan.t1 values(1, 'mahdi');
insert into ehsan.t1 values(2, 'mohammad');
commit;
grant connect to mghaffari;
connect mghafafri;
select * from ehsan.t1;
ID NAME
------------- ---------------------
1 mahdi
2 mohamamd
delete from ehsan.t1;
EROOR at line 1:
ORA-01031: insufficient privilages
connect system
grant delete on ehsan.t1 to modir;
connect mghaffari
delete from ehsan.t1;
2 rows deleted.

نکته: در اوراکل می‌توان حتی بر روی یک فیلد سطح دسترسی رو قرار داد. (مثلاً فقط بتونه روی name جدول t1‌مطلق به یوزر ehsan تغییرات انجام بده یا ببینه (select, insert, update, delete) و حتی می‌توان بر روی ۲ کاراکتر اول فیلد name جدول t1 تغییرات انجام بده یا ببینه (select, insert, update, delete)

نکته: سطوح دسترسی بار اضاقه‌ای بر روی دیتابیس ندارند چون به صورت پیش‌فرض همه‌جا بسته‌ است مگر غیر آن ثابت شود.

WITH ADMIN OPTION

با این آپشن می‌توان گفت یک نقش که به یوزری داده می‌شود توسط آن یوزر امکان اعطای آن قانون به یوزرهای دیگر وجود داشته باشد.

(یوزر بتونه نقش خودش رو به یک یوزر دیگه هم بده)

نکته: در مورد نقش dba این حرف صادق نیست، چون نقش dba به صوزت خودکار with admin option است و شما وقتی یک یوزر را dba می‌کنید آن یوزر اجازه ایجاد یا دادن دسترسی dba را به یوزرهای دیگر دارد.

GRANT MODIR TO MGAHFFARI WITH ADMIN OPTION;

در مورد نقش‌های معمولی موقع اعطای دسترسی که خودتان ایجاد می‌کنید شما حق دارید بگید with admin option باشند یا نباشند.

WITH GRANT OPTION

اگر من ROLE رو از کاربری گرفتم ولی اون کاربر اون ROLE رو به کاربرهای دیگه‌ای از قبل اعطا کرده بود همزمان از بقیه نیز موقع گرفتن ROLE از کاربر ROLE گرفته بشه.

GRANT MODIR TO MGAHFFARI WITH GRANT OPTION;