Si j'ai une table et une politique définie dessus, dois-je redéfinir la politique si je lâche et recréer la table ou la modifier, à condition que l'altération ou la recréation de la table ne modifie pas les éléments que la fonction doit voir?Est-ce que la modification ou la recréation d'une table dans Oracle affecte les politiques définies?
Est-ce que la modification ou la recréation d'une table dans Oracle affecte les politiques définies?
Répondre
"do I need to redefine the policy if I drop and recreate the table"
Oui. Créons une politique.
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>
cela fonctionne. Mais si nous laissons tomber et recréer la table (à l'aide d'une sauvegarde j'ai préparé plus tôt) ...
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."
Non Fournir le changement ne remet pas en cause le prédicat généré modifier une table ne baisse pas la règle:
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>
Notez que la modification a modifié la colonne qui est testée par le prédicat et la stratégie reste en vigueur.
"does a 'CREATE OR REPLACE VIEW' statement drops and recreates it or does it alter it?"
Essayons:
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>
Ok, donc c'est une erreur, car la nouvelle projection de la vue ne comprend pas la colonne dans le prédicat. Mais il suggère que la politique est toujours en place. Donc, corrigeons cette erreur:
SQL> create or replace view v23 as select name, age, deptno from t23;
View created.
SQL> select count(*) from v23;
COUNT(*)
----------
5
SQL>
merci beaucoup Un dernier détail: Si une vue existe, est-ce que l'instruction 'CREATE OR REPLACE VIEW' est perdue et est-elle modifiée? Si c'est la première, alors je dois redéfinir la politique, si c'est la deuxième puis je suppose que la politique est toujours là ... je suis correct? (La politique est définie sur une vue et il était l'opinion qu'ils ont changé à travers le sty CREATE OU REPLACE) – Paralife
Merci. Si je pouvais je vous upvote un 1000 fois juste pour la façon dont vous avez répondu BTW comment faites-vous cela? Je mea Comment trouvez-vous la volonté de passer du temps à expliquer quand vous pourriez consacrer ce temps à en découvrir encore plus? Je me trouve très désireux d'explorer et de créer mais jamais d'expliquer, sauf quand je l'explique comme un moyen d'affiner mes connaissances ... C'est très mauvais mais je trouve très difficile de se débarrasser de cette habitude. Ce n'est pas de l'égoïsme, c'est juste que chaque fois qu'il n'y a rien de nouveau sur la table, je ne peux pas aider mais tergiverser ... – Paralife
Personnellement, je pense qu'expliquer quelque chose à quelqu'un d'autre est un bon moyen de renforcer son propre apprentissage. Deuxièmement, en utilisant un exemple réel (comme APC) est un bon moyen de vérifier que vos propres hypothèses sont bonnes. Et comme Tom Kyte nous le rappelle continuellement, nos hypothèses sur Oracle 9 peuvent être fausses sur 10,11, etc - rien ne vaut la vérification plutôt que la confiance. – JulesLt
- 1. Renommer la table ou la vue Oracle
- 2. Est-ce que la modification de données dans Access Table modifie des données dans une table Oracle Oracle ODBC connectée?
- 3. Est-ce que la variable `.0` inaccessible dans` locals() `affecte la mémoire ou les performances?
- 4. SQL - Oracle - comment sélectionner les valeurs de la table avec la plus grande modification%
- 5. LibGDX - Est-ce que la modification d'un groupe affecte les enfants?
- 6. Recréation dynamique d'une disposition de table
- 7. La modification dynamique de la disposition des lignes ListView affecte aussi les autres lignes
- 8. Est-ce que la modification d'une session invalide les états Pakage dans Oracle 10g?
- 9. Que sont les objets de table imbriqués dans Oracle?
- 10. Weblogic 10.3, JDBC, Oracle, SQL - La table ou la vue n'existe pas
- 11. table Oracle d'objets dans la mémoire
- 12. Affichage des attributs dans la table (Oracle)
- 13. ruby: comment obtenir toutes les méthodes définies ou écrasées dans la classe actuelle plutôt que dans la classe de base?
- 14. Modification dynamique de la configuration pour refléter dans les structures de données définies par l'utilisateur
- 15. Horodatage Oracle: modification de la valeur temporelle
- 16. Comparer les colonnes de la table Oracle dans SQL
- 17. Enregistrer les données dans le système de fichiers plutôt que dans la base de données SQL ou Oracle
- 18. Oracle Remplir la table de sauvegarde de la table primaire
- 19. Oracle Colonne Valeur Modification
- 20. Insérer des lignes dès que la table est créée - Oracle
- 21. dans mysql, la quantité de données dans une table affecte-t-elle les performances?
- 22. Éviter la recréation de fragments avec hashmap
- 23. Oracle: Insérer dans la table des valeurs (de liste_colonnes) (de values_list) avec des colonnes définies comme NULL par défaut
- 24. comment nommer la colonne même que les enregistrements de colonne d'une autre table dans Oracle
- 25. Rejoindre la même table pour afficher les lignes en tant que colonne dans Oracle
- 26. Est-ce que l'ajout de filtre personnalisé affecte la chaîne?
- 27. Pourquoi la définition d'une méthode au niveau supérieur affecte-t-elle d'autres classes définies par l'utilisateur?
- 28. La taille de la table sqlite3 affecte-t-elle les performances?
- 29. La hauteur de ligne affecte les images?
- 30. Ligne aléatoire Oracle de la table
Oui, je crois que l'abandon d'une table interrompt toutes les politiques qui y sont liées. Cependant, en ce qui concerne la modification, je ne suis pas sûr. Pourriez-vous être plus précis sur la politique, le schéma de la table et ce que vous aimeriez changer? – XstreamINsanity
Certains de mes collègues ont modifié une vue sur une table de sorte qu'une colonne a été définie comme to_date (B) au lieu de B. Maintenant, la politique que j'ai sur cette vue ne se soucie pas de cette colonne. Il dit simplement que "si l'utilisateur est 'NOM D'UTILISATEUR' alors renvoyer le prédicat:" où ID_utilisateur = utilisateur ".Il n'est donc pas affecté par l'alter.La question est si je dois redéfinir la politique même si je ne changerai rien à J'ai aussi élargi ma question de façon à ce que, si un drop-create se produit, je doive recréer la politique, je ne peux pas la tester maintenant (je suis en vacances) et je n'ai pas d'accès, donc je voudrais savoir – Paralife