اهدای مجوز insert و update در سطح ستون

مجوزهای insert و update را می توان در سطح ستونهای یک جدول به کاربران اهدا نمود.

دستور grant در مثال زیر، مجوز اجرای دستور update بر روی ستونهای name و last_name از جدول sys.mytbl را به کاربر usef اهدا می کند:

SQL> create table sys.mytbl(id number,name varchar2(9),last_name varchar2(9));

Table created

SQL> insert into sys.mytbl values(1,’vahid’,’usefzadeh’);

1 row inserted

SQL> commit;

Commit complete

SQL> grant update(name,last_name) on mytbl to usef;

Grant succeeded

پس از اهدای مجوز update به کاربر usef، این کاربر می تواند اطلاعات این دو ستون را تغییر دهد:

SQL> conn usef/q

Connected.

SQL> update sys.mytbl set last_name=’rezai’ where last_name=’usefzadeh’;

1 row updated

البته کاربر usef امکان بروزرسانی ستون id را نخواهد داشت:

SQL> update sys.mytbl set id=2 where id=1;

ORA-01031: insufficient privileges

همچنین کاربر usef نمی تواند مقادیر فعلی ستونهای name و last_name را ببیند:

SQL> select last_name from sys.mytbl;

ORA-01031: insufficient privileges

نکته: برای اهدای مجوز select در سطح ستون به یک role و یا کاربر، می توان از view استفاده کرد.

اگر بخواهیم در کنار مجوز update، مجوز insert بر روی ستون name را هم به کاربر usef اهدا کنیم، می توانیم دستور زیر را اجرا کنیم:

SQL> grant update(name,last_name),insert(name) on mytbl to usef;

Grant succeeded

همچنین استفاده از عبارت WITH GRANT OPTION در انتهای دستور قبلی سبب خواهد شد تا کاربر usef بتواند این مجوز را به کاربر دیگری اهدا کند:

SQL> show user

User is “SYS”

SQL> grant update(name,last_name),insert(name) on mytbl to usef WITH GRANT OPTION;

Grant succeeded

SQL> show user

User is “usef”

SQL> grant update(name,last_name),insert(name) on sys.mytbl to ali WITH GRANT OPTION;

Grant succeeded

برای سلب مجوزهایی که در سطح ستون به یک کاربر اهدا شده، باید دستور revoke را در سطح جدول اجرا نمود(نه در سطح ستون):

SQL> revoke update(name,last_name) on sys.mytbl from usef;

ORA-01750: UPDATE/REFERENCES may only be REVOKEd from the whole table, not by column

SQL> revoke update on sys.mytbl from usef;

Revoke succeeded

با کمک ویوی DBA_COL_PRIVS می توان لیست مجوزهای اهدا شده در سطح ستون را مشاهده نمود. برای مثال، دستور زیر، تمامی مجوزهای در سطح ستونی که به کاربر usef اهدا شده است را نمایش خواهد داد:

select * from DBA_COL_PRIVS where grantee=’USEF’;

ارتباط با نویسنده مطلب:vahidusefzadeh@ کانال تخصصی اوراکل و لینوکس: OracleDB@

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد.