Hallo,
bin mir nicht sicher ob das hier richtig ist. Habe jedoch auch keine passendere Stelle gefunden.
gegeben:
PostgreSQL 9.5.1/Windows 7
LOGIN ROLE
- hcadmin: Alle Rechte ohne Superuser; Eigner der Datenbank hcdat
- htr: nur login
- hd-lmobil: nur login
- hd-arbeit: nur login
Gruppenrolle: grphtr, ist nur da.
Mitglieder: htr, hd-lmobil und hd-arbeit
Rechte auf alle tabellen und sichten: select, update, insert, delete
Rechte auf alle Sequenzen select, update
In den Filtertabellen sind die rechte gem. “Row-Level Security and Policis” auf die Zeilen des jeweiligen angemeldeten Benutzer beschränkt.
Problembeschreibung:
Anmeldung als hcadmin
hcdat=> SELECT fltwohn_ben, fltort, fltstr, fltetcid1 from hc_fltwohn;
fltwohn_ben | fltort | fltstr | fltetcid1
-------------±-------±--------±----------
hd-lmobil | landau | cornich | 1756
htr | frankf | | 988
hd-arbeit | landau | corn | 3222
(3 Zeilen)
gebraucht wird nur der wert aus fltetcid1, die anderen Felder dienen nur der Übersichtlichkeit.
Nun Anmeldung als Benutzer htr;
hcdat=> SELECT fltwohn_ben, fltort, fltstr, fltetcid1 from hc_fltwohn;
fltwohn_ben | fltort | fltstr | fltetcid1
-------------±-------±-------±----------
htr | frankf | | 988
(1 Zeile)
jep, soweit als richtig
Nun wieder als hcadmin
Den oberen select nun als Unterabfrage um an die eigentlich gewünschten daten zu kommen.
hcdat=> SELECT sc.inhalt, k.kwert FROM hc_kont k, hc_schl sc WHERE k.vid_kschl =
sc.id_schl and k.vid_pers = (SELECT fltetcid1 FROM hc_fltwohn) LIMIT 6;
FEHLER: als Ausdruck verwendete Unteranfrage ergab mehr als eine Zeile
hcdat=>
jo, hatte ich so erwartet.
Benutzer htr:
hcdat=> SELECT sc.inhalt, k.kwert FROM hc_kont k, hc_schl sc WHERE k.vid_kschl =
sc.id_schl and k.vid_pers = (SELECT fltetcid1 FROM hc_fltwohn) LIMIT 6;
inhalt | kwert
-------------------±--------------------------
Telefon übernahme | 069/816049 Herrn Krause
(1 Zeile)
sensationell, funktioniert wie gewünscht.
so nun das ganze in einen View gepackt: (hat der hcadmin gemacht)
hcdat=> CREATE VIEW v_svkont AS
SELECT sc.inhalt, k.kwert FROM hc_kont k, hc_schl sc WHERE k.vid_kschl =
sc.id_schl and k.vid_pers = (SELECT fltetcid1 FROM hc_fltwohn) LIMIT 6;
CREATE VIEW
und nun kommt dies
hcdat=> select * from v_svkont;
FEHLER: als Ausdruck verwendete Unteranfrage ergab mehr als eine Zeile
Ist das nun ein Fehler oder gehört das so?