vpd全稱virtual private database,這個技術提供了對資料庫資訊的細粒度訪問控制。關於vpd的更多描述性資訊可通過oracle官方文件獲得:
通過乙個具體案例,體驗一下vpd帶給我們的功能特點。
1.初始化環境
構造表t,其中包含乙個欄位x。
sec@ora10g> create table t (x number);
sec@ora10g> insert into t values (1);
sec@ora10g> insert into t values (2);
sec@ora10g> insert into t values (10001);
sec@ora10g> insert into t values (10002);
sec@ora10g> commit;
sec@ora10g> select * from t;
x----------12
10001
10002
2.問題場景描述
禁止查詢t表中x列值大於10000的資料。
3.實現方法一:使用檢視
這種方法可能是大家都很容易想到的,實現起來相對簡單。但無法真正做到禁止訪問基礎表。
sec@ora10g> create view v_t as select * from t where x <=10000;
view created.
sec@ora10g> select * from v_t;
x----------12
此時如果直接查詢基礎表t,仍然可以獲得說有的資料。
sec@ora10g> select * from t;
x----------12
10001
10002
4.實現方法二:使用vpd
1)建立vpd需要的函式,這裡給出的名字是f_limited_query_t。
create or replace function f_limited_query_t (s_schema in varchar2,
s_object in varchar2)
return varchar2
asbegin
return 'x <= 10000';
end;
/function created.
2)將函式與需要保護的表進行關聯
begin
dbms_rls.add_policy (object_schema => 'sec',
object_name => 't',
policy_name => 'policy_limited_query_t',
function_schema => 'sec',
policy_function => 'f_limited_query_t');
end;
/pl/sql procedure successfully completed.
3)驗證vpd效果
此時在sec使用者下直接查詢t表,獲得的也僅僅是我們要求的資料範圍。
sec@ora10g> select * from t;
x----------12
即便是連線到其他使用者依然無法獲得sec使用者下t表隱藏掉的資料。
sec@ora10g> conn secooler/secooler
connected.
secooler@ora10g> select * from sec.t;
x----------12
只有sys使用者有權檢視到sec使用者下t表的全部資料
sec@ora10g> conn / as sysdba
connected.
sys@ora10g> select * from sec.t;
x----------12
10001
10002
4)去掉vpd對資料訪問的限制
我們可以使用dbms_rls.drop_policy來完成這個任務。
secooler@ora10g> conn sec/sec
connected.
begin
dbms_rls.drop_policy (object_schema => 'sec',
object_name => 't',
policy_name => 'policy_limited_query_t');
end;
/pl/sql procedure successfully completed.
此時可獲得t表的全部資料
sec@ora10g> select * from t;
x----------12
10001
10002
5.小結
這裡給出的是vpd最簡單的一種使用方法,在實際應用中需求可能會比較複雜,但通過分析並仔細定製,vpd都可以勝任。
VPD技術粗解
vpd技術,dba policies這張表中儲存了啟用vpd技術的表 select from dba policies where object name upper pa projects 給某張表啟用vpd 1.create data create table t x number insert...
elk許可權控制 Kibana訪問許可權控制
elk平台搭建完成後,由於kibana的服務也是暴露在外網,且預設是沒有訪問限制的 外部所有人都可以訪問到 這明顯不是我們想要的,所以我們需要利用nginx接管所有kibana請求,通過nginx配置將kibana的訪問加上許可權控制,簡單常見的方式可以使用如下三種方式 方案一 利用nginx使用者...
spring 許可權控制
首先第一件事情是你需要增加下面的過濾器宣告到你的web.xml 檔案 springsecurityfilterchain org.springframework.web.filter.delegatingfilterproxy springsecurityfilterchain 這提供了乙個鉤子到s...