Announcement

Collapse
No announcement yet.

Show grants for...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Show grants for...

    Hallo,

    ich lese schon den ganzen Tag... leider oft vieles in Englisch.

    Ich möchte mit PHP eine Datenbank erstellen und will vorher noch prüfen ob dies überhaupt geht.

    Dazu benutze ich "SHOW GRANTS FOR..."

    Also ich mach das so.
    PHP Code:
     $dbs $dbh->prepare("SHOW GRANTS FOR '".DB_USER."'@'".DB_HOST."'");
     
    $dbs->execute(); 
    Ob nun "SHOW GRANTS FOR user@host" oder "... FOR CURRENT_USER". Mit einer Verbindung zu MySQL mit meinem Root User bekomm ich dann eher die Liste aller zusätzlichen User und deren Rechte. Das PHP Script kann jedenfalls nicht wissen, ob der Benutzer ein Root User nimmt oder ein anderen. Deshalb möchte ich den verwendeten User prüfen, ob dieser die Rechte hat, eine Datenbank erstellen zu können. Geht das irgendwie? Ich möchte eher vermeiden, eine Test-Datenbank zu erstellen um zu wissen ob der User das darf oder nicht.

    Gruß Eliza und schönes Wochenende noch

    P.s.
    ach... wie schön war das noch mit Text-Dateien zu arbeiten, "fopen" usw. Da wusste man was man macht ;-)

  • #2
    Der User darf immer dann eine DB erstellen, wenn er das Recht dazu hat. Das kann ihm ja nur von einem "höheren" (Admin/Root) zugeteilt werden. Ich verstehe jetzt nicht, warum dein PHP Programm das prüfen muss. Das musst du als Admin wissen, wer das darf.

    Weiter ist es wohl fahrlässig in einem externen Programm irgendwie die Eingabe von User und Passwort zuzulassen und dann x-beliebigen den Zugriff zu erlauben.

    Ebenso erstellt das Programm keine Datenbank, sondern die wird vorher angelegt und dem Programm die Zugangsdaten mitgeteilt (Konfiguration)

    Also so ganz verstehe ich den Sinn nicht. Der Link in dem anderen Beitrag für zu den Rechten

    http://dev.mysql.com/doc/refman/5.1/de/grant.html

    Somit kannst/könntest du diese lesen und setzen
    Zuletzt editiert von Christian Marquardt; 09.11.2013, 21:31.
    Christian

    Comment


    • #3
      Ok, eines muss ich korrigieren.
      Ich möchte mit PHP eine Datenbank erstellen und will vorher noch prüfen ob dies überhaupt geht.
      Also "...erstellen lassen." Die eigentliche Arbeit macht ja MySQL.

      Also es geht um ein Installationscript. Stell es dir wie bei Wordpress vor. Da gibt der Benutzer seine MySQL-Daten ein, damit Wordpress entsprechend installiert werden kann, sprich WP die erforderlichen Tabellen anlegen kann. Also kann ich, der ein CMS vielleicht zur Verfügung stellen möchte oder auch der Wordpress-Programmierer niemals wissen, welche MySQL-Verbindungsdaten der Benutzer eingibt. Jedenfalls benötigt mein zukünftiges CMS auch eine Datenbank und möchte wenn möglich es dem Anwender einfach machen. Also will er mit seinem MySQL Root User die Installation fortsetzen wollen (was nicht Pflicht ist) dann will ich dies durch PHP prüfen. Also ich will die Rechte prüfen. Wenn er Datenbanken erstellen darf, bekommt der Anwender die Information bzw. eine Schaltfläche "Datenbank erstellen" und wenn er die Rechte nicht hat, wird diese Schaltfläche erst gar nicht angezeigt und nur aus einer Liste kann er eine vorhandene (die ich mit "SHOW DATABASES" ermittle) Datenbank auswählen.

      Es bringt nichts wenn ich selbst Rechte setze oder lösche. Darum geht es nicht. Ich dachte mit "SHOW GRANTS FOR..." kann ich herausfinden ob der aktuelle MySQL User der im Installationsscript vom Anwender eingegeben wurde, die Rechte hat um Datenbanken erstellen zu können. Aber das geht nicht richtig.

      Eliza

      Comment


      • #4
        Mir geht's da so ein wenig wie dem Herrn Christian Marquardt... von wegen Sinn und so...

        Darüber hinaus: Warum so viel Rechte für das Installationsskript bzw. den mysql- Benutzer verlangen? Man versucht da doch mit wenig auszukommen! Tabellen anlegen sollte doch zu 99% reichen! Dann wird das auch z.B. was auf managed webspace usw...

        mit dem Ansprich die Datenbank anzulegen schaffst du dir doch nur Probleme .. Frage: Warum denn das?

        Comment


        • #5
          Wenn Du so ein offenes Verfahren anbieten möchtest, dass
          - dem Anwender so viel Freiheitsgrade bietet
          - interaktiv Buttons ein- /ausblendet
          - abhängig von User-Rechten und
          - wählbaren Pfaden/Vorgehen

          musst Du Dir wohl die Mühe machen, diese Dinge schritt für Schritt zu prüfen.

          Alle notwendigen Rechte kannst Du im Dictionary abfragen, je User. Hier wäre es vermutlich "Create Database" (die genaue Syntax variiert je System- mysql kenne ich nicht auswendig- und bietet oft unterschiedliche Granularität bzw. physikalische Optionen).

          Häufig werden Systeme aber mit gewissen Voraussetzungen entwickelt, die dann schlicht in einer Installationsanweisung beschrieben sind. Als Voraussetzung für die Installation wäre dann also ein entsprechend mit Rechten ausgestatteter User genannt, der separat mit den geeigneten Werkzeugen erstellt werden muss.

          Der einfachste Weg, das zu gewährleisten ist ein Grantscript, das durch einen Superuser ausgeführt wird. Auch dieser Superuser muss aber natürlich bekannt sein. An der Stelle sei mal drauf hingewiesen, dass man zwischen OS (root) und DB usern unterscheiden sollte.
          Der OS user "root" ist idealer Weise gar nicht involviert.
          Ein DB User mit Admin Rechten ist notwendig um initial Rechte abzufragen und an andere User zu vergeben.

          Also, wenn das System so komfortabel sein soll, dies alles interaktiv darzustellen, bleibt Dir nichts übrig, als alle diese Rechte abzuprüfen und für den App User zu vergeben.
          Gruß, defo

          Comment


          • #6
            Hallo,

            damit ein User in MySQL eine DB erstellen kann, muss er über das Globale Recht CREATE verfügen. Abfragen kann man dies über das Information-Schema von MySQL:
            [highlight=sql]
            SELECT * FROM information_schema.USER_PRIVILEGES
            WHERE REPLACE(GRANTEE, '\'', '') = CURRENT_USER()
            AND PRIVILEGE_TYPE = 'CREATE'
            [/highlight]

            Gruß Falk

            Anmerkung: Das REPLACE ist hier notwendig, weil wiedereinmal eine "Ungereimtheit" von MySQL zuschlägt. In der Spalte GRANTEE werden die Nutzer in der Form 'username'@'hostname' aufgeführt, während die Funktion CURRENT_USER diesen in der Form username@hostname (also ohne ') liefert.
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Hallo,
              danke Euch für die Antworten. Da nicht so jeder den Sinn versteht, möchte ich nochmals erklären...

              Das Installationsskript verlangt nicht, dass man eine neue Datenbank anlegt. Es wird die Info gegeben, dass für die Installation ein MySQL-User/Passwort und der Host benötigt wird (Eingabefelder und Button zum Verbinden) und eine neue leere Datenbank die man im Vorfeld anlegen sollte, wird empfohlen (die man im nächsten Schritt dann auswählen kann). Ich möchte nur, nach dem man sich mit dem MySQL Root eingeloggt hat (oder mit einem anderen User der die Rechte hat Datenbanken zu erstellen), die Möglichkeit bieten, diese zu erstellen. Nach der MySQL Verbindung sollte dann (wenn der eingeloggte User die Rechte hat) die Möglichkeit eine Datenbank zu erstellen sichtbar sein und bei einem normalen User nicht, sondern nur die Auswahl der Datenbanken erscheinen (dies geht schon). Deshalb wollt ich die Rechte prüfen und nicht erst eine Test-Datenbank erstellen, diese wieder löschen um die Rechte zu erfahren. Ein Root-Benutzer hat wohl genügend wissen, wie man mit dem Computer umgeht. Er kann da schnell selbst eine entsprechende Datenbank mit Tools erstellen aber die Möglichkeit mit dem Installationsskript eine Datenbank zu erstellen, dient nur der Benutzerfreundlichkeit. Warum auch nicht, wenn man es programmieren kann.

              Habe bezüglich der "Information-Schema" Datenbank auch mal etwas überflogen aber mich nicht weiter damit beschäftigt. Wenn dort die Infos drin stehen, ist dies ja super. Jetzt fragt sich nur, ob diese Datenbank immer vorhanden ist? Es gibt noch viel zu lernen bezüglich MySQL. Kenne auch nur 2 MySQL Server. Meinen eigenen von meinem Hosting-Anbieter und was kostenloses. Dort existieren jedenfalls diese "Information-Schema" Datenbanken. Ist dies überall so und nennt die sich immer gleich bei MySQL? Auch bei verschiedenen MySQL Versionen? Das wäre schon wichtig zu wissen***, wenn ich dort für eine Programmausführung (also für das Installationsskript) Daten entnehme.

              *** Manchmal scheinen Dinge/Befehle/Funktionen... auch gesperrt zu sein. Wie die Funktion "phpinfo()". Hatte erst gestern gelesen, dass nicht alle auf diese Funktion zugreifen dürfen.

              Eliza

              Comment


              • #8
                möchte nur, nach dem man sich mit dem MySQL Root eingeloggt hat (oder mit einem anderen User der die Rechte hat Datenbanken zu erstellen), die Möglichkeit bieten, diese zu erstellen.
                Wozu? Das bedeutet, dass einer mit Root-(Create-)rechten auf der DB das Programm zum erstenmal starten MUSS?

                Warum auch nicht, wenn man es programmieren kann.
                Weil üblicherweise der Betrieb nicht derjenige ist, der auch die Anwendung benutzt

                Er kann da schnell selbst eine entsprechende Datenbank mit Tools erstellen aber die Möglichkeit mit dem Installationsskript eine Datenbank zu erstellen, dient nur der Benutzerfreundlichkeit.
                Nein, s.o. Und außerdem bietest du die Möglichkeit alle Einstellungen vorzunehmen? (Engineauswahl u.v.m). Des Weiteren wird ein Benutzer für das Schema angelegt. das machst du auch? Also wird ein erfahrener Benutzer dann doch wieder die zusätzlichen Einstellungen woanders vornehmen
                Christian

                Comment


                • #9
                  Ich glaub das Missverständnis ist folgendes:

                  Ich würd (d)einem Installationsskript die Rechte garnicht einräumen wollen... und das geht den Meisten wohl so - sofern sie die überhaupt haben..

                  Comment


                  • #10
                    "trömmel"... man muss kein Root-User benutzen. Das schrieb ich schon. Nur wenn man möchte und in diesem Fall soll mein Installationsskript es nur anbieten, eine Datenbank zu erstellen bzw. (nicht das Christian es wieder erwähnt) mein Skript soll anbieten, dass durch PHP am Ende MySQL selbst die Datenbank erstellt. ;-)

                    Und Christian, so ganz verstehe ich dich ja nicht. Jedenfalls gibt es keine Engineauswahl, da ich nur eine benutzen werde. Der Anwender programmiert ja nicht in MySQL rum, sondern soll das am Ende lauffähige CMS benutzen können. Ich habe mich mit dem Datenbank anlegen noch nicht weiter beschäftigt. Das Installationsskript geht soweit. Eine "Datenbank erstellen"-Auswahl würde ich zwar noch gerne einbauen aber ich lass das erst mal und programmiere anderes weiter.

                    Trotzdem Danke für eure Hilfe, auch wenn man sich nicht so einig ist ;-)

                    Eliza

                    Comment

                    Working...
                    X