首页 > 编程知识 正文

MariaDB GRANT ALL PRIVILEGES Access denied for user

时间:2023-05-04 21:00:42 阅读:213697 作者:362

文章目录 MariaDB GRANT ALL PRIVILEGES Access denied for user前言分析过程登录数据库检查数据库版本查看当前登录用户权限 解决方法小结参考文档

MariaDB GRANT ALL PRIVILEGES Access denied for user 前言

最近在一台MariaDB 5.5的数据库上试图授全部权限(GRANT ALL PRIVILEGES)给数据库用户时,报错Access denied。

以root用户登录数据库,授权过程:

# 创建数据库用户test,允许其通过任意主机登录数据库,密码为Test123CREATE USER 'test'@'%' IDENTIFIED BY 'Test123';# 授全部权限给数据库用户testGRANT ALL PRIVILEGES ON *.* TO 'test'@'%' IDENTIFIED BY 'Test123' WITH GRANT OPTION;

报错:Access denied for user 'root'@'localhost' (using password: YES)。

本文描述了如何解决这一问题的过程,为解决类似问题提供参考。

分析过程 登录数据库 # 以root用户,输入密码登录数据库mysql -u root -p

也可以通过mysql -uroot -p<password>来登录,但是这种登录方式会在Linux history中泄漏数据库密码。

检查数据库版本 select version();

本例子的数据库版本为:5.5.64-MariaDB。

如果是MySQL5.7,则数据库版本类似:5.7.29。

查看当前登录用户权限

检查当前登录用户:

# 检查当前用户,结果为:root@localhostselect current_user();

查看当前登录的用户权限:

# 查看当前用户权限show grants;

本例MariaDB 5.5中的root@localhost的用户权限为:

Grants for root@localhostGRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '<password>' WITH GRANT OPTION

作为参照,MySQL 5.7中root@localhost的用户权限为;

Grants for root@localhostGRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTIONGRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION

可以看到MySQL5.7中root@localhost用户有GRANT ALL PRIVILEGES权限,而在MariaDB 5.5中尽管root@localhost用户有一大堆权限,但是并不表示其有GRANT ALL PRIVILEGES权限。

既然MariaDB 5.5中的root@localhost用户没有GRANT ALL PRIVILEGES权限,它也就无法给test@%或root@%或其它用户GRANT ALL PRIVILEGES。

解决方法

其实test用户并不需要全部权限,它只需要部分权限,并且允许从任意主机登录数据库就可以了。

因此授权语句可以改为授予具体的权限(比如GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP),而不是GRANT ALL PRIVILEGES:

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON *.* TO 'test'@'%' IDENTIFIED BY 'Test123' WITH GRANT OPTION;

完整的授权过程如下:

# 以root用户,输入密码登录数据库mysql -u root -p# 创建数据库用户CREATE USER 'test'@'%' IDENTIFIED BY 'Test123';# 授权GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON *.* TO 'test'@'%' IDENTIFIED BY 'Test123' WITH GRANT OPTION;# 查看授权SHOW GRANTS FOR 'test'@'%';# 保存授权FLUSH PRIVILEGES;# 退出exit

验证是否可以新用户从任意主机登录数据库:

mysql -u <db_user> -p -h <db_host> -P <db_port>

如果不能访问,则需要再检查是否是数据库服务器设置了bind-address为127.0.0.1,或者数据库服务器端口的网络策略是否已开通。

小结

MarialDB和MySQL的root账号权限不同,在MySQL中root账号有GRANT ALL PRIVILEGES权限,因此可以GRANT ALL PRIVILEGES给其它用户,但是MarialDB中root账号没有GRANT ALL PRIVILEGES权限,因此在试图GRANT ALL PRIVILEGES给其它用户时,会报错Access denied for user ‘root’@‘localhost’ (using password: YES)。

参考文档 https://stackoverflow.com/questions/8484722/access-denied-for-user-rootlocalhost-while-attempting-to-grant-privileges

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。