Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 29

Thema: View oder Tabelle je nach User

  1. #1
    waldi ist offline Benutzer
    Registriert seit
    22.12.2006
    Beiträge
    67

    Standard View oder Tabelle je nach User

    Hallo PG'ler

    Ich möchte das wenn sich Leute aus der Rolle x anmelden diese die Tabelle Person sehen. Wenn sich Leute aus Y anmelden sollen sie statt Person die View PersonV sehen.

    Kann ich sowas machen? Irgendwie Automatisch? mit Trigger? Script? Transaktion???

    Wenn ja wie??

    Vielen Dank im vorraus für die Eventuelle Antwort ;-)


    Waldi

  2. #2
    ads
    ads ist gerade online Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.055

    Standard

    Gar nicht.

    Du kannst über Zugriffsrechte regeln, wer auf welche Tabelle oder welchen View zugreifen darf. Aber das die Tabellen oder Views vorhanden sind, kannst du nicht verstecken.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  3. #3
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von waldi Beitrag anzeigen
    Hallo PG'ler

    Ich möchte das wenn sich Leute aus der Rolle x anmelden diese die Tabelle Person sehen. Wenn sich Leute aus Y anmelden sollen sie statt Person die View PersonV sehen.

    Vielen Dank im vorraus für die Eventuelle Antwort ;-)

    Waldi
    Vielleicht versteh ich dich flasch.

    Also, Du willst, daß User X was anderes als User Y sieht? Falls das _so_ ist:

    In der Tabelle speicherst Du noch ein Feld für den aktuellen User. Wer sich anmeldet, setzt damit auch die Variable current_user. Und dann machst Du einen VIEW auf die Tabelle mit der Bedingung, daß Deine Spalte = current_user ist. Dann sieht X was anderes als User Y.
    Die originale Tabelle sollte natürlich nicht für alle abfragbar sein...

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  4. #4
    waldi ist offline Benutzer
    Registriert seit
    22.12.2006
    Beiträge
    67

    Standard

    Es geht bei mir in erster Linie Darum:

    Ich habe in der Tabelle Person Daten gespeichert die manche User nicht sehen dürfen/sollen. Andere User dürfen das sehen. Klar jetzt kann ich eine View erstellen in der nur die Daten stehen die alle sehen dürfen.

    Wie soll ich das aber Programiertechnisch lösen? Die Benutzer loggen sich in meinem Programm ein. Woher soll das Programm samt den ganzen SQL Abfragen wissen das wenn der und der User angemeldet ist die Abfragen auf die View abgesetzt werden und bei den anderen Usern auf die Tabelle?

    Daher kommt meine Frage. Kann man das irgendwie anderst lösen, anderst wie ich gedacht habe?? Es wäre ja eigentlich schon damit getan wenn man so eine Regel erstellen könnte Wenn du in dieser Tabelle nichts siehst dann guck doch bei der Tabelle/View

    @akretschmer: Ich steig da noch nicht so ganz durch. Was steht denn in der extra Tabellenspalte?? Und dann kann ich alle Abfragen auf die View machen und der eine User bekommt alles von der Tabelle zu sehen und der andere nur ein Teil? Ich kann mir das bei deiner Methode irgendwie nicht so vorstellen.

  5. #5
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von waldi Beitrag anzeigen
    Es geht bei mir in erster Linie Darum:

    Ich habe in der Tabelle Person Daten gespeichert die manche User nicht sehen dürfen/sollen. Andere User dürfen das sehen. Klar jetzt kann ich eine View erstellen in der nur die Daten stehen die alle sehen dürfen.

    Wie soll ich das aber Programiertechnisch lösen? Die Benutzer loggen sich in meinem Programm ein. Woher soll das Programm samt den ganzen SQL Abfragen wissen das wenn der und der User angemeldet ist die Abfragen auf die View abgesetzt werden und bei den anderen Usern auf die Tabelle?
    PG weiß, wer eingeloggt ist. Dieses Wissen kann man nutzen.


    @akretschmer: Ich steig da noch nicht so ganz durch. Was steht denn in der extra Tabellenspalte?? Und dann kann ich alle Abfragen auf die View machen und der eine User bekommt alles von der Tabelle zu sehen und der andere nur ein Teil? Ich kann mir das bei deiner Methode irgendwie nicht so vorstellen.
    Code:
    test=# create table geheim (username text, info text);
    CREATE TABLE
    Time: 148.329 ms
    test=*# insert into geheim values ('kretschmer', 'geheim1');
    INSERT 0 1
    Time: 5.369 ms
    test=*# insert into geheim values ('foo', 'geheim2');
    INSERT 0 1
    Time: 0.864 ms
    test=*# commit;
    COMMIT
    Time: 6.919 ms
    test=# create view view_geheim as select * from geheim where username=current_user;
    CREATE VIEW
    Time: 150.246 ms
    test=*# select * from view_geheim ;
      username  |  info
    ------------+---------
     kretschmer | geheim1
    (1 row)
    
    Time: 1.903 ms
    test=*# commit;
    COMMIT
    Time: 47.951 ms
    test=# \q
    kretschmer@KanotixBox:~$ psql -U foo test
    Timing is on.
    Welcome to psql 8.1.2, the PostgreSQL interactive terminal.
    
    Type:  \copyright for distribution terms
           \h for help with SQL commands
           \? for help with psql commands
           \g or terminate with semicolon to execute query
           \q to quit
    
    test=# select * from view_geheim ;
     username |  info
    ----------+---------
     foo      | geheim2
    (1 row)
    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  6. #6
    waldi ist offline Benutzer
    Registriert seit
    22.12.2006
    Beiträge
    67

    Standard

    Das ist wunderbar. Es gibt aber mehrere User soll ich dann mehrere Spalten anlegen??

    Es geht bei mir nicht um zeilenweise beschränkung sondern nur um Spalten. Die einen User sollen alles sehen die anderen Nur Vor und Nachname.

    PG weiß, wer eingeloggt ist. Dieses Wissen kann man nutzen.
    Auf gut Deutsch ich muss in meinem Programm Schreiben. if (pguser == 1){select view} else {select tabelle};

    Ich weis nicht gibts da nicht wirklich was anderes??


    Sorry das ich mich anscheinend so undeutlich ausdrücke.

  7. #7
    ads
    ads ist gerade online Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.055

    Standard

    Zitat Zitat von waldi Beitrag anzeigen
    Sorry das ich mich anscheinend so undeutlich ausdrücke.
    Mal eine ernsthafte Frage: hast du dich einmal ernsthaft mit den Zugriffsbeschränkungen, die PG bereitstellt, auseinandergesetzt?

    Du lässt halt niemanden direkt auf die Tabelle sondern stellst einen oder mehrere Views bereit. Je nach erlaubten Rechten kann ein User auf einen oder mehrere Views zugreifen und sieht damit genau die Spalten, die du ihm zu sehen erlaubst.

    Wenn das dein Problem nicht löst, verstehe ich wohl dein Problem nicht richtig.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  8. #8
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von waldi Beitrag anzeigen
    Das ist wunderbar. Es gibt aber mehrere User soll ich dann mehrere Spalten anlegen??

    Es geht bei mir nicht um zeilenweise beschränkung sondern nur um Spalten. Die einen User sollen alles sehen die anderen Nur Vor und Nachname.
    Code:
    test=# create table geheim (col1 int, col2 int, col3 int);
    CREATE TABLE
    test=*# create view view_geheim as select col1, case when current_user = 'erlaubt' then col2 else null end, col3 from geheim;
    CREATE VIEW
    test=*# insert into geheim values (1,2,3);
    INSERT 0 1
    test=*# select * from geheim ;
     col1 | col2 | col3
    ------+------+------
        1 |    2 |    3
    (1 row)
    
    test=*# select * from view_geheim ;
     col1 | case | col3
    ------+------+------
        1 |      |    3
    (1 row)
    mein Login matcht halt grad nicht auf 'erlaubt'...


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  9. #9
    waldi ist offline Benutzer
    Registriert seit
    22.12.2006
    Beiträge
    67

    Unglücklich

    Mal eine ernsthafte Frage: hast du dich einmal ernsthaft mit den Zugriffsbeschränkungen, die PG bereitstellt, auseinandergesetzt?
    Ja das habe ich. Mir ist ja auch klar das ich Rechte auf eine View und Tabelle Legen kann. Das Híer ist mein eigentliche Problem:

    Wie soll ich das aber Programiertechnisch lösen? Die Benutzer loggen sich in meinem Programm ein. Woher soll das Programm samt den ganzen SQL Abfragen wissen das wenn der und der User angemeldet ist die Abfragen auf die View abgesetzt werden und bei den anderen Usern auf die Tabelle?
    Momentan ist es ja so das ich bei der einen Gruppe auf die View die Abfrage ausführen muss und bei den anderen auf die Tabelle. Das möchte ich halt verhindern, da dies ein sehr großer Implementierungsaufwand benötigen würde. Am einfachsten kann man sich die Sache so vorstellen: Ich mache Select * From Person. Bei der einen Gruppe bekomm ich nur den Vornamen und Namen zurück und bei den anderen eben alles.

    @Akretschmer: Dankeschön erstmal. Ich werde das mal versuchen. Wenn ich die ganze Sache geschafft habe Poste ich die Lösung. Aber ich muss die Abfrage hier ja auch entweder auf die View ausführen oder auf die Tabelle und das ist s.o. :-(

  10. #10
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.465

    Standard

    Zitat Zitat von waldi Beitrag anzeigen

    @Akretschmer: Dankeschön erstmal. Ich werde das mal versuchen. Wenn ich die ganze Sache geschafft habe Poste ich die Lösung. Aber ich muss die Abfrage hier ja auch entweder auf die View ausführen oder auf die Tabelle und das ist s.o. :-(
    Du kannst Dir auch eine SRF (Set Returning Function) schreiben, Du mußt eben _NICHT_ mal auf table und mal auf view selecten oder so.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. Frage Fortlaufende Tabelle/View mit Datum Einträgen
    Von vriza im Forum SQL
    Antworten: 2
    Letzter Beitrag: 07.04.2011, 16:38
  2. Antworten: 0
    Letzter Beitrag: 10.01.2011, 10:26
  3. Frage View oder Funktion
    Von GraySoft im Forum Allgemeines
    Antworten: 2
    Letzter Beitrag: 08.05.2009, 14:49
  4. Frage Tabelle als Parameter in View
    Von christophW im Forum SQL
    Antworten: 8
    Letzter Beitrag: 10.03.2009, 13:43
  5. Kein zweiter User nach Installation
    Von mgruber82 im Forum Benutzer- & Rechteverwaltung
    Antworten: 2
    Letzter Beitrag: 03.02.2007, 23:26

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum