2 Fragen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 2 Fragen

    Hallo,

    zwei kleine simple Fragen.

    (1) Wie kann ich erreichen, ob man PHP mit exec(); zum Bleistift anweisen kann Kommandos auf der Unix-Konsole ausführen, oder nicht? In dem ich dem Benutzeraccount, unter dem PHP und respektive auch der Webserver läuft einer gültige Shell gebe oder nicht, oder?

    (2) Ein kleines MySQL-Eleganz-Problem. Ich habe ein Mehrbenutzersystem, in dem Benutzer bestimmte Rechte haben. Ich möchte alle beide Sachen dynamisch halten. Das heißt ich will durch den Eintrag eines neuen Records entweder einen neuen Benutzer hinzufügen, oder einem Benutzer neue Rechte geben/entziehen oder gar ein neues Recht erfinden?

    Habe bisher 2 Ansätze:

    (a) entweder eine Tabelle mit 2 Spalten: Benutzer und Recht (hier würde das bloße Vorhandesein eines Records mit einem Benutzer und einem bestimmten Recht über den Erhalt des Rechtes entscheiden. Hat als Benutzer xyz in der Rechtetabelle keinen Record, der meinentwegen als Recht "mysql_beschreiben", so hat er dieses Recht automatisch nicht. Er hat nur die, mit denen er in der Tabelle aufgeführt ist.
    Vorteil: Rechte lassen sich leicht geben und entziehen.
    Nachteile: Ich habe viele Records in dieser Tabelle, wobei von 100 zum Beispiel 99 Benutzer xyz gehören - Verschwendung das Benutzerfeld immer wieder mit dem selben Benutzernamen zu beschreiben.

    Tabelle könnte so aussehen:

    nick right

    Benutzer_1 mysql_administration
    Benutzer_1 mysql_reboot
    Benutzer_14 serverlog_lesen
    Benutzer_1 mysql_beschreiben
    Benutzer 15 dateisystem_beschreiben
    Benutzer_14 serverlog_truncate

    (b) oder eine Tabelle, die als erste Spalte den Benutzer hat und alle weiteren Spalten respräsentieren Rechte. Beispiel

    nick mysql_schreiben mysql_booten mysql_admin serverlog_admin
    Benutzer_1 Y Y N Y
    Benutzer_3 N Y N Y

    Neue Rechte müssten über den ALTER-Syntax hinzugefügt oder entfernt werden.
    Vorteil: weniger Records
    Nachteil: leere Felder entstehen beim Hinzufügen von Rechten, eingeschränkte Benennung der Rechte aufgrund der MySQL-Spaltennamen-Konvention

    Was meint ihr?

    Danke für eure Zeit.

  • #2
    Re: 2 Fragen

    Original geschrieben von MaxPayne
    Was meint ihr?
    dass das weniger unter PHP gehört, und ich dich deshalb zum brainstorming verschiebe *g*
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Fein, wenn du jetz noch ne Antwort für mich hast, biste klasse

      Kommentar


      • #4
        naja kommt drauf an wie du dir das vorstellst....

        hab auch 2 anstätze

        entweder du machst ne rechte tabelle

        t_rechte
        id| bezeichnung
        1, mysql_reboot
        2, mysql_read
        3, server_log_lesen

        und ne 2. tabelle wo drinsteht welcher user welche rechte hat

        t_userhatrechte
        id_user, id_recht
        1, 1
        1,2
        2,3

        etc...
        wenn du nen neues recht hast fügste das in die tablle t_rechte ein und anschliessen din die tabelle t_userhatrechte


        anderer vorschlag is, dass du das ganze mit kategorien machst
        also
        kategorie1: administrator (darf alles... mysql_reboot etc)
        kategorie2: user (darf nur lesen z.b.)

        dafür würd ich folgende tabelle machen
        t_rechtekategorie
        id_cat, mysql_reboot, lesen, schreiben
        1,Y,Y,N
        2, N,N,Y

        und jetzt jedem user die id_cat zuweisen
        t_user
        id_User| id_cat
        1,1
        2,1

        ich favorisiere dabei die Variante 1
        vll. definierst du deine problemstellung nen bissl genauer, damit man dir weiter helfen kann

        greetz
        Marskuh

        Kommentar


        • #5
          Re: 2 Fragen

          Hallo MaxPayne


          Original geschrieben von MaxPayne
          [...]
          Nachteil: leere Felder entstehen beim Hinzufügen von Rechten
          [...]
          Nimm 'mal Dein 1. Vorschlag (alles untereinander) und schreib' einen User mit ein paar Einträgen wie
          "mysql_administration"
          Da brauchst Du mehr bytes als bei der 2. Lösung.
          Es ist trotzdem egal da Du ja wohl keine 100.000 user hast.

          Den 2. Vorschlag (Rechte in Spalten) finde ich deshalb besser weil die "echten" MySQL-user genau so verwaltet werden (mysql.user).

          Je nach dem musst Du ja beim Auslesen auch alle Rechte von einem user wissen.
          Dann hast Du alles so wie Du es brauchst zusammen statt mehreren SQLs oder einer Schleife mit noch einer Überprüfung.

          Kommentar


          • #6
            Nachtrag:
            Stell Dir vor Du musst irgendwann auch Rechte pro Tabelle vergeben.
            Da hast Du dann statt einem simplen join richtig was zu tun!

            Kommentar

            Lädt...
            X