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 :

[10G R1] Roles et autorisations


Sujet :

Oracle

  1. #1
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 561
    Points
    19 561
    Billets dans le blog
    25
    Par défaut [10G R1] Roles et autorisations
    Pour un environnement de développement, je dois donner des droits au rôle DEV_ROLE pour mes développeurs.

    1) ils doivent pouvoir modifier tous les schemas non système
    2) ils ne doivent pas être DBA

    Quels rôles/permissions dois-je donner au groupe DEV_ROLE ?
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut Re: [O10R1] Roles et autorisations
    Citation Envoyé par fadace
    Pour un environnement de développement, je dois donner des droits au rôle DEV_ROLE pour mes développeurs.

    1) ils doivent pouvoir modifier tous les schemas non système
    2) ils ne doivent pas être DBA

    Quels rôles/permissions dois-je donner au groupe DEV_ROLE ?
    QU'est ce que tu tu sous entend par modifier les droits ...

  3. #3
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 561
    Points
    19 561
    Billets dans le blog
    25
    Par défaut
    Ben,
    - je crée l'utilisateur
    - je lui attribue le role DEV_ROLE
    - il doit pouvoir modifier tous les schemas non système et ne pas être DBA

    Lui donner tous les ANY et faire ensuite un REVOKE des système ?
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  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
    Pas tous les ANY, seulement ALTER/CREATE/DELETE ANY TABLE/TRIGGER/TYPE/VIEW/INDEX/SNAPSHOT/PROCEDURE et COMMENT ANY TABLE

    Voila qui devrait suffir

  5. #5
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Une petite précision :
    Si tu lui donne le privilége delete any table il pourrat supprimer même les lignes d'une table d'un schéma DBA :

    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
    41
    42
    43
    44
    45
    46
    47
     
    SQL> conn system/
    Connecté.
    SQL> create user test identified by test ; 
     
    Utilisateur créé.
     
    SQL> grant connect to test ; 
     
    Autorisation de privilèges (GRANT) acceptée.
     
    SQL> grant delete any table to test ; 
     
    Autorisation de privilèges (GRANT) acceptée.
     
    SQL> create table test ( a number ) ; 
     
    Table créée.
     
    SQL> insert into test values (2) ; 
     
    1 ligne créée.
     
    SQL> commit ;
     
    Validation effectuée.
     
    SQL> conn test/test
    Connecté.
     
    SQL> delete from system.test ;
     
    1 ligne supprimée.
     
    SQL> commit ;
     
    Validation effectuée.
     
    SQL> conn system
    Connecté.
    SQL> select * from test ; 
     
    aucune ligne sélectionnée
     
    SQL> drop table test ;
     
    Table supprimée.
    Ce que je te conseille Fadace et afin d'avoir une sécurité la plus propre possible et de faire un script dynamique qui te donne les droits pour chaque schéma :

    Ceci n'est qu'un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    create or replace procedure droit as  
       CURSOR cur_tables is 
       select table_name 
       from user_tables where table_name not like 'BIN$%' ; 
     cur_tables_rec  varchar2(2000);
    begin 
    dbms_output.enable(10000000);
    for cur_tables_rec in cur_tables loop  
    execute immediate ' grant select on ' || cur_tables_rec.table_name || ' to schéma_destinataire ' ; 
    end loop ; 
     end  droit  ; 
    /

  6. #6
    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
    en effet, c'est mieux. Un trigger ON SCHEMA permettra de donner les droits lors de la création d'un nouvel objet

  7. #7
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 37
    Points : 25
    Points
    25
    Par défaut
    J'émet un bémol en ce qui concerne le trigger ON SCHEMA :
    J'ai ouvert un post (sans solution à ce jour) sur un problème similaire http://www.developpez.net/forums/viewtopic.php?t=415571

    Il ne semble pas possible d'exécuter une commande DDL (drop, create, alter, grant...) dans un trigger déclenché par un évenement DDL (en Oracle V8.1.7 dans mon cas).

  8. #8
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Bonjour ,
    Je ne saurais répondre à cette question. Il serait interressant de la creuser.

    Mais concernant votre probléme et celui de fadace, il existe une pirouette simple a mettre en place.

    Création d'une table de travail ou temporaire
    Le trigger ne fait de DDL directement mais fait des insert dans cette table
    On va chercher les enrengistrements de cette table et on effectue un execute immediate ( ca doit être codé dans une procédure et le trigger appelle la procédure

    Jaouad

  9. #9
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 37
    Points : 25
    Points
    25
    Par défaut
    Je viens d'essayer la pirouette telle que je crois l'avoir comprise :

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    CREATE OR REPLACE procedure CMD_GRANT
      IS
        cursor curcmd is
          select command
            from tabcmd;
     
      BEGIN
        for rec in curcmd loop
          EXECUTE IMMEDIATE rec.command;
        end loop;
     
      END CMD_GRANT;
    /
     
     
    CREATE OR REPLACE TRIGGER TA_CREATE
      AFTER CREATE
      ON IMPUSR.SCHEMA
    DECLARE
     
      -- variables de reception
      v_type      VARCHAR2(20);
      v_name      VARCHAR2(50);
      v_owner     VARCHAR2(30);
      v_ordre     VARCHAR2(150);
      v_ref_owner VARCHAR2(30) := 'IMPUSR';
      v_ref_type  VARCHAR2(30) := 'TABLE';
      nres number;
     
    BEGIN
     
        SELECT SUBSTR(ora_dict_obj_name,1,50), LTRIM(RTRIM(ora_dict_obj_type)),
               LTRIM(RTRIM(ora_dict_obj_owner))
          into v_name, v_type, v_owner
          from dual;
     
        delete from tabcmd;
     
        v_ordre := 'GRANT SELECT ON ' || v_owner || '.' || v_name || ' TO PUBLIC';
     
        insert into tabcmd
          values (v_ordre);
     
        CMD_GRANT;
     
    EXCEPTION
      WHEN OTHERS THEN
        NULL;
    END;
    /
    Mais j'obtiens toujours l'erreur "ORA-04097" lorsque je crée une table dans le schéma "IMPUSR".

    Pour info, j'ai créé la table "tabcmd", le trigger "ta_create" et la procédure "cmd_grant" sur le schéma "SYSTEM" car il refuse de créer un trigger ON SCHEMA sur le schéma SYS.

  10. #10
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 561
    Points
    19 561
    Billets dans le blog
    25
    Par défaut
    Sans aller jusqu'aux objets (ce que je ferai sans doute plus tard), j'ai fait la chose suivatne, orientée sur des rôles utilisateurs.

    VISU_ROLE: CONNECT + SELECT ANY TABLE
    USER_ROLE: VISU_ROLE + INSERT, UPDATE, DELETE ANY TABLE, VIEW + EXECUTE ANY PROCEDURE
    DEV_ROLE : USER_ROLE + CREATE PROCEDURE, SEQUENCE, TABLE, VIEW
    DA_ROLE: DEV_ROLE + ALTER ANY INDEX,SEQUENCE,TABLE + CREATE ANY INDEX,SEQUENCE,TABLE, PROCEDURE + COMMENT ANY TABLE
    DBA: DBA

    Pour les 2 premiers, je pourrai encore augmenter la granularité en les dispatchant par schéma..
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  11. #11
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    ATtention le privilége ANY donne les droits sur les tables DBA ...

    Est ce que c'est que tu voulais ?

  12. #12
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 561
    Points
    19 561
    Billets dans le blog
    25
    Par défaut
    Citation Envoyé par Jaouad
    ATtention le privilége ANY donne les droits sur les tables DBA ...

    Est ce que c'est que tu voulais ?
    Oui, je sais, et non, c'est pas ce que je veux, mais pour l'instant (sans passer par ds revoke spécifiques), c'est ce que j'aurai.

    pour ce cas précis, la granularité d'Oracle est un peu grossière et il manque une couche logique de plus, que l'on trouve chez quasi tous les autres...

    Dommage par exemple de ne pouvoir attribuer un quota ou un profile à un rôle, de ne pas pouvoir faire de revoke sur un rôle qui a obtenu des droits par un auter rôle...
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

Discussions similaires

  1. Authentification et autorisation avec roles
    Par ayasaidi dans le forum Développement Web en Java
    Réponses: 6
    Dernier message: 31/12/2013, 10h43
  2. [2.x] Roles et autorisations
    Par magicbisous-nours dans le forum Symfony
    Réponses: 2
    Dernier message: 17/08/2012, 16h48
  3. Comparaison role Connect, ressource entre Oracle 10g et Oracle 8i
    Par mamid1706 dans le forum Administration
    Réponses: 2
    Dernier message: 14/03/2008, 16h14
  4. Creer un role au niveau server
    Par Mouse dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 01/05/2003, 15h56
  5. [TForm] Ne pas autoriser l'ouverture d'un form
    Par sbeu dans le forum Composants VCL
    Réponses: 6
    Dernier message: 11/10/2002, 11h20

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