• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 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

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>