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

Oracle Discussion :

Création d’un user avec des droits restreints [10gR2]


Sujet :

Oracle

  1. #1
    Membre habitué Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Points : 161
    Points
    161
    Par défaut Création d’un user avec des droits restreints
    Bonjour,
    Voici une petite description de ma situation. J’utilise actuellement une base de données Oracle 10g qui a un user APPLI2006. Ce dernier contient des tables, des vues, des fonctions, etc. Il a également tous les droits (ex il a les droits DBA), je sais que c’est mal mais j’en ai hérité en l’état.

    Aujourd’hui, un développeur est venu me voir pour avoir les identifiants du user APPLI2006 car il doit développer une petite application. J’aimerai bien lui créer un user spécifique pour son application et ne pas lui donner celui de APPLI2006 (ça reviendrait à lui donner les droits DBA et je ne pense pas que ce soit une bonne pratique).

    Voici ce que j’ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE USER EDI2014
      IDENTIFIED BY "xxxx"
      DEFAULT TABLESPACE APPLI_DATA
      TEMPORARY TABLESPACE TEMP
      PROFILE DEFAULT
      ACCOUNT UNLOCK;
    GRANT CREATE SESSION TO EDI2014 ;
    GRANT SELECT ON APPLI2006.table1 TO EDI2014 ;
    GRANT SELECT ON APPLI2006.table2 TO EDI2014 ;
    GRANT SELECT ON APPLI2006.table3 TO EDI2014 ;
    Il peut maintenant se connecter avec le user EDI2014 et faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from APPLI2006.table1
    Pouvez-vous me dire si c’est la bonne approche ? sinon comment faire autrement ?
    Comment le user EDI2014 peut appeler des fonctions de APPLI2006 ?
    Par exemple la requête suivante ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select GET_NOM_CLIENT(t1.id_client) from APPLI2006.table1 t1
    Ma fonction est la suivante
    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
    CREATE OR REPLACE FUNCTION APPLI2006."GET_NOM_CLIENT" (_id_client NUMBER)
    RETURN VARCHAR2
    IS
       tmpvar   VARCHAR2 (40);
    BEGIN
       SELECT nom
       INTO tmpvar
       FROM table3
       WHERE id_client = _id_client;
     
        RETURN tmpvar;
    EXCEPTION
       WHEN NO_DATA_FOUND
       THEN
          RETURN NULL;
       WHEN OTHERS
       THEN
       RAISE;
    END GET_NOM_CLIENT;
    /
    Pouvez-vous m'aider ?

    Merci d'avance
    PoichOU

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Il suffit de faire un grant execute de la fonction. Mais malheureusement « votre » fonction est un excellent exemple de tous qu’il y a de pire dans le développement des fonctions PL/SQL.

  3. #3
    Membre habitué Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Points : 161
    Points
    161
    Par défaut
    Bonjour mnitu,

    merci pour votre réponse, effectivement ça marche avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GRANT EXECUTE ON APPLI2006.GET_NOM_CLIENT TO EDI2014
    C'est la bonne pratique d'utiliser les grant sur le user ? ne faut-il pas passer par un role ou un privilège ?

    Désolé pour la fonction, j'ai donné un exemple et j'ai beaucoup (trop) simplifié le code. J'ai bien conscience qu'une telle fonction devrait être remplacée par une jointure.

    Question bonus :
    Est-il
    • possible de faire l'inverse, cad de donner les accès à tous les éléments et d'en restreindre certains ?
    • Est ce obligatoire de préciser le nom du user APPLI2006 à chaque appel d'éléments ?
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      SELECT * FROM APPLI2006.table1


    Cdt,
    PoichOU

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par PoichOU Voir le message
    ...
    C'est la bonne pratique d'utiliser les grant sur le user ? ne faut-il pas passer par un role ou un privilège ?
    La différence entre données de droits à l’utilisateur et à un rôle tiens au fait qu’un rôle pourrait être activer seulement pendant un certain temps par la couche applicative.

    Citation Envoyé par PoichOU Voir le message
    ...

    Question bonus :
    Est-il
    • possible de faire l'inverse, cad de donner les accès à tous les éléments et d'en restreindre certains ?
    Je ne vois pas trop que vous voulez dire par ça. Revoke permet de restreindre l'accès.

    Citation Envoyé par PoichOU Voir le message
    ...
    • Est ce obligatoire de préciser le nom du user APPLI2006 à chaque appel d'éléments ?
    Non faite un synonyme sur l’user EDX qui pointe vers l’objet du user APPLI.

    Citation Envoyé par PoichOU Voir le message
    ...
    Désolé pour la fonction, j'ai donné un exemple et j'ai beaucoup (trop) simplifié le code. J'ai bien conscience qu'une telle fonction devrait être remplacée par une jointure.
    Ce n’est pas seulement pour la jointure mais également pour le gestionnaire d’exception. When Others Then raise c’est plus dommageable qu’utile et montre une incompréhension des règles de propagation des anomalies en PL/SQL. Et ni le traitement du NO_DATA_FOUND je ne l'aime pas.

  5. #5
    Membre habitué Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Points : 161
    Points
    161
    Par défaut
    Une nouvelle fois merci pour tes réponses mnitu.

    • OK pour le rôle
    • OK pour le synomyne (merci ça marche)
    • J'ai environ 100 tables, 40 proc, 50 functions, ... Pour le Revoke je me pose la question car je pense que ça serait plus rapide pour moi de dire que j'autorise tout sauf 20 tables par ex. Parce que là je dois autoriser chaque éléments. Mais je ne sais pas si c'est une bonne pratique.
    • Pour les fonctions effectivement je ne suis pas très fort dans la gestion des exceptions, si tu peux me donner des précisions ou un lien avec des explications, je suis preneur



    Merci
    PoichOU

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252

  7. #7
    Membre habitué Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Points : 161
    Points
    161
    Par défaut
    ok merci à toi

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 15/03/2014, 17h44
  2. [9.2] Créer user postgres avec des droits limités
    Par info__net dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 08/07/2013, 11h47
  3. Windows - compte administrateur avec des droits restreints
    Par Jfrancois57 dans le forum Sécurité
    Réponses: 0
    Dernier message: 29/11/2012, 10h10
  4. [Admin] Outil permettant de donner la liste des users avec un droit report creator
    Par pomade28 dans le forum Administration-Migration
    Réponses: 3
    Dernier message: 26/02/2011, 10h25
  5. Réponses: 20
    Dernier message: 29/02/2008, 22h17

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