Trigger oder Skript?

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

  • Trigger oder Skript?

    Hallo zusammen,


    Ich hab diesmal kein Problem sondern eine grundsätzliche Frage die zu einer möglichen Lösung führen soll. Weil es je nach Lösung ggf. im falschen Subforum steht, schreib ich das hier hin, weil das Anwendungsziel im Endeffekt nur MySQL betrifft.

    Folgendes ist in überlegung bzw. gilt es bald zu lösen. Ein System mit mehreren Nutzergruppen (und Subgruppen) soll sich, wenn die Benutzerrechte einer beliebigen Gruppe geändert werden, selbstständig anpassen. Dh. Die Rechte für die der zugewiesenen und geänderten Gruppe sollen so angepasst werden, dass sie dem aktuellen Zustand/IST entsprechen.
    Weil mir leider keine InnoDB zur verfügung steht, wo man das eigentlich relativ simple über FKs regeln kann stellt sich mir nun die Frage, ob man sowas zum einen überhaupt triggern kann - und wenn ja, wie - oder ob sowas nur mit zusätzlichen Skript zu schaffen ist.

    Für diese Gruppenzuweisungen und Rechte gibts jeweils mehrere Tabellen: (hier im Beispiel auf das wichtigste gekürzt und zwecks besserer verständlichkeit umbenannt)

    User: UserId, UserName, ...
    Gruppe: id, hauptgruppenid, name, ...
    mitglieder_gruppe: id, userid, gruppenid
    rechte: id, name
    gruppenrechte: id, gruppenid, rechteid
    user_rechte_nm: id, rechteid, userid (für die n:m-Beziehung zwischen User und Rechte)


    Ziel ist nun folgendes:
    Wenn irgendwas in "gruppenrechte" verändert wird (also einer beliebigen Gruppe ein Recht gesetzt/entzogen wird), soll automatisch auf die user_rechte_nm angepasst werden - auf letzterer basieren die Rechte des Nutzers. Dh. also, dass der Trigger auslesen, vergleichen und ggf. anpassen (setzen/entziehen) müsste und das anhand der userid. Ist das überhaupt möglich, um mal wieder zur eigentlichen Kernfrage des Threads zu kommen, oder geht das nur über ein zusätzliches Skript welches bei einem solchen Vorgang gestartet wird?

    Das MySQL-Handbuch ist was Trigger-Beschreibungen angeht sehr bescheiden, daher weiss ich einfach nicht ob sowas möglich ist. Hatte bisher auch nie mit Triggern gearbeitet - was es nicht einfacher macht. *g*

    Gruss

  • #2
    Hallo,

    kannst du bei deinem Hoster überhaupt Trigger benutzen? Hast du die Rechte dafür? Das ist nämlich auch nicht bei jedem der Fall und wenn dir schon kein InnoDB zur Verfügung steht, ist es nicht sehr wahrscheinlich, dass du triggern darfst.

    Edit: Mal 'ne andere Frage - wieso speicherst du eigentlich die Nutzerrechte einzeln? Die sind doch über die Gruppenzugehörigkeit schon zugeordnet.

    Gruß,

    Amica
    Zuletzt geändert von AmicaNoctis; 27.01.2010, 01:17.
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Zitat von medium22 Beitrag anzeigen
      Weil mir leider keine InnoDB zur verfügung steht, wo man das eigentlich relativ simple über FKs regeln kann
      Überlegung - betreibe ich für etwas erhöhten Aufwand, oder sorge ich dafür, dass mir die nötige Technik zur Verfügung gestellt wird?

      Also ich würde zu letzterem tendieren.
      InnoDB ist ja nun nichts derart exotisches und absonderliches, dass man die Aufnahme ins Voraussetzungsprofil nicht rechtfertigen könnte.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Hallo,


        Hatte da schonmal mit dem Kundenservce telefoniert und auch gegen mein Angebot, einen kleinen Aufpreis zu bezahlen, wird es keine InnoDB geben.
        Ob ich überhaupt Trigger nutzen kann? Gute Frage... Wie kann ich sowas prüfen, bzw. wo in der Konfiguration nachlesen?

        Kommentar


        • #5
          Du kannst das überprüfen, indem du folgenden Befehl absetzt:

          Code:
          create trigger testtrigger before insert on [I]TABELLENNAME[/I] for each row set @a = 1;
          Statt TABELLENNAME musst du einen gültigen Tabellennamen benutzen. Wenn keine Fehlermeldung kommt, darfst du Trigger benutzen und solltest den dann auch wieder löschen:

          Code:
          drop trigger testtrigger;
          Gruß,

          Amica
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #6
            Und ich dachte schon man könnte das in der Konfiguration nachlesen.

            Code:
            #1227 - Access denied; you need the SUPER privilege for this operation

            Dann bleibt mir also nur der Umweg über ein Skript. (oder ein Wechsel des Hosters, was ich zZ. aber ausschliesse)


            Danke!

            Kommentar


            • #7
              Kannst du das bitte erstmal beantworten?

              Zitat von AmicaNoctis Beitrag anzeigen
              Mal 'ne andere Frage - wieso speicherst du eigentlich die Nutzerrechte einzeln? Die sind doch über die Gruppenzugehörigkeit schon zugeordnet.
              Ich vermute, dass du das, was du vorhast, gar nicht brauchst. Das riecht nämlich verdächtig nach einem Designfehler.
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                Weil es in mit meinen Möglichkeiten so einfacher ist auf einzelne Rechte zuzugreifen ohne bei jedem Seitenaufruf ein 'riesen-ding' auf mysql loszulassen. Im Endeffekt soll die ganze Seite (die im übrigen nur durch ein login betretbar ist) so funktionieren, dass so ziemlich alles nur über vorhandene Rechte angezeigt wird - oder eben nicht. Ich brauche da immer den Rechtenamen (bzw. die Abkürzung/Benennung) über die das gesteuert wird (bzw. werden soll)
                Siehe dazu auch andere Threads von mir in den letzten paar Wochen *g*

                Kommentar


                • #9
                  Ich weiß schon, ich erinnere mich an deine Threads, aber was ist einfacher: bei jeder Änderung der Gruppenrechte die Benutzerrechte zu aktualisieren oder gleich die Gruppenrechte abzurufen? Um MySQL mache ich mir bei letzterem absolut keine Sorgen. Eine DB zu denormalisieren, um einen Join zu sparen, ist absolut der falsche Ansatz. Wenn du das durchziehst, ärgerst du dich später nur, denn irgendwas wird dabei irgendwann schiefgehen.
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Kommentar


                  • #10
                    Da hast Du natürlich - wie (fast) immer - Recht!
                    Grade wenn ich daran denke, wie oft da Neues hinzu kommt und/oder etwas geändert/angepasst wird, macht es auf die andere Weise viel mehr Sinn, ist viel dynamischer und vor allem viel pflegeleichter als mein Entwurf.

                    Der Herr dankt!

                    Kommentar

                    Lädt...
                    X