Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL:Wie kann verhindert werden, dass ein Benutzer überhaupt sieht, dass ich andere DBs habe, und wie kann ich ausgewählten Zugriff auf eine Ansicht in einer DB gewähren?

Ich habe die Übersicht gefunden, die in dieser Artikel sogar noch hilfreicher als die eigentliche MySQL-Dokumentation für die Beschreibung des Gesamtbildes, wie MySQL-Privilegien gewährt oder verweigert werden.

Das Wesentliche des Übersichtsartikels ist, dass Berechtigungen durch eine Reihe von immer feiner abgestuften Berechtigungstabellen in mysql gesteuert werden Datenbank:mysql.user , mysql.db , mysql.host , mysql.tables_priv , mysql.columns_priv , mysql.procs_priv . Die allgemeine Regel lautet, dass ein „Y“-Wert für ein Privileg in einer feinkörnigeren Tabelle einen „N“-Wert in einer grobkörnigeren Tabelle außer Kraft setzt. Daher besteht die empfohlene Strategie darin, damit zu beginnen, die meisten Privilegien im user zu verweigern Tabelle (die die gröbste Kontrolle bietet) und nehmen Sie dann nur die spezifischen Überschreibungen vor, die Sie in den feinkörnigeren Tabellen wünschen.

Insbesondere gibt es ein Privileg namens SHOW_DATABASES die durch Show_db_priv bestimmt wird Spalte in mysql.user Tisch; Sie sollten dies für den betreffenden Benutzer auf "N" setzen (und wie oben beschrieben möchten Sie vielleicht auch die meisten anderen Berechtigungen in der Benutzertabelle auf "N" setzen) und dann nur die Berechtigungen gewähren, die der Benutzer hat tatsächlich in der mysql.db benötigt oder mysql.tables_priv Tabelle oder was auch immer für Ihren speziellen Fall angemessen wäre.