oracle列級許可權控制
客戶有個需求,一張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 wner='STREAM' where id =1;
update auth.test set wner='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.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26547977/viewspace-753036/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE FGAC(細粒度許可權控制)(轉)Oracle
- Elasticsearch 許可權控制Elasticsearch
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- ORACLE許可權Oracle
- SAP PLM文件許可權物件的控制級別物件
- Linux許可權控制Linux
- Appfuse:許可權控制APP
- oracle 許可權集合Oracle
- oracle 許可權管理Oracle
- Oracle許可權(一)Oracle
- oracle許可權全集Oracle
- Laravel實現許可權控制Laravel
- mysql 許可權控制筆記MySql筆記
- Linux的許可權控制Linux
- .NET 程式許可權控制、獲得管理員許可權程式碼
- Oracle 使用者、物件許可權、系統許可權Oracle物件
- Linux 系統中的超級許可權的控制Linux
- 命令列快速提示:許可權命令列
- Linux提權-許可權升級Linux
- Oracle 許可權(grant、revoke)Oracle
- Oracle系統許可權Oracle
- Oracle檢視許可權Oracle
- 【許可權管理】Oracle中檢視、回收使用者許可權Oracle
- 資料分析的許可權控制
- 許可權控制及AOP日誌
- Java 訪問許可權控制(6)Java訪問許可權
- vue-router控制路由許可權Vue路由
- 下載許可權控制機制
- 資料安全之許可權控制
- Solaris下控制ftp的許可權FTP
- vue要做許可權管理該怎麼做?如果控制到按鈕級別的許可權怎麼做?Vue
- HIVE的許可權控制和超級管理員的實現Hive
- Oracle資料庫使用者許可權控制 - Role - SynonymOracle資料庫
- 命令列生成Dcat許可權列表命令列
- 小知識:軟體開發的許可權控制和許可權驗證
- 一對一原始碼,前端頁面許可權和按鈕許可權控制原始碼前端
- MYSQL學習筆記13: DCL許可權控制(使用者許可權操作)MySql筆記