Содержание
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 - максимальное количество подключений в час, которое может сделать пользователь.
- ALL PRIVILEGES - дает пользователю все права
Например, создать пользователя '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;
Обновление пароля пользователя
Например, чтобы обновить пароль 'newpass' пользователю 'newuser' на базе mybase:
USE mybase; UPDATE USER SET password=PASSWORD("newpass") WHERE USER='newuser'; FLUSH PRIVILEGES;
http://geeksmagazine.org/post/7/kak-sozdat-polzovatelya-i-dat-emu-prava-v-mysql
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
Ссылки
Группировка - http://sqlinfo.ru/articles/info/18.html
