Я создаю сценарий bash, который, среди прочего, собирает некоторые данные из базы данных MySQL. У моего пользователя MySQL есть права на запись, но по соображениям безопасности я хотел бы временно установить его в состояние только для чтения. Можно ли это сделать из командной строки?
Как установить MySQL временно на чтение только через командную строку?
Ответ 1
Чтобы ответить на ваш первоначальный вопрос, вы можете поместить всю вашу базу данных в режим только для чтения с помощью следующих команд:
FLUSH TABLES WITH READ LOCK;
SET GLOBAL read_only = 1;
и вернуться в нормальный режим:
SET GLOBAL read_only = 0;
UNLOCK TABLES;
Помните, что это операция, которая будет иметь глубокое влияние на поведение базы данных. Поэтому перед выполнением этого ознакомьтесь с доступной документацией к приведенным выше командам. Гораздо более распространенный способ - отменить привилегии DML от конкретного пользователя и впоследствии предоставить их обратно.
Ответ 2
Ну, если у пользователя сейчас есть все привилегии, вам нужно отменить его
$>mysql -u DB_USER -pDB_PASS --execute="REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'YOUR_USER';"
После этого вы дадите ему разрешение на выбор
$>mysql -u DB_USER -pDB_PASS --execute="GRANT SELECT ON 'YOUR_DATABASE'@.* TO 'YOUR_USER'@'%';FLUSH PRIVILEGES;"
Сделайте свой материал и после этого снова предоставите привилегии пользователю
$>mysql -u DB_USER -pDB_PASS --execute="GRANT ALL ON 'YOUR_DATABASE'@.* TO 'YOUR_USER'@'%';FLUSH PRIVILEGES;"
И что все люди
ПРИМЕЧАНИЕ. Просмотрите цитату, возможно, я что-то забыл
Ответ 3
Если вы используете MySQL 5.6 или новее и InnoDB, вы можете сделать сеанс только для чтения.
SET SESSION TRANSACTION READ ONLY;
https://dev.mysql.com/doc/refman/5.6/en/set-transaction.html
"ЧИТАТЬ ТОЛЬКО" также предлагает скромную производительность.