Mysql
Настройка безопасности после установки:
sudo mysql_secure_installation
Привилегии
Создание пользователя
GRANT [тип привилегии] ON [название БД].[название таблицы] TO '[пользователь]'@'[разрешенный хост для подключения]';
Типы привилегий:
USAGE - задаётся, если необходимо создать пользователя без привилегий.
SELECT - эта привилегия позволяет делать выборку записей из таблиц баз данных.
INSERT - позволяет вставлять или записывать новую информацию в таблицы.
UPDATE - право, позволяющее обновлять записи в таблице.
DELETE - эта привилегия позволяет удалять записи из таблицы.
FILE - разрешает делать выборку записей и записывать данные в файл, а также считывать их оттуда.
CREATE - привилегия, позволяющая создавать новые базы данных, а также новые таблицы в базе данных.
ALTER - привилегия, позволяющая переименовывать таблицы, вставлять новые поля в таблицу, удалять поля из таблицы, а также модифицировать их.
INDEX - разрешает создавать индекс по определённому полю и удалять его. О том, что это такое и для чего нужно мы поговорим в одной из следующих статей.
DROP - право, которое позволяет удалять либо таблицы, либо целые базы данных.
CREATE TEMPORARY TABLES - возможность создавать временные таблицы, которые хранятся во время сессии, а после окончания сессии данная таблица автоматически удаляется.
GRANT OPTION - привилегия, которая позволяет создавать новых пользователей, а также менять права у существующих. Тут есть очень важная деталь: нельзя изменять значения привилегий, которыми сам не обладаешь. То есть если человек обладает привилегией GRANT, но не обладает привилегией SELECT, то он не может новым пользователям дать привилегию SELECT.
SUPER - позволяет использовать команду «kill», то есть убить поток. Поток - это текущее подключение другого пользователя к базе данных.
PROCESS - привилегия, позволяющая выполнить команду «processlist», которая показывает список потоков.
RELOAD - позволяет открывать и закрывать файлы журналов, а также перечитывать таблицы привилегий пользователей.
SHUTDOWN - привилегия, позволяющая выполнить команду «shutdown», отключающая работу сервера.
SHOW DATABASES - разрешает просматривать все существующие базы данных.
REFERENCES - данная привилегия ещё не доступна, а только зарезервирована для использования в будущем.
LOCK TABLES - позволяет блокировать таблицы от указанных потоков.
EXECUTE - позволяет запускать хранимые процедуры.
REPLICATION CLIENT - даёт право получать местонахождение ведущего (master) и ведомых (slaves) серверов.
REPLICATION SLAVE - это привилегия, позволяющая читать ведомым журнала ведущего сервера.
MAX QUERIES PER HOUR - максимальное количество запросов в час, которое может отправить пользователь.
MAX UPDATES PER HOUR - максимальное количество команд в час, которые каким-либо образом изменяют либо таблицу, либо базу данных.
MAX CONNECTIONS PER HOUR - максимальное количество подключений в час, которое может сделать пользователь.
Например, создать пользователя 'newuser' с паролем 'password' с полными правами на все базы и разрешить ему подключаться только с 'localhost':
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
Посмотреть текущие привилегии для 'user'@'localhost':
SHOW GRANTS FOR 'user'@'localhost';
Пользователи
Список пользователей
SELECT USER,host FROM mysql.user;
Удаление пользователя
DROP USER username@localhost;
Обновление пароля пользователя
Backup
Бэкап определенной базы в консоли:
mysqldump database -u username -p | gzip -c> database.sql.gz
и обратная операция:
gunzip <database.sql.gz | mysql -u user -p database
Кодировка
Проверяем текущую:
SHOW VARIABLES LIKE 'char%';
Для установки character_set_database и character_set_server в my.cnf в [mysqld] добавляем:
character_set_server = utf8
Игнорируем кодировку предлагаемую клиентом в my.cnf в [mysqld] добавляем:
skip-character-set-client-handshake
mysql-config-editor
Сохранить аутентификационные данные backup (пароль вводится в ручную):
docker exec -i mysql mysql_config_editor set --login-path=backup --host=localhost --user=backup --password
Показать аутентификационные данные backup:
docker exec mysql mysql_config_editor print --login-path=backup
Показать все сохоанённые аутентификационные данные:
docker exec mysql mysql_config_editor print --all
Данные хранятся в /root/.mylogin.cnf в зашифрованном виде.
https://dev.mysql.com/doc/refman/8.0/en/mysql-config-editor.html
mysqldump
mysqldump: Got error: 1044: "Access denied for user 'user'@'localhost' to database 'database'" when using LOCK TABLES
Добавляем прав пользователю:
GRANT LOCK TABLES ON DATABASE.* TO 'user'@'localhost';
не использовать с опцией –skip-opt (потеряем AUTO_INCREMENT)
Ошибки
mbind: Operation not permitted
Mysql не правильно обрабатывает отсутствующие разрешение.
Можно добавить разрешение при запуске контейнера Docker:
--cap-add sys_nice
или добавить в docker-compose.yaml:
service:
mysql:
image: mysql:8
# ...
cap_add:
- SYS_NIC
https://github.com/docker-library/mysql/issues/422
Ссылки