PDA

View Full Version : Berechtigung per SQL auf Index vergeben



HEBORA
15-04-20, 07:53
Hallo *all,

ich habe eine Tabelle mit SQL erstellt und zu dieser Tabelle einige Indexe.
Auf diese Indexe greif ich mit SQLRPGLE zu, was auch wunderbar funktioniert.
Allerdings haben die User keine Berechtigung auf die Indizes.
Wie kann ich mit SQL die Berechtigung so vergeben, das der User auch darauf zugreifen kann.
Mit Gant bekomme ich immer die Meldung:
"DATEI" in "LIB" keine Tabelle, Sicht oder physische Datei.
Vielen Dank für eure Hilfe.

Gruß Heinfried

Fuerchau
15-04-20, 08:49
Eine Zugriffsberechtigung auf Indizes ist nicht nötig, da du per SQL einen Index nicht abfragen kannst.
SQL wählt einen Index selber aus. Du brauchst also nur die Berechtigung für die Tabelle.

HEBORA
15-04-20, 09:42
Bei SQL mag das so sein. Aber wenn ich mit SQLRPGLE auf den INDEX ( welcher vom RPG als LF erkannt wird) bekommt der User ein Berechtigungsproblem. Wenn ich dann die Berechtigung z.B. über WRKOBJ auf die "LF" (INDEX) vergebe, sind die Berechtigungsprobleme wie weg geblasen.
das sind dann aber immer zwei Scritte, die ich machen muss. Würde das lieber gleich im SQL erledigen

Fuerchau
15-04-20, 11:07
Tja, das ist die "böse Tat" wenn man SQL und Native vermischt.
Rein technisch gesehen solltest du dann eine DDS-LF (wie früher auch) erstellen, dann hast du nur einen Schritt.
So musst du nachdem SQL Create Index halt noch per CLP einen CHGOBJAUT hinterher schicken.

Allerdings hilft dir ggf. die Einstellung per CHGLIB für die Berechtigung neuer Objekte für diese Lib.
Diese Funktionalität wird häufig vergessen oder ist sogar unbekannt.
https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_72/cl/chglib.htm#CHGLIB.CRTAUT

BenderD
15-04-20, 11:40
... der CRTAUT zieht allerdings nicht bei naming(*SQL) bei der Erstellung, selbiger führt immer zu publi exclude.

D*B

B.Hauser
15-04-20, 16:15
Ich bin mir nicht sicher, ob Du von Indices oder Views redest.
Auf einen Index kannst Du nur mit Native I/O zugreifen.
Einen Index kann man nicht in SQL angeben, sondern nur eine View.
Also auf was greifst Du denn wie zu?
Hast Du die logische Datei in einen Index konvertiert?
Hattest Du die logische Datei in einem SELECT Statement angegeben? (im übrigen keine gute Idee, weil der Query Optimizer das SELECT Statement basierend auf der physischen Datei/Tabelle neu schreiben muss).

Fuerchau
15-04-20, 17:11
"ich habe eine Tabelle mit SQL erstellt und zu dieser Tabelle einige Indexe."
war doch eigentlich eindeutig;-).

HEBORA
16-04-20, 07:05
Wie schon geschrieben habe ich per create Table eine Tabelle erstellt und dann mit create index verschiedene Indexe mit und ohne where Bedingungen erstellt. Diese können dann in den alten RPG-Programmen als LF mit Key verwendet werden.
Anschließend dann: GRANT SELECT, UPDATE, INSERT ON "Table" TO PUBLIC.
Funktioniert wunderbar. Nur die User haben keine Berechtigung auf die "LF-Dateien", die im RPG verwendet werden.
Das muss extra mit z.B. chgaut für die Indexe angepasst werden. Dann läufts.

HEBORA
21-04-20, 12:57
Habe für mich eine Lösung gefunden:

cl: GRTOBJAUT OBJ(LIB/INDEX) OBJTYPE(*FILE) USER(*PUBLIC) AUT(*USE)

das mit in den Script schreiben und dann das ganze Script ausführen --- fertig.