On Sun, 21 Jun 2020 18:24:19 -0700
PGNet Dev <[email protected]> wrote:

> On 6/21/20 5:47 PM, Daniel Black wrote:
> >> what different/additional steps are required to recreate a deleted root 
> >> user?  
> > 
> > There are perfectly usable SHOW CREATE USER 
> > (https://mariadb.com/kb/en/show-create-user/) to get the SQL to create a 
> > user, and CREATE USER (https://mariadb.com/kb/en/create-user/) like what 
> > SHOW CREATE USER outputs, it is a portable, future safe way to recreate 
> > users that isn't dependent on however structure MariaDB uses internally.
> > 
> > DROP USER (https://mariadb.com/kb/en/drop-user/) is for removing users.
> > 
> > FLUSH PRIVILEGES (https://mariadb.com/kb/en/flush/) isn't need when you use 
> > any proper SQL to create/modify/drop users.  
> 
> (clean install)
> systemctl start mariadb
> mysql
>       >  
> 
>       SELECT User, Host FROM mysql.global_priv;
>               +-------------+-----------+
>               | User        | Host      |
>               +-------------+-----------+
>               | mariadb.sys | localhost |
>               | mysql       | localhost |
>               | root        | localhost |
>               +-------------+-----------+
> 
>       SHOW CREATE USER;
>               
> +----------------------------------------------------------------------------------------------------+
>               | CREATE USER for root@localhost                                
>                                      |
>               
> +----------------------------------------------------------------------------------------------------+
>               | CREATE USER `root`@`localhost` IDENTIFIED VIA 
> mysql_native_password USING 'invalid' OR unix_socket |
>               
> +----------------------------------------------------------------------------------------------------+
> 
>       DROP USER `root`@`localhost`;
> 
>       SELECT User, Host FROM mysql.global_priv;
>               +-------------+-----------+
>               | User        | Host      |
>               +-------------+-----------+
>               | mariadb.sys | localhost |
>               | mysql       | localhost |
>               +-------------+-----------+
> 
>       exit
> 
> 
> this^ is the stage at which i'd get a oops-i-deleted-my-root-user instance 
> for 'fixing' ...
> 
> systemctl restart mariadb
> mysql -u root
>       ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using 
> password: NO)
> 
> 
> systemctl stop mariadb.service
> killall mysqld
> killall mysqld_safe
> sleep 5
> mysqld_safe \
>  --defaults-file=/usr/local/etc/mariadb/my.cnf \
>  --skip-grant-tables \
>  --skip-networking &
> 
> mysql -u root
>       >  
> 
>       CREATE USER `root`@`localhost` IDENTIFIED VIA mysql_native_password 
> USING 'invalid' OR unix_socket;
> 
>               ERROR 1290 (HY000): The MariaDB server is running with the 
> --skip-grant-tables option so it cannot execute this statement
> 
> 
> so, atm, i can't access the 'normal' running server without root user, and 
> can't create the root user when server's running '--skip-grant-tables'.
> 
> i guess i'm missing the 'perfectly usable' part :-/

The skip-grant-tables preventing standard modification is a bit horrible still. 
One day I need to work out why that restriction is there.

> can you provide an explicit example of how to -- at this puposefully fubar'd 
> stage -- create / init a root user?


$ cat > /tmp/reset.sql
DROP USER IF EXISTS `root`@`localhost`;
CREATE USER `root`@`localhost` IDENTIFIED VIA mysql_native_password AS 
PASSWORD('notsosecure') OR unix_socket ; 
GRANT ALL PRIVILEGES ON *.* TO  `root`@`localhost` WITH GRANT OPTION;

ctrl-D (to end tell the shell to end the file, it shouldn't be part of the 
file).

$ sudo -u mysql /usr/sbin/mysqld  --verbose --init-file=/tmp/reset.sql


$ mysql -u root -pnotsosecure
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 10.4.14-MariaDB-debug-log Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> select current_user();
+----------------+
| current_user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.001 sec)

MariaDB [(none)]> show create user ;
+--------------------------------------------------------------------------------------------------------------------------------------+
| CREATE USER for root@localhost                                                
                                                       |
+--------------------------------------------------------------------------------------------------------------------------------------+
| CREATE USER `root`@`localhost` IDENTIFIED VIA mysql_native_password USING 
'*7A7CEFE3EAE64F196620D6CC3CEF498B0DDABB85' OR unix_socket |
+--------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.000 sec)


MariaDB [(none)]> shutdown;
Query OK, 0 rows affected (0.001 sec)



_______________________________________________
Mailing list: https://launchpad.net/~maria-discuss
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~maria-discuss
More help   : https://help.launchpad.net/ListHelp

Reply via email to