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新增策略(需在sys下新增):( 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;
begin該策略和函式搭配,限制了如果關於emp表的dml語句中未包含where下自動新增where dept=10的條件,示例如下: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;
刪除策略:
beginsys.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 ...