oracle列級權限控制

發表于:2013-12-31來源:IT博客大學習作者:db_dream點擊數: 標簽:oracle
客戶有個需求,一張150多個字段的表,客戶要求只將部分字段給掃描公司的人看,這個需求用視圖就可以很容易實現,客戶又要求,這些字段,掃描公司只可以修改其中的個別字段,我之前還真沒遇到這樣在列級別做權限控制的需求,做了個實驗,感覺很有意思,記錄下

  客戶有個需求,一張150多個字段的表,客戶要求只將部分字段給掃描公司的人看,這個需求用視圖就可以很容易實現,客戶又要求,這些字段,掃描公司只可以修改其中的個別字段,我之前還真沒遇到這樣在列級別做權限控制的需求,做了個實驗,感覺很有意思,記錄下測試過程。

  1.創建測試表并插入點測試數據:

  SQL> create table test( id number,table_name varchar2(50),

  owner varchar2(50),TABLESPACE_NAME varchar2(50));

  Table created.

  SQL> insert into test select rownum,table_name,owner,

  TABLESPACE_NAME from dba_tables;

  5490 rows created.

  SQL> commit;

  Commit complete.

  2.創建測試用戶并賦予基本權限:

  SQL> CONN / AS SYSDBA

  Connected.

  SQL> create user stream identified by stream default tablespace users;

  User created.

  SQL> grant connect,resource to stream;

  Grant succeeded.

  3.賦予測試用戶列級權限:

  SQL> conn auth/auth

  Connected.

  SQL> grant update (id) on test to stream;

  Grant succeeded.

  SQL> grant insert (table_name) on test to stream;

  Grant succeeded.

  SQL>

  SQL> grant select on test to stream;

  Grant succeeded.

  4.查詢列級權限設置信息:

  SQL> select GRANTEE,OWNER,TABLE_NAME,COLUMN_NAME,GRANTOR,PRIVILEGE,

  GRANTABLE from user_col_privs;

  GRANTEE OWNER TABLE_NAME COLUMN_NAME GRANTOR PRIVILEGE GRA

  ------- ----- ---------- ----------- ------- --------- ---

  STREAM AUTH TEST TABLE_NAME AUTH INSERT NO

  AUT AUTH TEST ID AUTH INSERT NO

  AUT AUTH TEST ID AUTH UPDATE NO

  STREAM AUTH TEST ID AUTH UPDATE NO

  5.登陸測試用戶驗證SELECT權限:

  SQL> conn stream/stream

  Connected.

  SQL> select * from(select * from auth.test order by 1) where rownum< =10;

  ID TABLE_NAME OWNER TABLESPACE

  ---------- -------------------- ---------- ----------

  1 ICOL$ SYS SYSTEM

  2 IND$ SYS SYSTEM

  3 COL$ SYS SYSTEM

  4 CLU$ SYS SYSTEM

  5 TAB$ SYS SYSTEM

  6 LOB$ SYS SYSTEM

  7 COLTYPE$ SYS SYSTEM

  8 SUBCOLTYPE$ SYS SYSTEM

  9 NTAB$ SYS SYSTEM

  10 REFCON$ SYS SYSTEM

  10 rows selected.

  6.驗證列級UPDATE權限控制:

  SQL> update auth.test set owner='STREAM' where id =1;

  update auth.test set owner='STREAM' where id =1

  *

  ERROR at line 1:

  ORA-01031: insufficient privileges

  可見,不允許修改測試表的OWNER字段的值,報ORA-01031:權限不足,由于上文賦予了測試用戶對修改測試表ID字段的修改權限,修改ID字段是可以的。

  SQL> update auth.test set id=10 where id=1;

  1 row updated.

  SQL> rollback;

  Rollback complete.

  7.驗證列級INSERT權限控制:

  SQL> insert into auth.test values(1,'stream','stream','users');

  insert into auth.test values(1,'stream','stream','users')

  *

  ERROR at line 1:

  ORA-01031: insufficient privileges

  可見,整行插入是不被允許的,也是權限不夠,由于上文賦予了測試用戶對修改測試表TABLE_NAME字段的插入權限,所以插入TABLE_NAME字段是可以的,但是前提是其他字段沒有NOT NULL約束。

  SQL> insert into auth.test(table_name) values ('stream');

  1 row created.

  SQL> rollback;

  Rollback complete.

原文轉自:http://blogread.cn/it/article/5558

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97