2016-04-04 3 views
0

Ist es möglich,C++ Embedded SQL precompile mit READ ONLY Erlaubnis

db2 connect somedb user myuser using mypwd 
db2 precompile myapp.sqx OUTPUT myapp.cxx 

wenn ich die Erlaubnis an die REMOTE-DB2-Datenbank nur gelesen haben? Ich versuche nur auszuwählen, dass ich nicht versuche, in die Datenbank zu schreiben, aber der Befehl precompile beschwert sich darüber, dass ich keine Berechtigung zum "create in" habe ... Was kann ich anders machen, so dass ich das abfragen kann Datenbank mit C++ (Ich habe bereits eine Tonne Code ich geerbt, die Embedded SQL Precompiling verwendet, aber die Person, die es geschrieben hat Schreibberechtigung für die Tabelle, und ich nicht, so hoffe ich, bestehenden Code irgendwie anzupassen)

+1

'PRECOMPILE' muss ein Paket in der Datenbank erstellen, die Ihr eingebettetes SQL enthält, von wo die Anforderung' CREATE IN' kommt. Sofern Sie nicht bereit sind, in Ihrem Code zu dynamischem SQL zu wechseln, können Sie nicht vermeiden, das/die Paket (e) zu erstellen. – mustaccio

Antwort

0

Sie benötigen die BINDFILE Option für den PRECOMPILE Befehl zu verwenden, wenn Sie nicht die Möglichkeit haben, Pakete in der Datenbank zu erstellen:

db2 "precompile myapp.sqx BINDFILE USING myapp.bnd OUTPUT myapp.cxx" 

Diese eine Datei generieren, ca myapp.bnd, dass Sie n verwenden (oder an Ihren Datenbankadministrator senden), um das Paket zu einem späteren Zeitpunkt (zusammen mit der Datei myapp.cxx) zu erstellen.

Bitte stellen Sie sicher, dass Sie Ihre Bindedateien sorgfältig mit Ihrem vorkompilierten Code und Binärdateien verfolgen. Die Bindedateien und der generierte Quellcode sind paarweise vorhanden. Wenn Sie also die falsche Bindedatei mit Ihrer Binärdatei angeben, führt dies zu Fehlern bei der Versionskonformität.

+0

Wenn ich das versuche, verschwindet der "no create in" -Fehler und wird durch "no access to" "error ersetzt ... SQL0551N" user "hat nicht die erforderliche Berechtigung oder Berechtigung, um den Vorgang auszuführen" " auf Objekt "database.table.TEMPLATE.()". SQLSTATE = 42501 Die einzige Sache in meiner template.sqc Datei ist eine Hauptfunktion mit "EXEC SQL CONNECT TO mydb Benutzer myuser using mypwd;" und sonst nichts ... bevor ich vorkompiliere, verbinde ich db2 mit der Datenbank und beweise, dass der Benutzername Zugriff darauf hat, was meine App zu tun versucht. – user1253553