2013-08-23 14 views
23

Ich erstelle ein Bash-Skript, das unter anderem Daten aus einer MySQL-Datenbank sammelt. Mein MySQL-Benutzer hat Schreibrechte, aber aus Sicherheitsgründen möchte ich ihn vorübergehend auf einen schreibgeschützten Zustand setzen. Ist es möglich, dies über eine Befehlszeile zu tun?Wie stelle ich MySQL über die Befehlszeile vorübergehend auf schreibgeschützt ein?

+0

Benutzer ändern, vielleicht? – Strawberry

+0

Es gibt eine ähnliche Frage (mit einer Antwort) bei dba.sc: http://dba.stackexchange.com/questions/74670/revoke-write-privileges-vset-setting-database-to-readonly – Bass

Antwort

40

Ihre ursprüngliche Frage zu beantworten, können Sie Ihre gesamte Datenbank setzen nur Modus zu lesen, indem diese Befehle:

FLUSH TABLES WITH READ LOCK; 
SET GLOBAL read_only = 1; 

und zurück in den normalen Modus mit:

SET GLOBAL read_only = 0; 
UNLOCK TABLES; 

Beachten Sie, dass dies eine Operation ist, die das Verhalten der Datenbank tiefgreifend beeinflussen wird. Bevor Sie das ausführen, lesen Sie die verfügbare Dokumentation zu den obigen Befehlen. Ein viel gebräuchlicherer Weg besteht darin, DML-Privilegien von dem bestimmten Benutzer zu widerrufen und sie anschließend zurückzugeben.

+0

Beste Antwort, wenn die OP möchte die gesamte Datenbank im schreibgeschützten Modus setzen. Titel und aktuelle Frage sind hier verwirrend. Wie auch immer, +1 für die einfachste Lösung. – fancyPants

+1

Um anderen eine Suche zu ersparen, hier ist, was ich gelesen habe, bevor ich mit diesen spielte: [read_only global] (https://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_read_only) (enthält die Erwähnung von 'FLUSH TABLES WITH READ LOCK;') und [diese für Backups verwenden] (http://docs.oracle.com/cd/E17952_01/refman-5.5-de/replication-solutions-backups-read-only. html). – sage

+0

Nachdem ich die obige Methode ausgeführt habe, befindet sich meine Datenbank nur noch im Lese- und Schreibmodus. – Phoenix

3

Nun, wenn der Benutzer jetzt alle Berechtigungen zuerst, müssen Sie es

$>mysql -u DB_USER -pDB_PASS --execute="REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'YOUR_USER';" 

Danach können Sie ihn, die select-Berechtigung

$>mysql -u DB_USER -pDB_PASS --execute="GRANT SELECT ON 'YOUR_DATABASE'@.* TO 'YOUR_USER'@'%';FLUSH PRIVILEGES;" 

Sie Ihre Sachen geben zu widerrufen und danach gewähren Privilegien wieder an den Benutzer

$>mysql -u DB_USER -pDB_PASS --execute="GRANT ALL ON 'YOUR_DATABASE'@.* TO 'YOUR_USER'@'%';FLUSH PRIVILEGES;" 

Und das ist alles, Leute

HINWEIS: Bewertung für Quotierung, vielleicht vergessen haben, ich etwas