2009-07-24 2 views
0

Ist es möglich, vor dem Ausführen eines Berichts eine Datenbankrolle festzulegen? Ich habe eine Anzahl von Datenbanken, die jeweils eine Anzahl von Schemas mit demselben Satz von Tabellen enthalten, wobei jedes Schema eine Anzahl von Rollen hat, um das Lesen, Schreiben, Datenmanagement und so weiter zu steuern. Keine davon sind Standardrollen.Eclipse BIRT und Oracle: Vor dem Ausführen des Berichts muss eine Rolle festgelegt werden

In sqlplus oder TOAD kann ich SET ROLE vor dem Ausführen einer SELECT-Anweisung tun. Das möchte ich auch in BIRT machen.

Es kann möglich sein, dies mit dem Ereignis afterOpen für die ODA-Datenquelle zu tun, aber ich habe keine Beispiele gefunden, wie Sie die native Verbindung in JavaScript erhalten und verwenden können.

Ich bin nicht erlaubt, etwas auf dem Serverende hinzuzufügen oder zu ändern.

Antwort

1

Sie können einen zusätzlichen Aufruf der Datenbank in der Methode afterOpen der Datenquelle mithilfe von Java durchführen. Sie können JavaScript oder einen Java Event Handler verwenden, um die SET ROLE-Anweisung auszuführen oder eine gespeicherte Prozedur aufzurufen, die sie für Sie ausführt. Dies geschieht, nachdem die erste db-Verbindung hergestellt wurde, aber bevor die Data Set-Abfrage ausgeführt wird. Es wird jedoch ein wenig schwierig sein, die Datenquellenverbindung zu verwenden, um diesen Anruf zu tätigen, und ich habe den Code jetzt nicht als Beispiel.

Eine andere Möglichkeit besteht darin, ein gespeichertes Proc Data Set zu erstellen, das den gewünschten Befehl ausführt und dieses zuerst ausführt. Ziehen Sie den Datensatz per Drag-and-drop in den Berichtsentwurf, und machen Sie ihn unsichtbar. Es wird zuerst vor allen anderen Abfragen ausgeführt. Nicht die sauberste Lösung, aber leicht

Hoffnung zu tun, die eine gespeicherte Prozedur zu verwenden, für die Einstellung der Rolle

Le Birt Expert

0

Sie können einen Login-Trigger schreiben und eine festgelegte Rolle in diesem Trigger (PL/SQL: DBMS_SESSION.SET_ROLE) übernehmen. Sie können den Benutzernamen, den osuser, das Programm und den Computer des Benutzers festlegen, der sich anmelden möchte.

+0

Das ist leider keine Option, solange ich am Serverende nichts machen darf. Es gibt auch eine Reihe von Servern. – stili

+0

Sprechen Sie mit Ihrem DBA. Wenn er/sie eine bessere Lösung kennt, implementieren Sie diese Lösung. Wenn er/sie keine bessere Lösung kennt, bitten Sie ihn, den Code des Triggers zu überprüfen und in den Produktionsdatenbanken zu installieren. – tuinstoel

-1

Der Ansatz hilft nicht funktionieren - zumindest nicht auf Apache Derby. Grund: Die Lebensdauer der gesetzten Rolle beschränkt sich auf die Ausführung der Prozedur selbst - nach der Rückkehr von der Prozedur wird die Rolle die gleiche wie vor dem Aufruf der Prozedur sein, dh für die Ausführung des Berichts wäre das Gleiche wie keine Rolle jemals gewesen einstellen.

Verwandte Themen