2009-07-24 5 views
0

Est-il possible de définir un rôle de base de données avant d'exécuter un rapport? J'ai un certain nombre de bases de données contenant chacune un certain nombre de schémas avec le même ensemble de tables, où chaque schéma a un certain nombre de rôles pour contrôler lire, écrire, gestion de données et ainsi de suite. Aucun d'entre eux sont des rôles par défaut.Eclipse BIRT et Oracle: Nécessité de définir le rôle avant rapport en cours d'exécution

En sqlplus ou TOAD je peux faire ROLE SET, avant d'exécuter une instruction select. Je voudrais faire la même chose dans BIRT.

Il est peut-être possible de le faire en utilisant l'événement afterOpen pour l'APD source de données, mais je n'ai pas trouvé d'exemples sur la façon d'obtenir et d'utiliser la connexion native en JavaScript.

Je ne suis pas autorisé à ajouter ou changer quelque chose à la fin du serveur.

Répondre

1

Vous pouvez effectuer un appel supplémentaire à la base de données dans la méthode afterOpen de la source de données à l'aide de Java. Vous pouvez utiliser JavaScript ou un gestionnaire d'événements Java pour exécuter l'instruction SET ROLE ou pour appeler une procédure stockée qui l'exécutera pour vous. Cela se produit après la connexion initiale à la base de données, mais avant l'exécution de la requête Ensemble de données. Il sera toutefois un peu compliqué d'utiliser la connexion à la source de données pour faire cet appel, et je n'ai pas le code pour l'instant à titre d'exemple.

Une autre façon est de créer un ensemble de données de procédure stockée qui exécutera la commande désirée, et ont cette première execute. Glissez et déposez l'ensemble de données dans la conception du rapport, et le rendre invisible. Il sera exécuté en premier avant toute autre requête. Pas la solution la plus propre, mais facile à faire

Espoir qui aide

Le Birt Expert

0

Vous pouvez écrire un déclencheur de connexion et faire un rôle de jeu dans ce déclencheur (PL/SQL: DBMS_SESSION.SET_ROLE). Vous pouvez déterminer le nom d'utilisateur, l'utilisateur, le programme et la machine de l'utilisateur qui souhaite se connecter.

+0

Ce n'est malheureusement pas une option, tant que je ne suis pas autorisé à faire quoi que ce soit sur le serveur. Il y a aussi un certain nombre de serveurs. – stili

+0

Parlez à votre administrateur de base de données. Quand il/elle connaît une meilleure solution, implémentez cette solution. S'il ne connaît pas une meilleure solution, demandez-lui de vérifier le code de la gâchette et de l'installer dans la base de données de production. – tuinstoel

-1

L'approche d'utiliser une procédure stockée pour définir le rôle ne fonctionnera pas - du moins pas sur Apache Derby. Raison: la durée de vie du rôle défini est limitée à l'exécution de la procédure elle-même - après le retour de la procédure, le rôle sera le même qu'avant la procédure, c'est-à-dire pour l'exécution du rapport comme aucun rôle ensemble.

Questions connexes