مجوزهای 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’;