Я настраиваю rDNS для использования с сервером SolusVM. Я использовал PowerDNS на двух серверах в качестве ведомого и главного и успешно настроил репликацию MySQL. При просмотре таблицы записей MySQL я вижу все записи SOA, NS и PTR.
Я создал две записи A (rdns1.example.com, rdns2.example.com) и указал их на главный и подчиненный серверы соответственно.
Я обновил серверы имен DNS обратного IP на arin.net, чтобы они указывали на файлы rdns1.example.com и rdns2. УСТАНОВИТЬ ПАРОЛЬ [FOR 'dave' @ 'localhost'] = PASSWORD (...
Я видел различные методы для установки паролей в MySQL, например, такие как:
GRANT USAGE ON db.* to 'dave'@'localhost' IDENTIFIED BY 'supersecretpassword');
SET PASSWORD [FOR 'dave'@'localhost'] = PASSWORD('reallysecretpassword');
UPDATE mysql.user SET PASSWORD=PASSWORD('confidentialpassword') WHERE user='dave' AND host='localhost';
Но они, похоже, включают ввод пароля в clear как часть команды SQL, что вызывает паранойю по поводу того, попадает ли он в мою историю команд SQL, или о том, смотрит ли кто-нибудь через мое плечо или может взглянуть на мою прокрутку терминала.
Могу ли я каким-то образом заставить MySQL предложить мне ввести пароль, не выводя его на экран (точно так же, как Unix с passwd
)?
Алгоритм хеширования паролей довольно прост и может быть воспроизведен на других языках программирования.
Согласно https://www.pythian.com/blog/hashing-algorithm-in-mysql-password/ , в MySQL 4.1 и выше функция PASSWORD
принимает (двоичный ) SHA1 строки пароля дважды, затем возвращает это в виде шестнадцатеричной строки, которой предшествует звездочка.
Например, в SQL:
> SELECT PASSWORD('test'), SHA1(UNHEX(SHA1('test')));
+-------------------------------------------+------------------------------------------+
| PASSWORD('test') | SHA1(UNHEX(SHA1('test'))) |
+-------------------------------------------+------------------------------------------+
| *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29 | 94bdcebe19083ce2a1f959fd02f964c7af4cfc29 |
+-------------------------------------------+------------------------------------------+
Использование кода MySQL на консоли не оправдывает себя, но вот довольно простой сценарий Python который запрашивает пароль и генерирует из него строку пароля, совместимую с MySQL.
import hashlib, getpass
def mysql_password(p):
return '*' + hashlib.sha1( hashlib.sha1(p).digest() ).hexdigest().upper()
password = getpass.getpass()
print(mysql_password(password))
Затем он может быть назначен непосредственно пользователю в MySQL:
SET PASSWORD FOR 'dave'@'localhost' = '*94BDCE...';
Таким образом, на консоли / MySQL когда-либо виден только хэш пароля. история. (Это не больше, чем может увидеть любой, у кого есть доступ к таблице mysql.user
.)
Скрипт-оболочка на каком-то языке (я бы использовал php и запускал через cli, так как это было бы быстрое копирование / вставка из того, что у меня уже есть), который выполняется, затем удаляется или наименее отредактированный еще раз, чтобы изменить все пароли на «changeme» или аналогичные.
Как Федерико Сьерра указывает в комментариях, вы можете использовать mysqladmin
password
команда для изменения пароля для любого пользователя, под которым вы можете войти в систему.
Раньше пароль нужно было вводить в командной строке, но с версии 5.7, если пароль не указан, запрашивается пароль.
] Из документации mysqladmin :
пароль
новый_парольУстановите новый пароль. Это изменяет пароль на new_password для учетной записи, которую вы используете с
mysqladmin
для подключения к серверу. Таким образом, в следующий раз, когда вы вызоветеmysqladmin
(или любую другую клиентскую программу) с той же учетной записью, вам нужно будет указать новый пароль.[...]
В MySQL 5.7 новый пароль может быть опущен после команды
password
. В этом случаеmysqladmin
запрашивает значение пароля, что позволяет избежать указания пароля в командной строке. Пропуск значения пароля следует делать только в том случае, если пароль является последней командой в командной строкеmysqladmin
. В противном случае в качестве пароля принимается следующий аргумент.
Итак, если вы знаете пароль пользователя и находитесь на хосте, с которого вам разрешено входить в систему, вы можете изменить его пароль с помощью:
mysqladmin -u <user_name> [-p] password
например
$ mysqladmin -u dave -p password
Enter password:
New password:
Confirm new password:
] Конечно, если у вас есть необходимые права, вы можете изменить исходный пароль пользователя и хост, чтобы вы могли войти в систему. Но это связано с собственными рисками, поэтому это не идеально.
Примечание: я отвечаю на свой свой вопрос здесь, но я не собираюсь отмечать его как принятый, так как я не удовлетворен, что это в целом безопасный способ изменения пароля пользователя.