Apps: MySQL/MariaDB.
Задача: получить доступ к СУБД "MySQL/MariaDB" на уровне суперпользователя приложения (не несущей операционной системы!), не пользуясь ничем, кроме встроенных средств.
Классический подход автоматизированной установки нового (или замены существующего) пароля суперпользователя "root" состоит в запуске СУБД с передачей ей специального "init-file", содержащего набор SQL-команд, исполняемых в контексте без каких-либо ограничений. Это удобно, но здесь мы рассмотрим другой, более ручной способ.
Последовательность дальнейших действий очень проста.
Останавливаем СУБД, доступ к которой требуется получить:
# systemctl stop mysql
Запускаем целевую СУБД в режиме отключения подсистемы ограничения прав доступа и без возможности обслуживания клиентских сетевых подключений:
# mkdir -p /var/run/mysqld
# chown -R mysql:mysql /var/run/mysqld
# mysqld_safe --skip-grant-tables --skip-networking &
# chown -R mysql:mysql /var/run/mysqld
# mysqld_safe --skip-grant-tables --skip-networking &
Подключаемся к целевой СУБД программным клиентом непосредственно с несущей операционной системы, через локальный "файловый сокет" (это делается по умолчанию, если не передавать клиенту параметры сетевого подключения) и серией следующих команд задаём желаемый пароль суперпользователю приложения:
# mysql -u root
mysql> use mysql;
mysql> FLUSH PRIVILEGES;
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('strongRootPassword');
mysql> QUIT
mysql> use mysql;
mysql> FLUSH PRIVILEGES;
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('strongRootPassword');
mysql> QUIT
Останавливаем СУБД, ранее временно запущенную в особом режиме:
# kill `cat /var/run/mysqld/mysqld.pid`
Запускаем СУБД в нормальном режиме:
# systemctl start mysql
# systemctl status mysql
# systemctl status mysql