2012-04-11 11 views
1

Ich frage mich, ob freigegebene Hosts im Allgemeinen Zugriff auf diese Tabelle ihren Benutzern gewähren.Gewähren freigegebene Hosts Zugriff auf INFORMATION_SCHEMAs?

Wäre es in Ordnung, sich darauf zu verlassen, um schnell die aktuelle Datenbankstruktur aus einem Skript zu erhalten?

Meine Idee war es, diese Informationen zu verwenden, um Eingabe lol zu bereinigen. Zum Beispiel: UPDATE table SET field = ?

? kann ein Parameter sein (ich verwende PDO), aber was, wenn ich field eine Variable machen wollte? Da PDO, dass nicht unterstützt, kann ich Daten aus dem Info Schema verwenden, um herauszufinden, ob diese Spalte existiert ...

+0

mürrisch würden Sie die db-Struktur kennen, wenn Sie Daten darin einfügen. –

Antwort

1

All MySQL-Benutzer Zugriff auf SELECT auf information_schema haben wird, aufgrund der Tatsache, dass der Benutzers Muss kann information_schema lesen, um aus Datenbanken lesen zu können, denen er Zugriff gewährt hat.

Sie können dies testen, indem Sie einen neuen Benutzer mit der Berechtigung SELECT für eine einzige Tabelle in einer einzigen Datenbank erstellen. Der Benutzer kann in information_schema alles lesen, was mit den erteilten Tabellen in dieser Datenbank zu tun hat, aber nichts, was nicht gewährt wurde.

/* Create a new user with only SELECT on one db: */ 
GRANT SELECT ON newdb.* TO [email protected] IDENTIFIED BY 'passwd'; 

/* Login with that user and list databases */ 
mysql> show databases; 
+--------------------+ 
| Database   | 
+--------------------+ 
| information_schema | 
| newdb    | 
+--------------------+ 

From the relevant documentation:

Jeder MySQL-Benutzer hat das Recht, diese Tabellen zugreifen, können jedoch nur die Zeilen in den Tabellen sehen, die auf Objekte entsprechen, für die der Benutzer über die entsprechenden Zugriffsrechte verfügt. In einigen Fällen (z. B. in der Spalte ROUTINE_DEFINITION in der Tabelle INFORMATION_SCHEMA.ROUTINES) wird Benutzern mit unzureichenden Berechtigungen NULL angezeigt.

+0

Sie sagen, dass jede Auswahl eine andere Auswahl aus information_schema auslöst? –

+0

@AnnaK. Der Zugriff auf 'information_schema' ist auf Grants beschränkt, die der Benutzer hat, aber um Spalten aus einer Tabelle auswählen zu können, muss der Benutzer auch in der Lage sein, diese Spalten aus information_schema aufzulisten. –

+0

@AnnaK. Mit anderen Worten ist es nicht so, dass eine Abfrage eine Abfrage gegen information_schema auslöst, aber wenn die Abfrage kompiliert wird, muss information_schema konsultiert werden, um sie zu validieren und Benutzerrechte zu validieren. Damit der Benutzer einen MySQL-Client (der Spalten, deren Typen usw. auflisten kann) effektiv nutzen kann, muss er lediglich nach information_schema fragen. –

Verwandte Themen