Fehler oder Eigenschaft?

Hier geht es um die Verwaltung von Benutzern und Rechten.
Antworten
HeiDieLX
Neuer Benutzer
Beiträge: 16
Registriert: Di 1. Mär 2016, 08:35

Fehler oder Eigenschaft?

Beitrag von HeiDieLX » Fr 24. Mär 2017, 16:02

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
1. hcadmin: Alle Rechte ohne Superuser; Eigner der Datenbank hcdat
2. htr: nur login
3. hd-lmobil: nur login
4. 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)

Code: Alles auswählen

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?
MfG
HeiDieLX
Switi vom Bienwald
OpenSuse 42.1
PostgeSQL 9.4 bzw. 9.5

Antworten