【问题标题】:Recover my root user's DBA privileges on MariaDB在 MariaDB 上恢复我的 root 用户的 DBA 权限
【发布时间】:2020-11-10 18:33:12
【问题描述】:

我不小心从 mariadb 中删除了我唯一用户的 DBA 权限,现在我无法使用我的银行,也无法使用 Linux SHELL CentOS 7 恢复权限。

我尝试过的命令:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

返回:

#1045 - Access denied for user 'root'@'localhost' (using password: YES)

有人经历过吗?

【问题讨论】:

  • 有关如何重置密码的详细信息,请参阅 dba.stackexchange 上的 this question。
  • @Dave 不成功,提示是密码恢复,我知道密码。我的问题是我的 root 用户没有 DBA 但没有特权,这就是我想要恢复的。
  • 我想“解决”这个问题,因为我遇到了完全相同的问题。
  • 你使用什么服务器版本?我也怀疑发送 GRANT 语句时是否返回了上面的错误消息,它看起来更像是来自命令行客户端的登录尝试。

标签: mysql sql linux centos mariadb


【解决方案1】:

停止 MariaDb 服务器

sudo systemctl stop mariadb

未经权限检查重启数据库 - more

sudo mysqld_safe --skip-grant-tables --skip-networking &

mysql -u root输入密码

重新加载授权表

Mariadb[MYSQL]> FLUSH PRIVILEGES

insert into user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv, Create_view_priv, Show_view_priv, Create_routine_priv, Alter_routine_priv, Create_user_priv, ssl_type, ssl_cipher, x509_issuer, x509_subject, max_questions, max_updates, max_connections, max_user_connections) 
values('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0','0');

然后重启数据库

sudo systemctl start mariadb 我希望这对你有用。它确实对我有用。

您可以在Grant privileges on MariaDB上探索答案

【讨论】:

  • 人们经常通过直接修改系统表来破坏他们的数据库配置,而不是使用GRANT 和CREATE USER 语句。这在最近的 MariaDB 版本中不再可能,因为这些表变成了不可插入的视图。
【解决方案2】:

主机名的通配符也包含 localhost 是错误的假设,因此通过套接字 (localhost) 连接的尝试将失败:

mysql> create user 'foo'@'%' identified by 'bar';
Query OK, 0 rows affected (0,01 sec)

$mysql -ufoo -pbar -e"select current_user"
ERROR 1045 (28000): Access denied for user 'foo'@'localhost' (using password: YES)

使用 localhost 创建用户时,一切正常:

mysql> create user 'foo'@'localhost' identified by 'bar';
Query OK, 0 rows affected (0,01 sec)

$ mysql -ufoo -pbar -e"select current_user\G"
*************************** 1. row ***************************
current_user: foo@localhost

同样从 MariaDB Server 10.4(Posix 平台)开始,root 用户的默认身份验证方法(通过 localhost 连接时)通过 unix_socket 插件发生。这允许 root@localhost 用户无需密码即可通过由 socket 系统变量定义的本地 Unix 套接字文件登录,只要尝试从操作系统 root 用户帐户拥有的进程登录:

mysql -e"show grants for root@localhost\G"
*************************** 1. row ***************************
Grants for root@localhost: GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` IDENTIFIED VIA mysql_native_password USING 'invalid' OR unix_socket WITH GRANT OPTION

所以以root身份正常登录会失败:

georg@mozart:~/mariadb$ mysql -uroot -e"select current_user()\G"
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

以 root (sudo) 身份运行时,登录按预期工作:

georg@mozart:~/mariadb$ sudo mysql -uroot -e"select current_user()\G"
*************************** 1. row ***************************
current_user(): root@localhost

【讨论】:

    猜你喜欢
    • 2010-12-12
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多