2013-08-23 14 views
23

Tworzę skrypt bash, który między innymi gromadzi dane z bazy danych MySQL. Mój użytkownik MySQL ma uprawnienia do zapisu, ale ze względów bezpieczeństwa chciałbym tymczasowo ustawić go na stan tylko do odczytu. Czy można to zrobić z wiersza poleceń?Jak ustawić MySQL tymczasowo na tylko do odczytu za pomocą wiersza poleceń?

+0

Zmiana użytkownika, być może? – Strawberry

+0

Istnieje podobne pytanie (z odpowiedzią) na stronie dba.sc: http://dba.stackexchange.com/questions/74670/revoke-write-privileges-vs-setting-database-to-readonly – Bass

Odpowiedz

40

Aby odpowiedzieć na oryginalne pytanie, które można umieścić całą swoją bazę danych do odczytu w trybie tylko przez to polecenie:

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

i powrót do normalnego trybu z:

SET GLOBAL read_only = 0; 
UNLOCK TABLES; 

Pamiętaj, że jest to operacja, która będzie miała głęboki wpływ na zachowanie bazy danych. Dlatego przed wykonaniem tego przeczytaj dostępną dokumentację do powyższych poleceń. O wiele powszechniejszym sposobem jest odwołanie uprawnień DML od określonego użytkownika, a następnie udzielenie ich ponownie.

+0

Najlepsza odpowiedź, jeśli OP naprawdę chce ustawić całą bazę danych w trybie tylko do odczytu. Tytuł i rzeczywiste pytanie są tutaj mylące. W każdym razie +1 dla najprostszego rozwiązania. – fancyPants

+1

Aby zapisać inne wyszukiwania, oto, co przeczytałem przed rozpoczęciem gry: [read_only global] (https://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_read_only) (zawiera wzmiankę o 'TABLETACH FLUSH WITH READ LOCK;') i [używając ich do tworzenia kopii zapasowych] (http://docs.oracle.com/cd/E17952_01/refman-5.5-en/replication-solutions-backups-read-only. html). – sage

+0

Po wykonaniu powyższej metody moja baza danych wciąż działa tylko w trybie odczytu i zapisu. – Phoenix

3

Dobrze, jeśli użytkownik ma teraz wszystkie przywileje pierwsze, trzeba cofnąć mu

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

Potem dasz mu SELECT pozwolenie

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

robić swoje rzeczy, a potem nadaj ponownie uprawnienia użytkownikowi User:

A to wszystko ludzie

UWAGA: Przegląd ofertowego, chyba zapomniałem coś