虛擬專用資料庫VPD應用
系統中有個需求,需要把一個表裡的信用卡號欄位進行許可權管理,大家討論再三,說TDE不太好,因為需求希望能夠讓有些使用者可以訪問這個表,但是卡號欄位讀不到東西。有些使用者可以直接讀取該欄位的內容。
我給了一個建議,使用VPD,基於列的VPD可以滿足這樣的需求。
以下是一個樣例,供參考。
--create user and grant privileges
create user test identified by test;
grant connect,resource to test;
grant execute dbms_rls to test;
create user credit_test identified by oracle;
grant connect,resource to credit_test;
grant create synonym to credit_test;
--create samples tables
SQL> create table credit_card_test as select object_id card_id,object_name card_name,object_id card_pwd from all_objects ;
Table created.
SQL> select count(*) from all_objects;
COUNT(*)
----------
4876
SQL> select * from credit_card_test where rownum<10;
CARD_ID CARD_NAME CARD_PWD
---------- ------------------------------ ----------
258 DUAL 258
259 DUAL 259
311 SYSTEM_PRIVILEGE_MAP 311
313 SYSTEM_PRIVILEGE_MAP 313
314 TABLE_PRIVILEGE_MAP 314
316 TABLE_PRIVILEGE_MAP 316
317 STMT_AUDIT_OPTION_MAP 317
319 STMT_AUDIT_OPTION_MAP 319
605 MAP_OBJECT 605
9 rows selected.
SQL> desc credit_card_test
Name Null? Type
----------------------------------------- -------- ----------------------------
CARD_ID NOT NULL NUMBER
CARD_NAME NOT NULL VARCHAR2(30)
CARD_PWD NOT NULL NUMBER
--create synonyms or roles using credit_test
create or replace synonym credit_card_test for test.credit_card_test;
--using test(table owner account)
--add_policy create_rls.sql
exec dbms_rls.add_policy(object_schema => 'test',object_name => 'credit_card_test',policy_name => 'card_pwd_policy',function_schema =>'test',policy_function => 'rls_encryption',statement_types =>'select',policy_type => dbms_rls.CONTEXT_SENSITIVE,sec_relevant_cols=>'card_pwd',sec_relevant_cols_opt=>dbms_rls.all_rows);
--add function create_rls_f.sql
create or replace function rls_encryption (p_owner in varchar2,p_obj in varchar2)
return varchar2
is v_flag varchar2(1000);
begin
if(p_owner=USER ) then
v_flag:=null;
else
v_flag:='1=2';
end if;
return v_flag;
end;
--drop policy drop_rls.sql
exec dbms_rls.drop_policy(object_schema => 'test',object_name => 'credit_card_test',policy_name => 'card_pwd_policy');
SQL> @drop_rls.sql
PL/SQL procedure successfully completed.
SQL> @create_rls.sql
PL/SQL procedure successfully completed.
SQL> @create_rls_f.sql
Function created.
SQL> conn test/test
seConnected.
SQL> lect * from credit_card_test where rownum<10;
CARD_ID CARD_NAME CARD_PWD
---------- ------------------------------ ----------
258 DUAL 258
259 DUAL 259
311 SYSTEM_PRIVILEGE_MAP 311
313 SYSTEM_PRIVILEGE_MAP 313
314 TABLE_PRIVILEGE_MAP 314
316 TABLE_PRIVILEGE_MAP 316
317 STMT_AUDIT_OPTION_MAP 317
319 STMT_AUDIT_OPTION_MAP 319
605 MAP_OBJECT 605
9 rows selected.
SQL> conn credit_test/oracle
Connected.
SQL> select * from credit_card_test where rownum<10;
CARD_ID CARD_NAME CARD_PWD
---------- ------------------------------ ----------
258 DUAL
259 DUAL
311 SYSTEM_PRIVILEGE_MAP
313 SYSTEM_PRIVILEGE_MAP
314 TABLE_PRIVILEGE_MAP
316 TABLE_PRIVILEGE_MAP
317 STMT_AUDIT_OPTION_MAP
319 STMT_AUDIT_OPTION_MAP
605 MAP_OBJECT
9 rows selected.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-749509/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 虛擬專用資料庫(VPD)Oracle資料庫
- Oracle安全 - 虛擬專用資料庫 VPDOracle資料庫
- Oracle 10g 新特性之虛擬專用資料庫(轉)Oracle 10g資料庫
- 應用適配資料庫還是資料庫適配應用資料庫
- 資料庫應用管理資料庫
- Loopback for Mac(虛擬音訊應用)OOPMac音訊
- 虛擬音訊應用:Loopback Mac音訊OOPMac
- 碾碎泡沫看虛擬化應用
- 應用整合虛擬化解決方案
- 虛擬倉庫在廠外物料管理上的應用
- 應用虛擬化:“虛”減成本 “實”增效率
- oracle資料庫資料字典應用Oracle資料庫
- 資料庫命令的應用資料庫
- Mysql資料庫應用(一)MySql資料庫
- 資料庫應用管理(zt)資料庫
- ASP與資料庫應用資料庫
- BGP/MPLS 虛擬專用網路 Option B
- 【專訪】Oracle資料庫在航空領域的應用Oracle資料庫
- 國產網路卡:虛擬化應用,民族品牌
- 伺服器虛擬化的應用前景伺服器
- EWEBS:三招打造安全應用虛擬化Web
- 資料庫應用優化(一)資料庫優化
- 3.07 EOS資料庫應用資料庫
- 資料庫在資料分析中如何應用資料庫
- BGP/MPLS 虛擬專用網路 Option B RR
- 資料庫測試專用術語資料庫
- 虛擬化應用由“虛”入“實”的五步秘訣
- 徹底釋放虛擬化,Docker的應用Docker
- 殊途同歸:SaaS與應用虛擬化薦
- VB6基本資料庫應用(二):建立資料庫資料庫
- 圖資料庫及應用場景資料庫
- 資料庫應用開發一、vs資料庫
- Web應用離不開資料庫Web資料庫
- Oracle資料庫SCN號的應用Oracle資料庫
- kylix 資料庫應用簡介 (轉)資料庫
- 大型資料庫應用 作業(一)資料庫
- 通過SQL Server資料庫映象保護虛擬資料庫ICSQLServer資料庫
- 虛擬機器遷移技術原理與應用虛擬機