Eclipse BIRT et Oracle: Nécessité de définir le rôle avant rapport en cours d'exécution

StackOverflow https://stackoverflow.com/questions/1177390

  •  19-09-2019
  •  | 
  •  

Question

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 chacun un certain nombre de schémas avec le même ensemble de tables, où chaque schéma a un certain nombre de rôles à contrôler en lecture, écriture, gestion des données et ainsi de suite. Aucun de ces rôles par défaut.

Dans 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 possible de le faire en utilisant l'événement afterOpen pour l'aide publique au développement Source de données, mais je n'ai pas trouvé d'exemples sur la façon d'obtenir et d'utiliser la connexion native JavaScript.

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

Était-ce utile?

La solution

Vous pouvez faire un appel supplémentaire à la base de données dans la méthode afterOpen de la source de données en utilisant Java. Vous pouvez utiliser JavaScript ou Java gestionnaire d'événements pour exécuter l'instruction SET ROLE, ou d'appeler une procédure stockée qui exécutera pour vous. Cela se produit après que la connexion db initiale est effectuée, mais avant que la requête Data Set fonctionne. Ce sera un peu difficile à utiliser la connexion source de données pour faire cet appel cependant, et je n'ai pas le code en ce moment de fournir à 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. Faites glisser et déposez l'ensemble de données dans la conception du rapport, et le rendre invisible. Il se déroulera d'abord avant toute autre question. Pas la solution la plus propre, mais facile à faire

L'espoir qui aide

Le Birt Expert

Autres conseils

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, osuser, programme et la machine de l'utilisateur qui veut se connecter.

L'approche d'utiliser une procédure stockée pour définir le rôle ne fonctionnera pas - du moins pas sur Apache Derby. Motif: durée de vie du rôle de jeu est limité à 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 a été appelée, par exemple pour l'exécution du rapport, le même que aucun rôle aurait jamais été ensemble.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top