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

Erfahren Sie mehr über Berechtigungen auf MySQL-Tabellenebene

Es ist sehr üblich, eine Grant-Anweisung wie die folgende zu sehen, die Zugriff auf alle Tabellen in einer bestimmten Datenbank gewährt.

GRANT SELECT, SHOW VIEW
ON mydatabase.*
TO myreaduser@myhost IDENTIFIED BY 'somepassword';
FLUSH PRIVILEGES;

Wobei mydatabase , myreaduser , myhoost , und somepassword sind die passenden Variablen für Ihre Datenbank. Beachten Sie, dass die FLUSH PRIVILEGES Der Befehl setzt die MySQL-Privilegien zurück und Sie können die neuen Benutzerberechtigungen nicht verwenden, bis er ausgeführt wird.

Ein solcher Benutzer kann alle Tabellen in einer Datenbank lesen und darauf zugreifen. Für dieses Beispiel verwenden wir die boatio-Datenbank mit 3 Tabellen:boats , trips und users .

mysql> show tables;
+------------------+
| Tables_in_boatio |
+------------------+
| boats            |
| trips            |
| users            |
+------------------+
3 rows in set (0.00 sec)

Wenn wir einen Benutzer erstellen möchten, der nur Zugriff auf die trips hat Tabelle ersetzen wir einfach den Platzhalter Splat (*), der alle Tische darstellt, durch die spezifischen Tische, die Sie möchten (in diesem Fall:trips ).

GRANT SELECT, SHOW VIEW
ON boatio.trips
TO myreaduser@localhost IDENTIFIED BY 'somepassword';
FLUSH PRIVILEGES;

Jetzt können wir uns als neuer Benutzer anmelden und show tables ausführen, um zu sehen, dass er nur Zugriff auf die trips hat Tisch und nicht die anderen beiden. Dieser neue Benutzer weiß einfach nicht, dass die anderen Tabellen überhaupt existieren.

$ mysql -umyreaduser boatio -psomepassword
mysql> show tables;
+------------------+
| Tables_in_boatio |
+------------------+
| trips            |
+------------------+
1 row in set (0.00 sec)

Um dem Benutzer Zugriff auf weitere Tabellen zu gewähren, führen Sie einfach denselben GRANT erneut aus Anweisung mit den zusätzlichen Tabellennamen. Folgendes gewährt beispielsweise Zugriff auf die trips und users Tabellen, aber nicht die boats .

GRANT SELECT, SHOW VIEW ON boatio.trips TO myreaduser@localhost IDENTIFIED BY 'somepassword';
GRANT SELECT, SHOW VIEW ON boatio.users TO myreaduser@localhost IDENTIFIED BY 'somepassword';
FLUSH PRIVILEGES;

Und der Beweis:Der Benutzer hat nun Zugriff auf die trips und users Tische, aber keine boats .

$ mysql -umyreaduser boatio -psomepassword

mysql> show tables;
+------------------+
| Tables_in_boatio |
+------------------+
| trips            |
| users            |
+------------------+
2 rows in set (0.00 sec)