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

Administration Oracle Discussion :

Vues DBA inacessibles pour user SYSTEM depuis une procédure


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Par défaut Vues DBA inacessibles pour user SYSTEM depuis une procédure
    Je veux créer la procédure suivante (que j'ai simplifiée pour expliquer l'erreur) dans le schéma SYSTEM (je suis connecté en tant que SYSTEM) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     CREATE OR REPLACE PROCEDURE P IS
      CURSOR C IS SELECT * FROM dba_tables;
      BEGIN 
       EXECUTE IMMEDIATE 'SELECT 1 FROM DUAL';
      END;
    Et là la compilation sort une erreur ORA-00942: table or view does not exist !
    Alors qu'avec une autre vue comme all_tables par exemple ça fonctionne.

    Pourtant le user SYSTEM a bien accès en lecture à la vue dba_tables (ça marche depuis une simple requête SQL)

    Comment est-ce possible que SYSTEM ait accès à une vue dba depuis du code SQL mais pas du code PL/SQL ? La gestion des droits est-elle différente ? Ou bien aurais-je oublié quelque chose ?

    Merci pour votre aide
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par scheu Voir le message
    Comment est-ce possible que SYSTEM ait accès à une vue dba depuis du code SQL mais pas du code PL/SQL ? La gestion des droits est-elle différente ?
    oui, en PL/SQL, les rôles ne sont pas pris en compte, seulement les privilèges

    Par ailleurs, un EXECUTE IMMEDIATE est complétement inutile pour faire du DML sans valeur dynamique

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Par défaut
    Citation Envoyé par orafrance Voir le message
    oui, en PL/SQL, les rôles ne sont pas pris en compte, seulement les privilèges
    Une petite précision supplémentaire, ça fonctionne comme ça depuis Oracle 8i.

  4. #4
    Membre Expert Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Par défaut
    Merci pour vos réponses j'aurai appris quelque chose
    Le EXECUTE IMMEDIATE c'était juste comme exemple, j'avais simplifié le code de ma procédure
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Une autre précision: depuis la 8i, on peut également définir une procédure stockée avec la clause AUTHID CURRENT_USER qui signifie qu'elle s'exécute avec les droits de l'utilisateur qui l'exécute (et non avec les droits du propriétaire de la procédure comme c'est le cas par défaut).

    Dans ce cas on peut utiliser DBM_SESSION.SET_ROLE pour activer les rôles qui seront pris en compte par le SQL dynamique (et non statique).

    Voir les exemples du Security Guide.

    Ce n'est sans doute pas d'usage courant mais cela peut parfois être utile.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Par défaut
    Citation Envoyé par pifor Voir le message
    Ce n'est sans doute pas d'usage courant mais cela peut parfois être utile.
    Oui en fait AUTHID CURRENT_USER est utilisé surtout pour partager le code mais pas les données. Plusieurs packages PL/SQL fournis par Oracle utilisent ce modèle.

  7. #7
    Membre Expert Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Par défaut
    Citation Envoyé par orafrance Voir le message
    oui, en PL/SQL, les rôles ne sont pas pris en compte, seulement les privilèges
    Merci pour ces précisions

    Néanmoins, avec du recul j'ai du mal à comprendre pourquoi les rôles ne sont pas pris en compte en PL/SQL ... Quels problèmes de sécurité cela peut-il engendrer ?
    Quelqu'un aurait-il un exemple concret ?
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    y'a rien à comprendre... c'est comme ça c'est tout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/04/2009, 12h00
  2. Création de fichier depuis une procédure stockée
    Par xavier ringoise dans le forum SQL
    Réponses: 2
    Dernier message: 07/03/2006, 09h45
  3. Réponses: 11
    Dernier message: 08/02/2006, 16h59
  4. Envoyer un mail depuis une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 03/10/2005, 11h51
  5. Réponses: 6
    Dernier message: 18/05/2005, 14h04

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