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 :

AS SYSOPER et schéma PUBLIC : pas d'accès aux données de users autres que SYS? [11gR2]


Sujet :

Administration Oracle

  1. #1
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut AS SYSOPER et schéma PUBLIC : pas d'accès aux données de users autres que SYS?
    Bonne année 2017 à tous les DBA, développeurs et forumeurs du site!

    Sur le site d'Oracle j'ai lu pour SYSOPER la chose suivante : "This privilege allows a user to perform basic operational tasks, but without the ability to look at user data."
    https://docs.oracle.com/cd/B28359_01...htm#ADMIN11047
    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
    System Privilege	Operations Authorized
    SYSDBA	•	Perform STARTUP and SHUTDOWN operations
    •	ALTER DATABASE: open, mount, back up, or change character set
    •	CREATE DATABASE
    •	DROP DATABASE
    •	CREATE SPFILE
    •	ALTER DATABASE ARCHIVELOG
    •	ALTER DATABASE RECOVER
    •	Includes the RESTRICTED SESSION privilege
    Effectively, this system privilege allows a user to connect as user SYS.
    
    SYSOPER	•	Perform STARTUP and SHUTDOWN operations
    •	CREATE SPFILE
    •	ALTER DATABASE OPEN/MOUNT/BACKUP
    •	ALTER DATABASE ARCHIVELOG
    •	ALTER DATABASE RECOVER (Complete recovery only. Any form of incomplete recovery, such as UNTIL TIME|CHANGE|CANCEL|CONTROLFILE requires connecting as SYSDBA.)
    •	Includes the RESTRICTED SESSION privilege
    This privilege allows a user to perform basic operational tasks, but without the ability to look at user data.
    Il est bien marqué que SYSOPER ne permet pas d'accéder aux données utilisateurs, donc qu'aux tables et vues du dictionnaire de données?
    J'ai voulu valider cela avec les tests suivants car je ne connaissais pas cette restriction sur SYSOPER.

    Le user HR01 a une table V_TEST01 et un synonyme public dessus.
    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
    SQL> CONNECT HR01
    Enter password:
    Connected.
     
    SQL> DESC V_TEST01
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     ID                                                 NUMBER
     LIB                                                VARCHAR2(50 CHAR)
     
    SQL> SELECT COUNT(*) FROM V_TEST01;
      COUNT(*)
    ----------
             1
     
    	SQL> SELECT OWNER, SYNONYM_NAME, TABLE_OWNER, TABLE_NAME FROM DBA_SYNONYMS 	WHERE TABLE_NAME LIKE 'V%01%';
    	OWNER                          SYNONYM_NAME                   TABLE_OWNER                    TABLE_NAME
    	------------------------------ ------------------------------ ------------------------------ ------------------------------
    	PUBLIC                         V_TEST01                       HR01                           V_TEST01

    On se connecte comme un autre user, HR, pour voir si le synonyme est OK et si on a les droits de faire un SELECT sur V_TEST01.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SQL> CONNECT HR
    Enter password:
    Connected.
     
    SQL> SELECT COUNT(*) FROM HR01.V_TEST01;
      COUNT(*)
    ----------
             1
     
    SQL> SELECT COUNT(*) FROM  V_TEST01;
      COUNT(*)
    ----------
             1

    On se connecte AS SYSDBA pour voir si le synonyme public fonctionne aussi pour ce privilège système.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> CONNECT HR / AS SYSDBA
    Enter password:
    Connected.
     
    SQL> SHOW USER
    USER is "SYS"
     
    SQL> SELECT COUNT(*) FROM  V_TEST01;
      COUNT(*)
    ----------
             1

    Même test mais avec AS SYSOPER : le SELECT est KO --> est-ce que ça prouve que SYSOPER ne peux pas accéder aux tables autres que celles du dictionnaire de données, celles pour qui le owner est SYS?
    Ce n'est pas une histoire de droits avec GRANT car je n'ai pas donné de droits à SYS sur cette table et ce synonyme public.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> CONNECT HR / AS SYSOPER
    Enter password:
    Connected.
     
    SQL> SELECT COUNT(*) FROM  V_TEST01;
    select count(*) from  v_test01
                          *
    ERROR at line 1:
    ORA-00942: table or view does not exist

    BIZARRE : même sur les tables de SYS, le SELECT est KO! Là, c'est un pb de droits sur le dictionnaire de données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SQL> CONNECT HR / AS SYSOPER
    Enter password:
    Connected.
     
    SQL> SHOW USER
    USER is "PUBLIC"
     
    SQL> SELECT COUNT(*) FROM DBA_TABLES;
    select count(*) from dba_tables
                         *
    ERROR at line 1:
    ORA-00942: table or view does not exist

    Visiblement, PUBLIC n'a le droit par défaut defaire des SELECT que sur les tables de son schéma, comme un user normal.
    C'est bizarre car pour accéder au schéma PUBLIC il faut se connecter avec AS SYSOPER qui est un privilège système puissant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> SELECT COUNT(*) FROM CAT;
      COUNT(*)
    ----------
          3978
     
    SQL> SELECT COUNT(*) FROM USER_TABLES;
      COUNT(*)
    ----------
             0

    Et si on donne à PUBLIC le droit de faire des SELECT sur tout le dictionnaire de données.
    ATTENTION : écrire PUBLIC sans guillemets. Et là ça marche pour les tables SYS!
    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
    SQL> CONNECT / AS SYSDBA
    	Connected.
     
    	SQL> GRANT SELECT ANY DICTIONARY TO PUBLIC;
    	Grant succeeded.
     
    	SQL> CONNECT HR/HR AS SYSOPER
    	Connected.
     
    	SQL> SHOW USER
    	USER is "PUBLIC"
     
    	SQL> SELECT COUNT(*) FROM DBA_TABLES;
    	  COUNT(*)
    	----------
    	      1686

    En revanche PUBLIC ne peux toujours pas accéder aux données applicatives.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> SELECT COUNT(*) FROM V_TEST01;
    SELECT COUNT(*) FROM V_TEST01
                         *
    ERROR at line 1:
    ORA-00942: table or view does not exist
     
    SQL> SELECT COUNT(*) FROM HR01.V_TEST01;
    SELECT COUNT(*) FROM HR01.V_TEST01
                              *
    ERROR at line 1:
    ORA-00942: table or view does not exist
    Est-ce que vous pouvez me dire si je me suis trompé quelque part dans mes tests ou bien si j'ai bien prouvé que SYSOPER ne peut pas accéder aux données applicatives?
    Par avance merci!
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  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
    Citation Envoyé par Ikebukuro Voir le message
    ... without the ability to look at user data
    A vrai dire, cette phrase a une portée générale, il faut faire comme s'il n'y avait pas "user data", mais "data" tout court.
    Ce qu'on veut simplement dire, c'est que SYSOPER ne permet pas de "voir les données", contrairement à SYSDBA.

    Plus concrètement, outre les quelques opérations spéciales listées par la doc, SYSOPER peut juste utiliser les privilèges octroyés à PUBLIC.

    Donc pour savoir à quoi SYSOPER à accès, il suffit de faire une recherche dans les vues de gestion des privilèges, avec GRANTEE='PUBLIC'.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select *
    from dba_tab_privs
    where grantee='PUBLIC';
    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 émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Merci pour ta réponse Pomalaix.
    Le SELECT est OK si on donne explicitement les droits à PUBLIC. Mais je note que ce n'est pas la peine de le faire pour SYS.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SQL> CONNECT HR01
    Enter password:
    Connected.
     
    SQL> GRANT SELECT ON V_TEST01 TO PUBLIC;
    Grant succeeded.
     
    SQL> CONNECT HR/HR AS SYSOPER
    Connected.
     
    SQL> SELECT COUNT(*) FROM  V_TEST01;
      COUNT(*)
    ----------
             1
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  4. #4
    Membre confirmé
    Homme Profil pro
    xxxxxxxxx
    Inscrit en
    Avril 2015
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : xxxxxxxxx

    Informations forums :
    Inscription : Avril 2015
    Messages : 393
    Points : 552
    Points
    552
    Par défaut Oracle database administration Voeux
    Bonnes années à tous et meilleurs voeux
    Happy New Year, friends ..

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/02/2015, 10h03
  2. Pas d'accès aux données sur téléphone
    Par Willy55 dans le forum Android
    Réponses: 7
    Dernier message: 30/05/2012, 15h32
  3. acces aux données d'un autre programme?
    Par GR3lh442kR dans le forum Langages de programmation
    Réponses: 11
    Dernier message: 03/12/2009, 12h12
  4. [SQL][C#] Pas d'accès aux données d'une base SQL
    Par ridd21 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 20/06/2006, 10h46
  5. [SGBD]Optimiser le temps d'accès aux données (schéma BD)
    Par vsavoir dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 08/10/2004, 18h33

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