تا قبل از اوراکل23cء، privilegeها به سه نوع object، system و administrative قابل تقسیم بودند و برای آنکه کاربری صرفا به اشیاء یک اسکیما دسترسی داشته باشد به ناچار می بایست از object privilegeها استفاده کرد که این محدودیت را قبلا در مستندی شرح داده ایم.
رجوع شود به : اهدای مجوز در سطح اسکیما در اوراکل و پستگرس
در نسخه 23c قابلیت جدیدی در این زمینه ایجاد شد و اوراکل نوع دیگری از privilege به نام schema privilege را ارائه کرد که بر اساس آن می توان دسترسی به تمامی اشیاء{موجود و آینده} یک اسکیما را صرفا با اجرای یک دستور به یک کاربر(و یا role) اهدا کرد و یا به کاربر این امکان را داد تا برای اسکیما شی جدیدی بسازد.
schema privilege با کمک system privilegeها کار می کند مثلا می توانیم دسترسی select any table که یک system Privilege محسوب می شود را بر روی یک اسکیما به یک کاربر اهدا کنیم. بدیهی است که schema privilege به نسبت system privilege از دادن دسترسی های اضافه جلوگیری خواهد.
در ادامه با ارائه چند مثال، بیشتر با این قابلیت جدید آشنا خواهیم شد.
1:با اجرای دستور زیر، کاربر usef قادر خواهد بود جداول اسکیمای behnam را select و یا در آنها اطلاعاتی درج کند:
SQL> GRANT SELECT ANY TABLE,INSERT ANY TABLE ON SCHEMA behnam TO USEF; Grant succeeded.
با ورود به دیتابیس از طریق کاربر usef این مجوز را بررسی می کنیم:
SQL> show user USER is "USEF" SQL> select * from SESSION_SCHEMA_PRIVS; PRIVILEGE SCHEMA -------------------- ---------- INSERT ANY TABLE BEHNAM SELECT ANY TABLE BEHNAM
SQL> select count(*) from behnam.tbl1; COUNT(*) ---------- 80 SQL> insert into behnam.tbl1 select * from behnam.tbl1; 80 rows created.
SQL> delete behnam.tbl1; ORA-41900: missing DELETE privilege on "BEHNAM"."TBL1"
دسترسی select any table علاوه بر table، به کاربر دسترسی به view را هم خواهد داد:
SQL> select count(*) from BEHNAM.vw_tbl1; COUNT(*) ---------- 160
2: برای آنکه کاربر usef بتواند این دسترسی را به کاربر دیگری بدهد، باید با عبارت WITH ADMIN OPTION مجوز را به این کاربر اهدا کنیم:
SQL> show user USER is "SYS" SQL> GRANT SELECT ANY TABLE,INSERT ANY TABLE ON SCHEMA behnam TO USEF WITH ADMIN OPTION; Grant succeeded.
SQL> show user USER is "USEF" SQL> GRANT SELECT ANY TABLE,INSERT ANY TABLE ON SCHEMA behnam TO ali; Grant succeeded. SQL> select GRANTEE,PRIVILEGE,SCHEMA,ADMIN_OPTION from DBA_SCHEMA_PRIVS; GRANTEE PRIVILEGE SCHEMA ADM ---------- -------------------- ---------- --- ALI INSERT ANY TABLE BEHNAM NO ALI SELECT ANY TABLE BEHNAM NO USEF INSERT ANY TABLE BEHNAM YES USEF SELECT ANY TABLE BEHNAM YES
3: با دستور زیر مجوز ساخت جدول در اسکیمای behnam را به role r1 خواهد داد:
SQL> GRANT CREATE ANY TABLE ON SCHEMA behnam TO r1; Grant succeeded. SQL> select ROLE,PRIVILEGE,SCHEMA,ADMIN_OPTION from ROLE_SCHEMA_PRIVS; ROLE PRIVILEGE SCHEMA ADM ---------- -------------------- ---------- --- R1 CREATE ANY TABLE BEHNAM NO
4: schema privilegeبرای شمای sys کاربرد ندارد:
SQL> show user USER is "SYS" SQL> create table systbl(id number); Table created. SQL> insert into systbl values(1); 1 row created. SQL> commit; Commit complete. SQL> select * from sys.systbl; ID ---------- 1 SQL> GRANT SELECT ANY TABLE ON SCHEMA sys TO usef; Grant succeeded.
SQL> show user USER is "USEF" SQL> select * from SESSION_SCHEMA_PRIVS; PRIVILEGE SCHEMA ------------------------------ ---------- SELECT ANY TABLE SYS SQL> select * from sys.systbl; ORA-00942: table or view does not exist
*بعضی از system privilegeها برای schema privilege غیرقابل استفاده و بعضا بی معنی هستند برای نمونه:
CREATE TABLESPACE ALTER TABLESPACE CREATE PROFILE ALTER PROFILE ADMINISTER SQL TUNING SET …
Comment (1)