View Full Version : startprogramm / ddmf durchgriff
woodstock99
19-08-08, 14:25
könnte man es evtl so gestalten das man per cl den user ändert? sprich ich rufe das cl als user a auf ( eingeschränkte rechte) . im cl werde ich zu user b mit mehr rechten. dann melde ich mich als user b auf dem zielsystem an und wenn das programm beendet ist werde ich wieder zu user a.
geht das???
dann müsste man nur einen user auf dem zielsystem pflegen.
normalerweise kann es nicht gehen weil dann könnte man ja sich alle recht zusammenkopieren die man braucht.
aber in der verzweiflung kommt man halt auch solche gedanken :(((
Dafür kann man ggf. die API's QSYSGETPH und QSYSETPH verwenden.
Hier kann man sich temporär ummelden.
Der beste Weg ist jedoch hier immer noch SQL, da man beim Connect eben einen User benennen kann, mit dem gearbeitet wird.
Übrigens:
Mit meinem Tool SQLCPY lassen sich gerade solche Probleme lösen, da ja doch meist nur kopiert werden soll ;).
woodstock99
19-08-08, 17:25
danke für den tipp. das tool muß ich leider ausschlagen bzw mein chef würde es nicht wollen :(.
ja aber das verstößt ja gegen jede sicherheitsrichtlinie oder??
heisst dass ich mich in jeden user ummelden kann. sprich user1 hans wird zu user 2 sepp und dieser greift dann auf die ddmfile zu ????
das wär ja super
Genau dafür ist das API gedacht. Allerdings benötigst du dafür ja auch das Kennwort.
Vom Design her kann das durchaus sinnvoll sein.
Stichwort Aplication-User, der grundsätzlich nicht anmeldefähig ist, dem alles gehört und der Laufzeiteigner der Programme ist (*OWNER-Ausführung).
*OWNER reicht leider nicht bei DDM-Zugriffen oder SQL-Connect's.
woodstock99
20-08-08, 08:10
HURRA es klappt.:) :) :)
/* APIs USED: QSYGETPH - Get Profile Handle */
/* QWTSETP - Set Profile */
/* QSYRLSPH - Release Profile Handle */
/* */
/************************************************** *****************/
/************************************************** *****************/
PGM (&USERID &PWD )
DCL VAR(&USERID) TYPE(*CHAR) LEN(10)
DCL VAR(&PWD) TYPE(*CHAR) LEN(50)
DCL VAR(&PWDLEN) TYPE(*CHAR) LEN(4) +
VALUE( X'00000010')
DCL VAR(&PWDCCSID) TYPE(*CHAR) LEN(4) +
VALUE( X'FFFFFFFF')
DCL VAR(&ERRCODE) TYPE(*CHAR) LEN(8) +
VALUE( X'0000000000000000')
DCL VAR(&CURPWD) TYPE(*CHAR) LEN(10) +
VALUE(' ')
DCL VAR(&PRFHNDL1) TYPE(*CHAR) LEN(12)
DCL VAR(&PRFHNDL2) TYPE(*CHAR) LEN(12)
CALL PGM(QSYGETPH) PARM('*CURRENT ' +
&CURPWD &PRFHNDL1)
CALL PGM(QSYGETPH) PARM(&USERID &PWD &PRFHNDL2 +
&ERRCODE &PWDLEN &PWDCCSID)
CALL PGM(QWTSETP) PARM(&PRFHNDL2)
/* Der User wurde verändert PROGRAMMAUFRUF kommt hier rein
*/
CALL PGM(QWTSETP) PARM(&PRFHNDL1)
CALL PGM(QSYRLSPH) PARM(&PRFHNDL1)
CALL PGM(QSYRLSPH) PARM(&PRFHNDL2)
ENDPGM
Also falls mal jemand das gleiche Problem hat. So funktioniert es.
Nachzulesen auch auf der IBM System i and i5/OS Information Center (http://publib.boulder.ibm.com/iseries/) Seite.
Oder was sagen die Profis dazu ???? Passt das so ?? oder könnte man das noch verbessern ??
Das hast du genau richtig gemacht.
woodstock99
21-08-08, 05:39
Ja Wahnsinn. Dann bin ich ja nur halbdoof :). Vielen Dank für die Hilfen..