Logo du forum
 

Forum TTH-News

| Inscription | | Recherche | | FAQ | | Accueil | | Liste des membres |
| Calendrier |
 
Vous n'êtes pas identifié! [Connexion] ou [Inscription] Forum » Programmation » [SQL / PL-SQL / SGBD] » Gestion utilisateur sous Oracle
Login Mot de passe

1 visiteurs sur ce topic (0 membre(s), 1 invité(s) )


Auteur
Sujet : Gestion utilisateur sous Oracle
finalspirit
Vétéran
Membre # 4199

 Avatar du membre
Lieu : Lyon (NPDC dans l'âme)

Messages :
5997 (1.01 par jour)


Score :

Message du 10-05-2009 @ 11:05      Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   


Salut,

J'ai un TP à faire pour mon cours d'Oracle. On doit crée une base de données avec différents types utilisateurs. L'un sera admin, un autre utilisateurs avec pouvoir et le dernier juste lecteur (accès via un site web). On doit pour chaque utilisateur enregistrer son mail, nom, prénom dans la base. J'aimerai savoir s'il était possible d'associé un compte user d'oracle à un enregistrement dans une table banale. Je pensais à créer une table utilisateur qui hérite de la table user d'Oracle mais je ne sais pas si c'est une bonne idée... De plus où se trouve cette table, quel est son nom ?

Par avance merci :)

----------
La vie n'est qu'un jeu que l'on programme au hasard... ;)
- Haut de page -
stackware
Inutile, mais indispensable :)
Membre # 6403

 Avatar du membre
Lieu : Paris

Messages :
9547 (1.65 par jour)


Score :

Message du 23-06-2009 @ 12:51   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

C'est ptet un peu tard, mais je vais essayer de te répondre quand même...
Généralement on crée une table dans laquelle on va stocker son identifiant (le même que celui de la connexion Oracle), son mail etc.
Les droits sont gérés également dans cette table. Lorsque ton application va se connecter à la base, elle va aller lire les informations concernant le user, et j'imagine qu'elle va utiliser le même login/pass qu'Oracle (authentification déportée dans Oracle, ça peut être pratique).

Tu peux ensuite utiliser le mot clé USER dans les requêtes, qui substituera le login lors de l'exécution. Exemple : Select truc from matable where matable.colonne_user=USER ==> elle ramènera les lignes concernant ce user...
La table système dont tu parles est "all_users" si c'est n'importe qui (vue avec un synonyme public) ou dba_users si tu es DBA (beaucoup plus de trucs dedans).

Ce qui est fait dans les applis web, généralement, c'est de n'avoir qu'un seul utilisateur défini sur la base, ayant des droits d'accès en lecture/écriture sur le schéma. Il faut alors gérer une table des utilisateurs, dans laquelle on gère non seulement les droits mais aussi les mots de passe. L'application devra alors prendre en charge tous les aspects relatifs aux droits, en se basant sur le contenu de cette table. Il est possible de crypter le contenu de la colonne mot de passe si nécessaire, c'est plus sécurisé, mais galère ensuite pour gérer les mots de passe.

Pour ce qui concerne les droits sur les tables, si tu as choisi de créer les login/pass sur Oracle pour chaque utilisateur, mieux vaut passer par la création de rôles, auxquels tu donneras les droits (grant select, insert, update, delete on nomtable to nomderole), et de faire un grant nomderole to user ensuite.
Il suffira de faire un grant nomderole to user pour l'ajout d'un nouvel utilisateur, ou un revoke nomderole from user pour lui enlever les droits.

Comme je ne viens pas souvent ici, tu peux me MP à l'occasion si tu fais un nouveau topic sur oracle (je ne saurai peut-être pas y répondre, mais au moins j'essaierai ;) )...
----------
Nul n'est jamais assez fort pour ce calcul

Visitez le Site Officiel du V Paris et des Vx

Fractal R5 Titanium; i7 3770K; Asus P8Z77-V; Corsair DDR3-1600 8Go ; M4 512 Go + Toshiba 4To ; Asus GTX 780 DirectCU II (Spook inside); BenQ EW2730V 27''; Win X Home; Netgear R7000
- Haut de page -
icy
Administrateur
Membre # 871

 Avatar du membre
Lieu : Bxl

Messages :
23230 (3.57 par jour)


Score :

Message du 23-06-2009 @ 16:41   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

finalspirit a écrit

J'aimerai savoir s'il était possible d'associé un compte user d'oracle à un enregistrement dans une table banale. Je pensais à créer une table utilisateur qui hérite de la table user d'Oracle mais je ne sais pas si c'est une bonne idée...


D'apres moi c'est une tres mauvaise idée.
Pourquoi? Car si tu passe par la db pour l'authentication etc, il faut une connection différente par user... et je doute qu'une db puisse tenir des miliers de connections simultanée... c'est pas vraiment fait pour ca.
Comme le dit stackware, dans les applis web, il n'y a qu'un user avec certains droits. Mais c'est tout autant valable dans les autres appli (rich client, portable etc)
C'est l'application qui gère elle meme ses pool de connexion et les sessions qu'elles ouvrent. Ouvrir une connexion et démarer une session est qqc qui prends du temps et des ressources... autant les garder ouverte ;)

De plus, faire la gestion des droits et des roles dans l'appli permet bc plus de souplesse...
Autant que je sache, tu ne peux pas avec un db mettre des droits sur une collones en particulier et empecher un user de mettre une donnée en particulier alors qu'un autre doit mettre uniquement une autre données... ou bien il faut se faire chier avec des constraints tres lourde (ce qui n'est pas maintenable). Ni facilement empecher le select d'une row en fonction de son contenu si user qui a le droit "select" fait un select * sans where clause..
Il faudra de tt facon passer par de la config au niveau de l'appli et une sauvegarde des droits et/ou roles d'un user...

ps: joli sauvetage Stack ;)
----------
"May He touch you with His Noodly Appendage"
- Haut de page -
stackware
Inutile, mais indispensable :)
Membre # 6403

 Avatar du membre
Lieu : Paris

Messages :
9547 (1.65 par jour)


Score :

Message du 25-06-2009 @ 8:52   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

En fait on peut être malin en jouant avec les vues de juridiction :oui:
1) V1 : create or replace view v1 as select ... where ...
2) grant select, insert... on v1 to nomrole
3) grant nomrole to user1, user2...
4) create synonym user.latable for proprietaire.lavuev1

Si la vue a la bonne idée de jouer sur une colonne de juridiction qui contiendrait comme de par hasard le nom du user, ben ça donne where nomcolonne=USER. Hop, une vue que l'on peut mettre en public synonym :)
Pour les restrictions sur les valeurs, la vue est ce qu'il y a de mieux, puisqu'on met ce que l'on veut :oui:

Ceci dit, tout ça n'est valable que pour du client lourd, en connexion synchrone. En web, comme l'a répété Icy, il ne faut pas faire comme ça. L'appli gère tout. Ça fait plus de code à écrire et moins de DDL SQL, mais c'est pas grave :D
----------
Nul n'est jamais assez fort pour ce calcul

Visitez le Site Officiel du V Paris et des Vx

Fractal R5 Titanium; i7 3770K; Asus P8Z77-V; Corsair DDR3-1600 8Go ; M4 512 Go + Toshiba 4To ; Asus GTX 780 DirectCU II (Spook inside); BenQ EW2730V 27''; Win X Home; Netgear R7000
- Haut de page -
icy
Administrateur
Membre # 871

 Avatar du membre
Lieu : Bxl

Messages :
23230 (3.57 par jour)


Score :

Message du 25-06-2009 @ 8:54   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

sauf qu'avec une view tu peux pas modifier la donnée ;) :p
----------
"May He touch you with His Noodly Appendage"
- Haut de page -
stackware
Inutile, mais indispensable :)
Membre # 6403

 Avatar du membre
Lieu : Paris

Messages :
9547 (1.65 par jour)


Score :

Message du 25-06-2009 @ 16:13   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

On parie? ;)

Si tu as les droits d'écriture sur la vue, tu peux bien entendu écrire dans la table par l'intermédiaire de la vue. Ce qui est marrant, c'est que l'on peut être amené à créer des lignes que l'on ne pourra pas visualiser ensuite... Ex : where montant < 1000. Si le gars écrit une ligne avec un montant >= 1000, la ligne sera créée, mais invisible pour lui :D

Essaie si tu ne me crois pas ;) (il faut bien donner des grant select, insert, delete, update sur la vue, hein, pas de blagues :oui:

[message édité le 25-06-2009 @ 16:17 Par stackware]
----------
Nul n'est jamais assez fort pour ce calcul

Visitez le Site Officiel du V Paris et des Vx

Fractal R5 Titanium; i7 3770K; Asus P8Z77-V; Corsair DDR3-1600 8Go ; M4 512 Go + Toshiba 4To ; Asus GTX 780 DirectCU II (Spook inside); BenQ EW2730V 27''; Win X Home; Netgear R7000
- Haut de page -


Aller dans le forum :  

Plan du forum | Contacter l'administrateur

Powered by SoulBB 3.0.1
© Soulmanto, 2003-2010

Valid XHTML 1.0 Transitional

Page générée en 0.037 secondes