Инструменты пользователя

Инструменты сайта


how-to:mysql

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

https://github.com/docker-library/mysql/issues/422

Ссылки

Группировка - http://sqlinfo.ru/articles/info/18.html

how-to/mysql.txt · Последнее изменение: 127.0.0.1