[ Oracle ] Vue et problème de droits

Vue et problème de droits [ Oracle ] - SQL/NoSQL - Programmation

Marsh Posté le 12-07-2007 à 10:31:59    

Bonjour,

 

Je ne comprends pas pourquoi si j'ajoute des droits en passant par un role, je peux faire des select mais pas créer des vues se basant sur des select !

 

Compte Admin
-------------
grant select on dvpt.p_article to majauto;
grant majauto to sunopsis;

 

Compte Sunopsis
----------------
select * from dvpt.p_article;
--->OK
CREATE or replace VIEW article AS SELECT
  * from
  dvpt.p_article
;

 

Error report:
SQL Error: ORA-01031: privilèges insuffisants

 


Par contre :

 

Compte Admin
-------------

 

grant select on dvpt.p_article to sunopsis;

 

Compte Sunopsis
----------------
select * from dvpt.p_article;
--->OK
CREATE or replace VIEW article AS SELECT
  * from
  dvpt.p_article
;
CREATE or replace VIEW succeeded.

 


Ca fonctionne ...

 

Une idée ?

 

Merci :)


Message édité par jeoff le 12-07-2007 à 10:33:34

---------------
Mon blog séduction
Reply

Marsh Posté le 12-07-2007 à 10:31:59   

Reply

Marsh Posté le 12-07-2007 à 15:31:16    

Parce que SUNOPSIS a le droit à l'instruction "create" surtout.
 
Je crois même que t'as le droit de créer une vue sur une table om tu n'as pas le droit de faire SELECT dessus.
Par contre, tu ne pourras pas créer une vue si t'as pas l'autorisation CREATE dans la base.
 
PS : Même mieux, si tu as des informations sensibles dans une table, tu peux créer une vue dessus ne laissant pas apparaître les informations sensibles, mettre un grant à tout le monde sur la vue, et faire un deny à tout le monde sur la table : les gens pourront lire la table à travers la vue, sans jamais pouvoir accéder à la table directement (et donc tomber sur les infos sensibles).
 
C'est notamment comme ça que je sécurise mes bases WEB : j'use et abuse de PS et vues auxquelles je donne des autorisation à mon user "web". Puis le lui colle un deny de tous les autres objets. Ceci dit, je fais ça sous SQL Server, je ne sais pas ce que ça donne avec Oracle, mais le fonctionnement devrait être le même.


Message édité par MagicBuzz le 12-07-2007 à 15:31:56
Reply

Marsh Posté le 12-07-2007 à 15:48:08    

Désolé mais j'ai beau relire 3 fois ton message, je ne vois pas de réponse à ma question donc je me suis certainement mal exprimé !

 

Je souhaite créer un ROLE 'majauto' qui a les droits pour faire des SELECT sur certaines tables du SCHEMA de 'user2'.

 

J'affecte ce ROLE à un utilisateur SUNOPSIS.

 

Je n'arrive aps à créer de VUE sous le SCHEMA 'sunopsis' via les droits accordés par le ROLE 'majauto'

 

----

 

Si je ne passe pas par un ROLE pour attribuer les droits d'accès mais que j'autorise le SELECT directment sur le SCHEMA 'sunopsis'; je peux créer ma VUE.


Message édité par jeoff le 12-07-2007 à 15:49:26

---------------
Mon blog séduction
Reply

Marsh Posté le 12-07-2007 à 15:58:20    

ah ouais, je viens de relire mieux ton script.
chelou ton machin.
 
sunopsis n'aurait pas un autre rôle contradictoire à majauto ?
 
quand tu lui enlèves le droit select, tu lui colle un DENY, ou tu ne fais que supprimer le GRANT ?
 
effectivement, si tu colles un DENY sur le compte directement, même s'il a un GRANT via son rôle, c'est le DENY qui prime.
 
(par contre, je pige pas le rapport entre le droit SELECT et l'autorisation de créer une vue... oracle serait-il encore plus pourri que ce que j'imaginais ?)

Reply

Marsh Posté le 12-07-2007 à 16:00:21    

normalement, seul le propriétaire du schema a le droit de donner des privilèges sur ces objets.
 
tu passes bien les grants avec le owner ?

Reply

Marsh Posté le 12-07-2007 à 16:34:28    

alors pas de deny, juste des grant et des revoke jusqu'à présent.
 
Pour passer les droits, j'utilise le compte sys as sysdba donc c'est peut être pour ça que ça déconne !
 
Je vais tester avec le compte du proprio :)


---------------
Mon blog séduction
Reply

Marsh Posté le 21-08-2007 à 17:20:27    

bonjour je suis actuellement en stage et je commence a manipuler oracle 9i  
le probleme c ke je ne suis pas administrateur de ma base et je veu kand meme créer des base de donnée  
mais une fois tapez create database nom_base ; il me met "ORA-01031: privilèges insuffisants"  
je voulai savoir comment faire pour avoir tous les privileges  pour pouvoir créer ma base de donnée ou si il y a peut etre un login et mot de passe pour administrateur par defauts merci d'avance

Reply

Marsh Posté le 21-08-2007 à 20:01:34    

pas besoin de faire un create database sous oracle
 
par defaut, ta base de donnée est celle de ton utilisateur courant, il lui faut juste le droit "resource" afin de pouvoir creer des objets ( si tu arrives a faire un create table, c'est tout bon )
 
objets sur lesquels tu aura plein pouvoir
 
P.S. si tu te connectes en admin, le DBA va t'appeler Arthur [:ddr555]


Message édité par ajnag le 21-08-2007 à 20:02:08

---------------
Chasser sans bière c'est comme... pêcher sans bière.
Reply

Marsh Posté le 22-08-2007 à 09:37:46    

merci ajnag  
enfaite j'ai reussi a créer ma propre base ( et differents tables aussi) avec la console oracle enterprise manager mais je n'arrive a me connecter a oracle management server (OMS) alors ke je rentre bien l'utilisateur et le mot de passe  
aidez moi svp

Reply

Marsh Posté le 26-08-2007 à 08:33:00    

bonjour
j'ai reussi a importé une base de donnée mais je ne sais pas comment la lire ni la trouvé donc aidez mois vp merci d'avance

Reply

Marsh Posté le 26-08-2007 à 08:33:00   

Reply

Marsh Posté le 27-08-2007 à 13:31:55    

arrives-tu à te connecter en sql+ ?


---------------
Le tout n'est pas de demander ... il faut aussi avoir cherché...
Reply

Marsh Posté le 10-09-2007 à 11:05:49    

bonjour je veu me connecter a ma base oracle 9i via vb.net j'ecri le code suivant:  
 
 Imports Oracle.DataAccess.Client
Imports System.Data
Imports System.Data.OleDb
Imports Microsoft.VisualBasic
Public Class Form1
    Inherits System.Windows.Forms.Form
    Dim MyConnection As OleDbConnection
    Dim MyCommand As OleDbCommand
 
#Region " Code généré par le Concepteur Windows Form "
 
    Public Sub New()
        MyBase.New()
 
        'Cet appel est requis par le Concepteur Windows Form.
        InitializeComponent()
 
        'Ajoutez une initialisation quelconque après l'appel InitializeComponent()
 
    End Sub
 
    'La méthode substituée Dispose du formulaire pour nettoyer la liste des composants.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub
 
    'Requis par le Concepteur Windows Form
    Private components As System.ComponentModel.IContainer
 
    'REMARQUE : la procédure suivante est requise par le Concepteur Windows Form
    'Elle peut être modifiée en utilisant le Concepteur Windows Form.  
    'Ne la modifiez pas en utilisant l'éditeur de code.
    Friend WithEvents Label1 As System.Windows.Forms.Label
    Friend WithEvents Button1 As System.Windows.Forms.Button
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.Label1 = New System.Windows.Forms.Label
        Me.Button1 = New System.Windows.Forms.Button
        Me.SuspendLayout()
        '
        'Label1
        '
        Me.Label1.Location = New System.Drawing.Point(184, 24)
        Me.Label1.Name = "Label1"
        Me.Label1.TabIndex = 0
        Me.Label1.Text = "connection2"
        '
        'Button1
        '
        Me.Button1.Location = New System.Drawing.Point(152, 88)
        Me.Button1.Name = "Button1"
        Me.Button1.TabIndex = 1
        Me.Button1.Text = "Button1"
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(292, 273)
        Me.Controls.Add(Me.Button1)
        Me.Controls.Add(Me.Label1)
        Me.Name = "Form1"
        Me.Text = "Form1"
        Me.ResumeLayout(False)
 
    End Sub
 
#End Region
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim str As String
        Dim MyConnection = New OleDbConnection("Provider=oraoledb.oracle.1;UserID=rasinfotel;password=05051981;database=moustapha" )
        Try
            MyConnection.Open()
        Catch ex As Exception
            MsgBox(" connection failed" )
            MsgBox("la connection a echouée" )
            MsgBox(ex.Source & " " & Err.Description)
            str = "SELECT NOM FROM EMPL"
            MyCommand = New OleDbCommand(str, MyConnection)
            Dim a As String
            Dim myReader As OleDbDataReader = MyCommand.ExecuteReader()
            Do While myReader.Read()
                a = myReader(0)
            Loop
            myReader.Close()
            MyConnection.Close()
        End Try
    End Sub
End Class
 
et sa m'affiche connection echoué alors ke la base et l'utilisateur sont existant et sa m'affiche aussi  
 
""Une exception non gérée du type 'System.InvalidOperationException' s'est produite dans system.data.dll""
donc aider moi svp

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed