1

Тема: Неможливо дати права для root

Система Ubuntu 18, mysql 5.7

З незрозумілих причин пропали права для рута, тепер я по суті маю дуже обмежені можливості адміністрування локальних баз даних

 

mysql> use mysql;
ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'mysql'
mysql> SHOW GRANTS FOR 'root';
+----------------------------------+
| Grants for root@%                |
+----------------------------------+
| GRANT USAGE ON *.* TO 'root'@'%' |
+----------------------------------+
1 row in set (0,00 sec)

Пробував робити всю магію та навіть більше звідси і схожих топіків. Але по суті все зводиться до того, що root немає прав і я не можу це змінити, якесь замкнене коло

mysql> use mysql;
ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'mysql'
mysql> GRANT ALL ON *.* TO 'root'@'localhost';
ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)
mysql> 
mysql> GRANT ALL ON *.* TO 'root'@'localhost';
ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)
mysql> SHOW GRANTS FOR 'root'@'localhost';
ERROR 1141 (42000): There is no such grant defined for user 'root' on host 'localhost'

Також пробував з іншого боку зайти:

❯ sudo mysql_upgrade
mysql_upgrade: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) while connecting to the MySQL server
❯ sudo mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root: 
Error: Access denied for user 'root'@'localhost' (using password: YES)
❯ sudo dpkg-reconfigure mysql-server-5.7
Checking if update is needed.
This installation of MySQL is already upgraded to 5.7.38, use --force if you still need to run mysql_upgrade

Хто знає як можна виправити ситуацію або додати нового суперкористувача до mysql?

2

Re: Неможливо дати права для root

Пишуть, що треба

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

А в цілому для безпеки краще, щоб користувач СУБД був окремий від рута.

Подякували: Q-bart, leofun012

3

Re: Неможливо дати права для root

koala написав:

Пишуть, що треба

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

А в цілому для безпеки краще, щоб користувач СУБД був окремий від рута.

В тому й вся проблема: в мене немає жодного користувача, хто би мав доступ такого рівня

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'

4 Востаннє редагувалося frz (27.07.2022 14:44:41)

Re: Неможливо дати права для root

https://www.techrepublic.com/article/ho … -password/

1) записати запит в файл:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'PASSWORD';

(пароль свій замість PASSWORD)

в даному прикладі нижче файл записано як ~/mysql-pwd

2) зупинити mysql з консолі

sudo systemctl stop mysql

3) виконати запит в консолі

sudo mysqld -init-file=~/mysql-pwd

4) запустити mysql з консолі

sudo systemctl start mysql

5) залогінитися з-під консолі

mysql -u root -p

(пароль - з пункту 1)

5

Re: Неможливо дати права для root

frz написав:

https://www.techrepublic.com/article/ho … -password/

1) записати запит в файл:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'PASSWORD';

(пароль свій замість PASSWORD)

в даному прикладі нижче файл записано як ~/mysql-pwd

2) зупинити mysql з консолі

sudo systemctl stop mysql

3) виконати запит в консолі

sudo mysqld -init-file=~/mysql-pwd

4) запустити mysql з консолі

sudo systemctl start mysql

5) залогінитися з-під консолі

mysql -u root -p

(пароль - з пункту 1)


Дякую
В мене все закінчується на першому кроці

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'PASSWORD';
ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation

Є альтернативний варіант скористатися користувачем debian-sys-maint https://stackoverflow.com/a/46388718/3197180
Я знайшов пароль, але чомусь mysql не впускає

❯ sudo mysql -u debian-sys-maint -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)

6

Re: Неможливо дати права для root

Доброго дня.
При старті мускула ось так
mysqld --skip-grant-tables --skip-networking
всеодно не дає адмін прав?
А які права на файли баз даних? Місце є на диску?

Подякували: karmeljuk1

7

Re: Неможливо дати права для root

Дивіться лог мускула, може там щось знайдете цікаве. Якийсь рушій не стартонув, для прикладу

8

Re: Неможливо дати права для root

kisilam написав:

Доброго дня.
При старті мускула ось так
mysqld --skip-grant-tables --skip-networking
всеодно не дає адмін прав?
А які права на файли баз даних? Місце є на диску?

Дякую. В мене ще особливість в тому, що папка mysql перенесена в домашню дерикторію, так як на корені мало місця, можливо через це була проблема. Ще були такі проблеми з правами:

2022-07-29T09:15:58.299390Z mysqld_safe Logging to '/var/log/mysql/error.log'.
/usr/bin/mysqld_safe: 152: /usr/bin/mysqld_safe: cannot create /var/log/mysql/error.log: Permission denied
cat: /var/run/mysqld/mysqld.pid: Permission denied
rm: cannot remove '/var/run/mysqld/mysqld.pid': Permission denied
2022-07-29T09:15:58.319418Z mysqld_safe Fatal error: Can't remove the pid file:
/var/run/mysqld/mysqld.pid.
Please remove the file manually and start /usr/bin/mysqld_safe again;
mysqld daemon not started
/usr/bin/mysqld_safe: 152: /usr/bin/mysqld_safe: cannot create /var/log/mysql/error.log: Permission denied

В моєму випадку я змінив права для /var/log/mysql/ та /home/user/Work/mysql/mysql. Потім скористався цією порадою https://stackoverflow.com/a/1709138/3197180

If the GRANT ALL doesn't work, try:

Stop mysqld and restart it with the --skip-grant-tables option.
Connect to the mysqld server with just: mysql (i.e. no -p option, and username may not be required).
Issue the following commands in the mysql client:

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';

FLUSH PRIVILEGES;

After that, you should be able to run GRANT ALL ON *.* TO 'root'@'localhost'; and have it work.

Тож тепер працює:

mysql>  SHOW GRANTS FOR 'root'@'localhost';
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
1 row in set (0,00 sec)

mysql>