SQL - Grant - Distribution de droits
Fermé
mezcalouz
Messages postés
1
Date d'inscription
vendredi 15 décembre 2006
Statut
Membre
Dernière intervention
15 décembre 2006
-
15 déc. 2006 à 22:06
Julien - 19 oct. 2010 à 19:20
Julien - 19 oct. 2010 à 19:20
A voir également:
- SQL - Grant - Distribution de droits
- Il est en cours de transport vers votre site de distribution. ✓ - Forum Consommation & Internet
- Votre envoi est réacheminé vers son site de distribution - Forum Consommation & Internet
- Votre envoi est sur le site qui dessert votre adresse. nous préparons sa distribution. ✓ - Forum Consommation & Internet
- Petit colis distribution - Forum Consommation & Internet
- Agence de distribution relais colis ✓ - Forum Réseaux sociaux
2 réponses
Le problème d'un GRANT c'est justement le fait qu'on ne puisse pas passer par un SELECT dans la distribution.
Je ne connais pas grand chose en allocations de droits mais peut être en créant une vue sur all_tables tu pourrais sélectionner le résultat de ta vue dans le paramètre ON [...]
Si ça ne fonctionne pas il reste le système D courageux, tu prends table par table en espérant pour toi que ta base n'ai pas x^100 tables, ça deviendrait un peu long...
La technique du loop est pas mal mais pour le dernier enregistrement on ne peut pas définir un enregistrement "n+1" tel que la lecture se fait jusque n+1 qui a une valeur nulle et s'arrête justement sur cet enregistrement qui si l'on suit ton code ne serait pas pris en compte et donc l'enregistrement n serait comptabilisé?
De plus, c'est vrai qu'Oracle est très exigeant sur la syntaxe... essaye (si tu ne l'as pas fait) devant tes noms de tables de mettre le nom de la base et un point ('BASE'.'TABLE') avec ou sans les quotes simples ou doubles je ne sais plus vraiment (Oracle remonte à il y a 2 ou 3 ans, au pire tu as 4 syntaxes à tester c'est pas trop la misère...)
Ensuite n'oublie pas de vérifier que tu as le droit du GRANT si tu n'es pas DBA, car si le DBA n'a pas transmis le pouvoir GRANT, tu ne pourras pas affecter de privilèges.
Au "presque-pire" des cas, essaye un script SQL dans un fichier texte qui recense ton code et importe le.
Et dans le pire des cas, bon courage...! :D
Salut!
Je ne connais pas grand chose en allocations de droits mais peut être en créant une vue sur all_tables tu pourrais sélectionner le résultat de ta vue dans le paramètre ON [...]
Si ça ne fonctionne pas il reste le système D courageux, tu prends table par table en espérant pour toi que ta base n'ai pas x^100 tables, ça deviendrait un peu long...
La technique du loop est pas mal mais pour le dernier enregistrement on ne peut pas définir un enregistrement "n+1" tel que la lecture se fait jusque n+1 qui a une valeur nulle et s'arrête justement sur cet enregistrement qui si l'on suit ton code ne serait pas pris en compte et donc l'enregistrement n serait comptabilisé?
De plus, c'est vrai qu'Oracle est très exigeant sur la syntaxe... essaye (si tu ne l'as pas fait) devant tes noms de tables de mettre le nom de la base et un point ('BASE'.'TABLE') avec ou sans les quotes simples ou doubles je ne sais plus vraiment (Oracle remonte à il y a 2 ou 3 ans, au pire tu as 4 syntaxes à tester c'est pas trop la misère...)
Ensuite n'oublie pas de vérifier que tu as le droit du GRANT si tu n'es pas DBA, car si le DBA n'a pas transmis le pouvoir GRANT, tu ne pourras pas affecter de privilèges.
Au "presque-pire" des cas, essaye un script SQL dans un fichier texte qui recense ton code et importe le.
Et dans le pire des cas, bon courage...! :D
Salut!
Bonjour,
Le mieux semble être de se faire une petite routine en PL/SQL, qui boucle sur le résultat du SELECT pour appeler un EXECUTE IMMEDIATE avec la commande à faire :
begin
for nomtable in
(SELECT table_name
from all_tables
where owner = 'B'
and table_name LIKE 'PUBLIC_%'
) loop
EXECUTE IMMEDIATE 'grant SELECT, UPDATE, INSERT on ' || nomtable.table_name || ' to A';
end loop;
end;
Ca c'est la forme simple, la forme complexe utilise un curseur pour ouvrir le SELECT et le parcourir. Avec un curseur Oracle ne bugge pas (en version < 9, parfois il ne lit pas lma dernière ligne), mais sinon c'est la même chose.
Le mieux semble être de se faire une petite routine en PL/SQL, qui boucle sur le résultat du SELECT pour appeler un EXECUTE IMMEDIATE avec la commande à faire :
begin
for nomtable in
(SELECT table_name
from all_tables
where owner = 'B'
and table_name LIKE 'PUBLIC_%'
) loop
EXECUTE IMMEDIATE 'grant SELECT, UPDATE, INSERT on ' || nomtable.table_name || ' to A';
end loop;
end;
Ca c'est la forme simple, la forme complexe utilise un curseur pour ouvrir le SELECT et le parcourir. Avec un curseur Oracle ne bugge pas (en version < 9, parfois il ne lit pas lma dernière ligne), mais sinon c'est la même chose.