IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Toad Oracle Discussion :

impossible de modifier les données d'une vue


Sujet :

Toad Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    DBA Oracle
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DBA Oracle

    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Points : 41
    Points
    41
    Par défaut impossible de modifier les données d'une vue
    Bonjour,
    j'ai créé une vue sur une table, et avec toad je ne peux pas modifier les données. Les zones de saisie de Toad semble comme blockées !!!

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    on ne peut pas updater une vue... une vue c'est qu'une requête SQL stockée en base et exécuté à chaque SELECT de la vue, comment Oracle pourrait-il mettre à jour des données non stockées ?

  3. #3
    Membre du Club
    Homme Profil pro
    DBA Oracle
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DBA Oracle

    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Points : 41
    Points
    41
    Par défaut
    Pas du tout, dans certain cas on peut modifier une vue :

    faite le test suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    SQL> CREATE TABLE MARKETING.AA
      2  (
      3      NOM    VARCHAR2(15)     NULL,
      4      PRENOM VARCHAR2(15)     NULL
      5  )
      6  /
     
    Table crÚÚe.
     
    SQL> CREATE OR REPLACE VIEW MARKETING.VUE_AA
      2  (
      3      NOM,
      4      PRENOM
      5  )
      6  AS
      7  SELECT "NOM","PRENOM"
      8        FROM aa
      9  /
     
    Vue crÚÚe.
     
    SQL> insert into AA (nom,prenom) values ('tigger','scott');
     
    1 ligne crÚÚe.
     
    SQL> commit
      2  ;
     
    Validation effectuÚe.
     
    SQL> insert into vue_AA (nom,prenom) values ('tigger2','scott2');
     
    1 ligne crÚÚe.
     
    SQL> commit
      2  ;
     
    Validation effectuÚe.
     
    SQL>

    Avec SQLPLUS et avec ACCESS en attachement ODBC ca marche parfaitement, c'est juste que peut etre Toad bride la chose !!!!

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    oui bien sûr, j'ai pas voulu compliqué la chose étant donné que faire un update d'une vue me parait particulièrement être une mauvaise pratique

    Pour préciser ce que j'ai dit : on ne peut mettre à jour qu'une vue simple, qui ne contient pas calcul, ni de transformation, ni de jointure, etc...

    PS : merci de penser aux balises CODE

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par orafrance Voir le message
    un update d'une vue me parait particulièrement être une mauvaise pratique
    non, ce n'est pas une mauvaise pratique. C'est aussi une façon de restreindre l'accès à seulement certaines colonnes ou lignes de la tables, style BLAKE ne peut mettre à jour que sa ligne et ne voit que certaines colonnes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    SQL> create view v as 
      select ENAME, DNAME, JOB, EXTRACT(YEAR FROM HIREDATE) HIREDATE 
      from EMP natural join DEPT where ename=user with check option;
     
    View created.
     
    SQL> grant select on v to blake;
     
    Grant succeeded.
     
    SQL>  grant update (job) on v to blake;
     
    Grant succeeded.
     
    SQL> conn BLAKE/PAPER
    SQL> select * from scott.v;
    ENAME      DNAME          JOB         HIREDATE
    ---------- -------------- --------- ----------
    BLAKE      SALES          MANAGER         1981
     
    SQL> update scott.v set job='PRESIDENT';
     
    1 row updated.
     
    SQL> roll
    Rollback complete.
    Avec Toad, je peux très bien mettre à jour ma vue.

    Cependant, comme mentionné par orafrance, de nombreuses conditions rendent la vue inéditable.

  6. #6
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    c'est sûr mais le FGA me semble plus approprié et plus propre qu'une vue pour ça, non ?

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    tu veux dire RLS ?

    Row-Level Security (ou Fain Grained Access Control) est disponible avec la version Enterprise et permet d'implémenter la VPD (Virtual Private Database). L'API est DBMS_RLS

    FGA c'est l'abréviation de Fain Grained Auditting, avec l'api DBMS_FGA, et ça permet de faire un audit de manière plus élaborée que AUDIT SELECT, car même le SELECT exécuté peut être capturé.

    Je pense que d'avoir un role UPDATE sur une vue est tout à fait acceptable. Pas forcément besoin de définir des polices avec DBMS_RLS, ou bien?

    J'attends tes commentaires

  8. #8
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Citation Envoyé par laurentschneider Voir le message
    C'est aussi une façon de restreindre l'accès à seulement certaines colonnes ou lignes de la tables, style BLAKE ne peut mettre à jour que sa ligne et ne voit que certaines colonnes
    il y a la VPD pour ça

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Oui, je ne dis pas que je suis un grand fan des vues (ni lecture-seule ni lecture-écriture), mais si on employe des vues, on peut aussi bien les employer pour l'écriture que la lecture, non?

    Bon, si tu ne veux pas qu'on mette à jour tes vues, créée les read-only
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQL> create view v as select ename from emp with read only;
     
    View created.

  10. #10
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    le problème de l'écriture dans les vues c'est qu'il y a une grosse faille qui peut permettre de modifier des données via la vue même si le user n'a pas les droits sur la table

  11. #11
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    1) tu dois avoir les droits sur la vue pour modifier la vue
    2) si la vue t'appartient, alors tu ne peux pas modifier la table. Il y avait effectivement un bug qui est fixé depuis quelques années qui permettait d'effacer le contenu d'une table avec seulement les privilège "SELECT" et "CREATE VIEW".

    Il ne faut pas donner CREATE VIEW à un utilisateur final, mais créer des vues avec des droits sur la vue et non sur la table ne me pose personnellement pas de problème.

    Je trouve que ça augmente la sécurité plus que ça ne la diminue (tu peux masquer certaines colonnes)

Discussions similaires

  1. Comment modifier les données d'une base
    Par anassyto dans le forum Access
    Réponses: 8
    Dernier message: 27/07/2006, 13h26
  2. [POI]recuperer et modifier les données d'une cellule
    Par corbier32 dans le forum Documents
    Réponses: 5
    Dernier message: 04/05/2006, 10h41
  3. Réponses: 2
    Dernier message: 05/10/2005, 15h27
  4. comment modifier les données d'une table à travers un dbgrid
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 12
    Dernier message: 19/07/2005, 09h51
  5. MySQL Administrator : modifier les données d'une table
    Par Robinounou dans le forum Outils
    Réponses: 4
    Dernier message: 13/07/2005, 17h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo