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'une politique de sécurité : erreur avec DBMS_RLS


Sujet :

Oracle

  1. #1
    Membre habitué Avatar de Adenora
    Femme Profil pro
    Développeuse ABAP
    Inscrit en
    Octobre 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeuse ABAP

    Informations forums :
    Inscription : Octobre 2008
    Messages : 148
    Points : 158
    Points
    158
    Par défaut Création d'une politique de sécurité : erreur avec DBMS_RLS
    Bonsoir,

    J'utilise ORACLE 10g XE sous Windows XP.
    J'essaye de créer une politique de sécurité sauf que j'ai l'erreur suivante :
    ORA-00439 fonction non-activée : fine-grained access control
    ORA-06512 à "SYS.DBMS_RLS"
    Le prof nous a dit qu'il y avait pas besoin d'utiliser de contexte, ni de package.

    Mon code :
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    connect sys as sysdba
    create user admi5_admin identified by admi5_admin
    default tablespace users
    temporary tablespace temp
    quota 1M on users;
    grant all privileges to admi5_admin with admin option;
    grant execute on dbms_rls to admi5_admin;
     
    connect admi5_admin/admi5_admin;
    create user Dupond identified by Dupond
    default tablespace users
    temporary tablespace temp
    quota 1M on users;
    grant create session to Dupond;
     
    -- Création des tables, je n'en montre qu'une seule
    create table adherent (
      id_adherent varchar(8),
      id_club number(8),
      id_groupe number(10),
      nom varchar(20),
      prenom varchar(20),
      sexe char,
      annee_naissance number(4),
      categorie varchar(10),
      classement varchar(10),
      adresse varchar(30),
      telephone varchar(10),
      capitaine number(1),
      primary key (id_adherent),
      foreign key (id_club) references club(id_club),
      foreign key (id_groupe) references groupe(id_groupe)
    );
     
    create role admi5_role_adherent;
     
    CREATE OR REPLACE FUNCTION auth_adh (schema_var IN VARCHAR2 DEFAULT NULL, table_var IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS
    	return_val VARCHAR2(400);
    BEGIN
    	IF USER='admi5_admin' THEN
    		return_val := '1=1' ;
    	ELSE
    		return_val := 'nom=SYS_CONTEXT(''userenv'',''session_user'')';
    	END IF;
    	RETURN return_val;
    END auth_adh;
    /
     
    BEGIN
    --DBMS_RLS.DROP_POLICY('admi5_admin','adherent','adh_policy');
    DBMS_RLS.ADD_POLICY(
    	object_schema=>'admi5_admin',
    	object_name=>'adherent',
    	policy_name=>'adh_policy',
    	function_schema=>'admi5_admin',
    	policy_function=>'auth_adh',
    	statement_types=>'SELECT'
    );
    END;
    /
     
    GRANT SELECT ON adherent to admi5_role_adherent;
    GRANT admi5_role_adherent to Dupond;
    Quelqu'un aurait-il la solution à mon problème ?

  2. #2
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Il faut utiliser l'édition Entreprise pour ça !

    On peut le voir en toutes lettres ici par exemple :
    http://docs.oracle.com/cd/B19306_01/...4258/d_rls.htm
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  3. #3
    Membre habitué Avatar de Adenora
    Femme Profil pro
    Développeuse ABAP
    Inscrit en
    Octobre 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeuse ABAP

    Informations forums :
    Inscription : Octobre 2008
    Messages : 148
    Points : 158
    Points
    158
    Par défaut
    Ça me rassure, je croyais avoir fait une mauvaise manipulation.
    Je vais essayer avec cette édition alors.
    Merci

  4. #4
    Membre habitué Avatar de Adenora
    Femme Profil pro
    Développeuse ABAP
    Inscrit en
    Octobre 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeuse ABAP

    Informations forums :
    Inscription : Octobre 2008
    Messages : 148
    Points : 158
    Points
    158
    Par défaut
    Je m'excuse tout d'abord pour le double-post, mais je ne voulais pas rouvrir un autre sujet.
    Donc j'ai réussi à installer Oracle 10g avec Enterprise Edition.
    J'ai exécuté le code que j'ai mis sur mon premier message avec SQL Developer.
    Puis, je teste avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    connect Dupond/Dupond
    select * from admi5_admin.adherent;
    Cette requête m'affiche tous les adhérents, alors qu'elle devrait afficher seulement le résultat de Dupond.
    On planche depuis pas mal de jour sur ce code, sans trouver notre erreur. On a essayé avec des contextes, ça ne fonctionne pas mieux.

  5. #5
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Peut être un problème casse (majuscule/minuscule)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    return_val := 'UPPER(nom)=UPPER(SYS_CONTEXT(''userenv'',''session_user''))';
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  6. #6
    Membre habitué Avatar de Adenora
    Femme Profil pro
    Développeuse ABAP
    Inscrit en
    Octobre 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeuse ABAP

    Informations forums :
    Inscription : Octobre 2008
    Messages : 148
    Points : 158
    Points
    158
    Par défaut
    Toujours le même résultat :s

    Edit : en faisant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    connect Dupond/Dupond;
    SELECT SYS_CONTEXT ('USERENV', 'SESSION_USER') FROM DUAL;
    j'obtiens : SYS.

  7. #7
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Citation Envoyé par Adenora Voir le message
    Toujours le même résultat :s

    Edit : en faisant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    connect Dupond/Dupond;
    SELECT SYS_CONTEXT ('USERENV', 'SESSION_USER') FROM DUAL;
    j'obtiens : SYS.
    Vraiment bizarre ! avec quel outil te connectes-tu ?
    sous toad
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    connect pluton/pluton;
    SELECT SYS_CONTEXT ('USERENV', 'SESSION_USER') FROM DUAL
    donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SYS_CONTEXT('USERENV','SESSION_USER') 
    --------------------------------------------------------------------------------
    PLUTON 
    1 row selected.
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  8. #8
    Membre habitué Avatar de Adenora
    Femme Profil pro
    Développeuse ABAP
    Inscrit en
    Octobre 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeuse ABAP

    Informations forums :
    Inscription : Octobre 2008
    Messages : 148
    Points : 158
    Points
    158
    Par défaut
    J'utilise SQL Developer, celui qu'on utilise en TP.
    Et je viens de jeter un coup d’œil avec sqlplus et ça m'affiche bien Dupond.
    Mais je comprends pas pourquoi ça m'a affiché SYS sur SQL Developer.

    Donc effectivement, si je lance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    connect dupond/dupond;
    select * from admi5_admin.adherent where UPPER(nom) = UPPER(SYS_CONTEXT('USERENV','SESSION_USER'));
    j'obtiens les informations de Dupond.

    Je vais regarder si je trouve d'autres erreurs.
    Merci

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/12/2011, 17h35
  2. Création d'une page de garde, erreur avec \maketitle
    Par Nathan21 dans le forum Débuter
    Réponses: 3
    Dernier message: 21/07/2010, 15h03
  3. Création d'une vue matérialisée et erreur ORA-01630
    Par beurtom dans le forum Administration
    Réponses: 8
    Dernier message: 23/02/2007, 12h27
  4. [ASE]Création d'une BD sous HP-UX avec LV ou RLV ?
    Par sterictra dans le forum Sybase
    Réponses: 1
    Dernier message: 13/02/2007, 13h40
  5. Réponses: 3
    Dernier message: 05/06/2006, 15h45

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