2013-08-23 19 views
23

Sto creando uno script bash che, tra le altre cose, raccoglie alcuni dati da un database MySQL. Il mio utente MySQL ha i privilegi di scrittura, ma per ragioni di sicurezza vorrei impostarlo temporaneamente in uno stato di sola lettura. È possibile farlo da una riga di comando?Come si imposta MySQL temporaneamente in sola lettura tramite la riga di comando?

+0

Cambia utente, forse? – Strawberry

+0

C'è una domanda simile (con una risposta) a dba.sc: http://dba.stackexchange.com/questions/74670/revoke-write-privileges-vs-setting-database-to-readonly – Bass

risposta

40

Per rispondere alla tua domanda iniziale, si può mettere tutta la vostra base di dati modalità di sola lettura da questo comanda:

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

e torna alla modalità normale con:

SET GLOBAL read_only = 0; 
UNLOCK TABLES; 

Fare attenzione che si tratta di un'operazione che avrà un impatto profondo sul comportamento del database. Quindi, prima di eseguire questo, leggere la documentazione disponibile per i comandi sopra. Un modo molto più comune è di revocare i privilegi DML da un utente specifico e successivamente restituirli.

+0

La migliore risposta, se il OP vuole davvero impostare l'intero database in modalità di sola lettura. Il titolo e la domanda attuale sono confusi qui. Ad ogni modo, +1 per la soluzione più semplice. – fancyPants

+1

Per salvare altri utenti, ecco cosa ho letto prima di giocare con questi: [read_only global] (https://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_read_only) (include la menzione di "TAVOLI FLUSH CON LETTURA BLOCCA;') e [utilizzo di questi per i backup] (http://docs.oracle.com/cd/E17952_01/refman-5.5-en/replication-solutions-backups-read-only. html). – sage

+0

Dopo aver eseguito il metodo precedente, il mio database è ancora in modalità di lettura + scrittura. – Phoenix

3

Beh, se l'utente ha in questo momento tutti i privilegi prima, è necessario revocarla

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

Dopo che gli dai, l'autorizzazione Select

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

Fate la vostra roba e dopo che concedere i privilegi di nuovo per l'utente

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

E questo è tutto gente

NOTA: Review per la citazione, forse ho dimenticato qualcosa