Wie bekommt man die Benutzerrechte aus der mysql.user DB Abgefragt?

Davicito

Erfahrenes Mitglied
Hallo,
ich habe User auf meinem lokalen MySQL-Server - in mysql.user - eingerichtet und mit den passenden Rechten ausgestattet.
-> GRANT <user_rights> ON <database_name>.* TO <user> IDENTIFIED BY <password> WITH GRANT OPTION

Nun kommen bei bestimmten Aktionen, mittels PHP, so unschöne Benachrichtigungen vom MySQL-Server, wenn ein User mit nicht ausreichenden Rechten eine DB-Anfrage startet.

Ich wollte hierzu gerne mit If-Abfragen, Aktionen sperren lassen, falls keiner das passende Recht eingeräumt bekommen hat, um ebend so die unschönen Meldungen, auf den Webseiten weg zubekommen.
Dazu muss ich auch irgendwie die Rechte sehen bzw. abfragen können im eine If-Abrage zu formulieren.
Das Ganze scheitert schon bei der Abfrage von den Rechten, aus der user-Tabelle der mysql-Datenbank.

Ausprobiert habe ich:
PHP:
...
$info = mysql_query("SHOW GRANTS FOR 'user'@'localhost'");
echo $info;
...

Und auch mittels SELECT:
PHP:
...
$info = mysql_query("SELECT 
                                        u.Select_priv,
                                        u.Insert_priv,
                                        u.Delete_priv 
                                  FROM 
                                        user AS u 
                                  WHERE $_SESSION['online_user']'");
echo $info;
...

Ich bekomme durch echo meistens immer aune Ausgabe von: Resource id #8; Resource id #11; Resource id #10 oder Resource id #9, mit denen ich nichts anfangen kann.

Hilfe...

Gruß.
 
Zuletzt bearbeitet:
Salü

Du hast das Fetchen vergessen.

wird nur ein Datensatz kommen:
PHP:
$data =mysql_fetch_row ($info);
print_r($data);

oder kommen mehrere Datensätze:
PHP:
while($data = mysql_fetch_row($info)){
     print_r($data);
}

Anstatt , mysql_fetch_row gibt es natürlich noch mehrere andere Funktionen, welche du benützen kannst, um auf die Daten zu zugreifen.

Hoffe ich konnte dir behilflich sein
 
Hallo Xbouch,
danke dir.. das war die Lösung ^^.
Ja es hat sich nur um einen Datensatz gehandelt.

nun bekomme ich allerdings den einen Datensatz als kommplettes SQL GRANT ausgegeben
-> GRANT SELECT, INSERT, UPDATE ON *.* TO 'user'@'localhost' IDENTIFIED BY PASSWORD '*password' WITH GRANT OPTION.

möchte ich jetzt nur die Rechte aus dem String erhalten, muss ich ja einen Parser bauen um zu Filtern... Aber dazu bin ich echt zu faul. Gibt es da ne elegantere Methode um an die Rechte gezielt zu kommen?
 
Probiers mal so:

PHP:
$sql = "SELECT u.Select_priv, u.Insert_priv, u.Delete_priv FROM  user AS u WHERE User ='".$_SESSION['online_user']."'":
$info = mysql_query($sql);

$data =mysql_fetch_row ($info);
print_r($data);
 
Da kommt folgende Warnung:

Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\CheckUserControl.php on line 23

PHP:
...
      $info = mysql_query('SELECT 
						u.Select_priv, 
						u.Insert_priv, 
						u.Delete_priv 
				FROM  
						user AS u 
				WHERE User = '.$_SESSION['Usuario'].'');

23       $data = mysql_fetch_row($info);
24 	   print_r($data);
...
 
Zuletzt bearbeitet:
DAs heisst, dass dein query, kein resultat gab...

Kannst du mal dies probieren, und das resultat posten?
(mein beispiel)
nach

PHP:
 $sql = ".....";
echo $sql;

wenn im Query User='' steht.. ist die Variable in der $_Session leer

Zudem kann dein Query nicht funktionieren. Bitte probiere mal mein Beispiel.
 
nochmals...

das .... hätte dein query ersetzen sollen:

PHP:
/* Gibt den Inhalt der kompletten Session aus */
print_r($_SESSION);
echo "<br />";

$sql = "SELECT u.Select_priv, u.Insert_priv, u.Delete_priv FROM  user AS u WHERE User ='".$_SESSION['online_user']."'":

/* gibt den SQL Query aus */
echo $sql;
$info = mysql_query($sql);

$data =mysql_fetch_row ($info);
print_r($data);

Was steht im SQL Query...
 
Ich hab es jetzt hinbekommen...

Jetzt taucht durch: mysql_query($info) ; Fehler: Query was empty auf.

PHP:
...
$info = mysql_query('SELECT 
						u.Select_priv, 
						u.Insert_priv, 
						u.Delete_priv 
					FROM  
						user AS u 
					WHERE User = '.$_SESSION['Usuario'].'');

$info = mysql_query($info) OR die('Fehler: '. mysql_error());
						
$data = mysql_fetch_array($info);
//print_r($data);
...
 
PHP:
$info = mysql_query("SELECT 
                        u.Select_priv, 
                        u.Insert_priv, 
                        u.Delete_priv 
                    FROM  
                        user AS u 
                    WHERE User = '".$_SESSION['Usuario']."'");

Dein query ist falsch
 
Zurück