Oracle策略相關

2022-03-06 03:34:06 字數 1858 閱讀 6876

oracle策略可以限制查詢、修改、刪除、新增等操作,剛接觸,對查詢做乙個測試:

參照 用法如下:

begin

-- call the procedure

sys.dbms_rls.add_policy(object_schema => :資料表(或檢視)所在的schema名稱/使用者,

object_name => :資料表(或檢視)的名稱,

policy_name => :policy的名稱

function_schema => :返回where子句的函式所在schema名稱/使用者,

policy_function => :返回where子句的函式名稱,

statement_types => :要使用該policy的dml型別,如'select,insert,update,delete',

update_check => 僅適用於statement_type為'insert,update',值為'true'或'false',

enable => 是否啟用,值為'true'或'false',

static_policy => 預設值為false。如果它被設定為true則所有使用者啟用該策略,sys或特權使用者例外。

policy_type => :預設值是null,意味著static_policy的值決定,在這裡指定任何策略將覆蓋static_policy的值。

long_predicate => long_predicate,

sec_relevant_cols => :敏感的欄位名稱,

sec_relevant_cols_opt => :設定為dbms_rls.all_rows來顯示所有的行,敏感的列的值為null);

end;

建立函式:

create or replace function f_policy

( p_owner in varchar2,--兩個引數必須要有,名字可以不一樣

p_object in varchar2

) return varchar2 as

v_sql varchar2(2000);

begin

v_sql := lower(sys_context('userenv', 'current_sql', 4000));

if instr(v_sql, ' where ') = 0 then

return 'deptno=10';

end if;

return '';

end;

新增策略(需在sys下新增):

begin

dbms_rls.add_policy(object_schema => 'scott', object_name => 'emp',

policy_name => 'sal', function_schema => 'scott',

policy_function => 'f_policy', sec_relevant_cols => 'sal');

end;

該策略和函式搭配,限制了如果關於emp表的dml語句中未包含where下自動新增where dept=10的條件,示例如下:

刪除策略:

begin  

sys.dbms_rls.drop_policy(object_schema => 'scott',

object_name => 'emp',

policy_name => 'sal');

end;

Oracle 優化策略

1.普通表轉分割槽表 大表 2g,多於1000萬條記錄 2.索引 減少非索引掃瞄 建立索引在約束條件列,選擇性高列,被驅動表 內錶 連線列 驅動表的連線列不一定 結果集在總行數的2 4 應建索引 編號,日期,外來鍵 函式索引 query rewrite integrity trusted,query...

Oracle鎖定策略總結

oracle鎖定策略總結 1.oracle只在修改時才對資料加行級鎖。正常情況下不會公升級到塊級鎖或表級鎖 不過兩段提交期間的一段很短的時間內除外,這是乙個不常見的操作 2.如果只是讀資料,oracle絕不會對資料鎖定。不會因為簡單的讀操作在資料行上鎖定。3.寫入器 writer 不會阻塞讀取器 r...

oracle策略POLICY學習

oracle策略policy學習 01 1 建立測試表 02create table test policy03 04 username varchar2 10 05 password number 10 06 07insert into t policy values a 30 08insert ...