Размышляя о безопасности в установке MySQL, вы можете рассмотреть широкий спектр возможных процедур/рекомендаций и их влияние на безопасность вашего сервера MySQL и связанных приложений.
MySQL предоставляет множество инструментов/функции/плагин или компоненты для того , чтобы защитить ваши данные, включая некоторые дополнительные функции, такие как прозрачное шифрование данных (TDE), аудит, маскирование данных и деидентификацию, межсетевой экран, отслеживание неудачного входа в систему и временная блокировка учетной записи, плагины контроля подключений, компонент проверки пароля и т. д…
TL; DR
Возможность двойного пароля позволяет без проблем выполнять изменения учетных данных.
MySQL реализует возможность двойного пароля с синтаксисом, который сохраняет и отбрасывает вторичные пароли:
- Предложение RETAIN CURRENT PASSWORD для операторов ALTER USER и SET PASSWORD сохраняет текущий пароль учетной записи в качестве вторичного пароля при назначении нового основного пароля.
- Предложение DISCARD OLD PASSWORD для ALTER USER отбрасывает дополнительный пароль учетной записи, оставляя только основной пароль. Цель состоит в том, чтобы избежать простоев при смене паролей в реплицируемой среде.
Клиенты могут использовать старый пароль, пока новый пароль устанавливается в группе серверов, и удалить старый пароль только тогда, когда новый пароль установлен во всей группе.
Рабочий процесс:
- На каждом сервере, который не является ведомым по репликации, установите новый пароль,
например:ALTER USER ‘myApp’@’host’ IDENTIFIED BY ‘NEW_password’ RETAIN CURRENT PASSWORD;
- Подождите, пока смена пароля не распространится по всей системе на все подчиненные серверы.
- Измените каждое приложение, использующее учетную запись myApp, чтобы оно подключалось к серверам, используя пароль «NEW_password», а не «OLD_password».
- На каждом сервере, который не является ведомым по репликации, сбросьте вторичный пароль,
например:ALTER USER ‘myApp’@’host’ DISCARD OLD PASSWORD;
Давайте кратко рассмотрим использование MySQL 8.0
MySQL SQL> SELECT VERSION(); +-----------+ | VERSION() | +-----------+ | 8.0.19 | +-----------+
Создайте учетную запись пользователя myApp@localhost с паролем pwd1 :
MySQL root SQL> CREATE USER myApp@localhost IDENTIFIED BY 'pwd1';
Теперь мы можем связаться с именем и паролем:
$ mysql -u myApp -ppwd1 -e"SELECT USER()" mysql: [Warning] Using a password on the command line interface can be insecure. +-----------------+ | USER() | +-----------------+ | myApp@localhost | +-----------------+
Теперь администратор базы данных (суперпользователь) использует инструкцию ALTER USER с предложением RETAIN CURRENT PASSWORD для выполнения изменений учетных данных с использованием механизма двойного пароля путем добавления в качестве основного пароля pwd2.
Таким образом, pwd1 теперь является вторичным паролем:
MySQL root SQL> ALTER USER myApp@localhost IDENTIFIED BY 'pwd2' RETAIN CURRENT PASSWORD;
Мы можем использовать имя пользователя и новый пароль ( pwd2 ) для подключения:
$ mysql -u myApp -ppwd2 -e"SELECT USER()" mysql: [Warning] Using a password on the command line interface can be insecure. +-----------------+ | USER() | +-----------------+ | myApp@localhost | +-----------------+
Но старый пароль ( pwd1 ) все еще действителен:
$ mysql -u myApp -ppwd1 -e"SELECT USER()" mysql: [Warning] Using a password on the command line interface can be insecure. +-----------------+ | USER() | +-----------------+ | myApp@localhost | +-----------------+
Теперь пришло время сбросить дополнительный пароль ( pwd1 ):
MySQL root SQL> ALTER USER myApp@localhost DISCARD OLD PASSWORD;
$ mysql -u myApp -ppwd2 -e"SELECT USER()" mysql: [Warning] Using a password on the command line interface can be insecure. +-----------------+ | USER() | +-----------------+ | myApp@localhost | +-----------------+ $ mysql -u myApp -ppwd1 -e"SELECT USER()" mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1045 (28000): Access denied for user 'myApp'@'localhost' (using password: YES)
Как видите, действителен только новый пароль ( pwd2 ).