Schema Privilege در اوراکل 23c

تا قبل از اوراکل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
…

ارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:vahidusefzadeh@gmail.com

Comment (1)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *