如果我有一個表和定義的策略,那麼是否需要重新定義策略,如果我刪除並重新創建表或更改它,提供表格的改變或重新創建不會改變函數需要看到的元素?在oracle中更改或刪除重新創建表會影響在其上定義的策略
回答
"do I need to redefine the policy if I drop and recreate the table"
是的。我們來創建一個策略。
SQL> exec dbms_rls.add_policy('APC', 'T23', 'DEPTPOL', 'APC', 'security_policies.get_deptno_predicate')
PL/SQL procedure successfully completed.
SQL> select count(*) from user_policies;
COUNT(*)
----------
1
SQL> exec security_policies.set_deptno(20)
PL/SQL procedure successfully completed.
SQL> select count(*) from t23;
COUNT(*)
----------
6
SQL>
這樣工作。但是,如果我們刪除並重新創建表(使用備份我提前準備好了)...變更表不降
SQL> drop table t23
2/
Table dropped.
SQL> create table t23 as select * from t23a
2/
Table created.
SQL> select count(*) from t23;
COUNT(*)
----------
11
SQL> exec security_policies.set_deptno(20)
PL/SQL procedure successfully completed.
SQL> select count(*) from t23;
COUNT(*)
----------
11
SQL> SQL> select count(*) from user_policies;
COUNT(*)
----------
0
SQL>
"So the question is if I must redefine the policy even if I will not change anything in the definition."
號提供的變化並不能否定生成的謂詞策略:
SQL> exec dbms_rls.add_policy('APC', 'T23', 'DEPTPOL', 'APC', 'security_policies.get_deptno_predicate')
PL/SQL procedure successfully completed.
SQL> alter table t23 modify deptno number(3,0)
2
SQL> desc t23
Name Null? Type
----------------------------------------- -------- ----------------------------
NAME VARCHAR2(12 CHAR)
ID NUMBER
AGE NUMBER(4)
DEPTNO NUMBER(2)
SQL> alter table t23 modify deptno number(3,0)
2/
Table altered.
SQL> exec security_policies.set_deptno(20)
PL/SQL procedure successfully completed.
SQL> select count(*) from t23;
COUNT(*)
----------
6
SQL>
請注意,更改修改了由謂詞測試的列,並且策略仍然有效。
"does a 'CREATE OR REPLACE VIEW' statement drops and recreates it or does it alter it?"
讓我們試一下:
SQL> create view v23 as select * from t23;
View created.
SQL> exec dbms_rls.add_policy('APC', 'V23', 'DEPTPOLV', 'APC', 'security_policies.get_deptno_predicate')
PL/SQL procedure successfully completed.
SQL> exec security_policies.set_deptno(10)
PL/SQL procedure successfully completed.
SQL> select count(*) from v23;
COUNT(*)
----------
5
SQL> create or replace view v23 as select name, age from t23;
View created.
SQL> select count(*) from v23;
select count(*) from v23
*
ERROR at line 1:
ORA-28113: policy predicate has error
SQL>
好了,所以這是一個錯誤,因爲該視圖的新的投影不包括在謂詞列。但是它表明,這種方法仍然存在。所以我們來修正這個錯誤:
SQL> create or replace view v23 as select name, age, deptno from t23;
View created.
SQL> select count(*) from v23;
COUNT(*)
----------
5
SQL>
最後一個細節:如果一個視圖存在,'CREATE OR REPLACE VIEW'語句是否會刪除並重新創建它或者是否會改變它? 如果它是第一個,那麼我需要重新定義策略,如果它是那麼我想政策仍然存在......我是正確的?(政策是定義在一個視圖,這是他們通過CREATE或REPLACE STM更改的視圖) – Paralife 2010-08-19 12:19:00
謝謝。如果我能我upvote你1000只是爲了你的回答。順便說一句,你怎麼做?我是ñ你如何找到花時間解釋你何時可以花費更多時間去發現的意願?我發現自己非常渴望探索和創造,但從來沒有解釋,除了當我作爲一種手段來提煉我的知識解釋......這是非常糟糕的,但我覺得很難擺脫這種習慣。這不是來自私,只是當桌子上沒有什麼新東西的時候,我不能幫助,但拖延...... – Paralife 2010-08-19 13:07:05
個人而言,我認爲向其他人解釋某些東西是增強自己學習的好方法。其次,使用真實的例子(如APC)是檢查自己的假設是否正確的好方法。正如Tom Kyte不斷提醒我們的那樣,我們對Oracle 9的假設在10,11等方面可能是錯誤的 - 沒有什麼比檢查而不是信任。 – JulesLt 2010-08-19 14:11:53
- 1. P4 Perforce取消刪除或重新創建刪除更改列表
- 2. 更新表或刪除並重新創建?
- 3. 刪除和更新級聯不會影響SQLite中的子表上?
- 4. .NET 4.0中CAS策略更改的影響?
- 5. 在SQL Server中刪除並創建表內事務,影響其他進程
- 6. Subversion - 在刪除/重新創建目錄後協調更改
- 7. 在makefile中指定重建策略
- 8. 影響其他組的S3資源上的AWS IAM組策略?
- 9. Cordova - 刪除內容安全策略 - 影響?
- 10. 從表中刪除行會如何影響其索引?
- 11. 如何在parse.com上重新創建已刪除的安裝表
- 12. 在刪除和重新創建表時維護表訪問的最佳流程策略
- 13. 「禁止保存需要的表更改重新創建」負面影響
- 14. FragmentPagerAdapter不會在方向更改上重新創建碎片?
- 15. problema在oracle中創建觸發器來更新其他表
- 16. Hibernate:包 - 更新或刪除操作時的性能影響?
- 17. 是否在alter table drop列上刪除並重新創建表?
- 18. 刪除並重新創建單個表格(在Heroku上)
- 19. Oracle視圖不會影響基礎表結構更改
- 20. 在構建設置中更改產品名稱是否會影響更新?
- 21. mysql - 更新,刪除,更改,重命名,創建,修復=消失
- 22. 刪除所有舊錶並在dbflow中重新創建表
- 23. 重新創建Oracle DUAL表
- 24. 更快:重新創建或清除()?
- 25. 如何影響Azure C#中的GetSubscription()和SubscriptionExists()的重試策略#
- 26. 重新創建已刪除的用戶在ASP.Net會員
- 27. 在cassandra中更改或創建新表以添加新列
- 28. 在MySQL中更新/刪除並獲取受影響的行ID列表?
- 29. Ormlite 4.9上創建表,並創建或更新功能改變
- 30. 策略創建
是的,我確信放棄一個表會破壞綁定到它的所有策略。但是,就變化而言,我不確定。您能否更具體地瞭解政策,表格模式以及您想要更改的內容? – XstreamINsanity 2010-08-19 11:28:10
我的一些同事在表格上改變了一個視圖,所以列被定義爲to_date(B)而不是B.現在我對這個視圖的策略並不關心這個列。它只是說「如果用戶是'USERNAME',那麼返回謂詞:'where user_id = user'。所以它不會被修改。所以問題是如果我必須重新定義策略,即使我不會改變任何東西這個定義,我也擴展了我的問題,所以如果發生drop-create,我將不得不重新創建策略,現在我不能測試它(我正在度假)並且沒有任何訪問權限,所以我想知道它們是否必須 – Paralife 2010-08-19 11:41:02