文章目录

  • 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,允许其通过任意主机登录数据库,密码为Test123
CREATE USER 'test'@'%' IDENTIFIED BY 'Test123';# 授全部权限给数据库用户test
GRANT 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@localhost
select 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 OPTION
GRANT 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

MariaDB GRANT ALL PRIVILEGES Access denied for user相关推荐

  1. MariaDB/MySQL 报错解决:ERROR 1698 (28000): Access denied for user 'root'@'localhost'

    我在安装好MariaDB后,发现一个问题:我必须用root用户才能登录数据库,普通用户不能登录数据库,会报错: -> % mysql -h localhost -u root -p Enter ...

  2. HikariPool使用MySQL/MariaDB数据库报错解决:java.sql.SQLException: Access denied for user 'root'@'localhost' (u

    在使用HikariPool连接到我的数据库时报错如下,完整的报错放在最后: 2019-06-25 20:24:26.048 ERROR 18204 --- [nio-8080-exec-9] com. ...

  3. mariadb登陆报错: 1698 - Access denied for user

    通过shell终端中可以免密码登陆mysql -uroot,但是使用navicat for mariadb登陆报错:1698 - Access denied for user 'root'@'loca ...

  4. ORA-24247: network access denied by access control list (ACL)

    Using UTL_SMTP to send email from your oracle database has changed in Oracle 11g. Or – to be more pr ...

  5. mysql全局权限账户%登录不上ERROR 1045 (28000): Access denied for user #39;mhz#39;@#39;localhost#39; (using ...

    mysql全局权限账户%登录不上 ERROR 1045 (28000): Access denied for user 'mhz'@'localhost' (using password: YES)  ...

  6. MySQL Access denied错误的缘故情由

    作者:天极软件 起原:天极软件 当你试着联接MySQL效劳器时,如果你遇到Access denied错误,显示在下面的表指出一些你能用来纠正这个成绩的举措: 你是在安装MySQL当前运转mysql_i ...

  7. error 1044 (42000):access denied for user ''@'localhost' to database 'mysql' 解决方法

    重新安装mariaDB数据库时,出现安装权限问题,中止安装发现居然能够登陆mysql,但是登陆时可以不填密码,操作数据库时会报错:ERROR 1044 (42000): Access denied f ...

  8. mysql 报错1045 - Access denied for user “root” @ 192.111.111.11 (using password: YES)

    用navicat连接时会报: nodejs 会报这种错:TypeError Cannot read property "query " of undefined 看代码,很明显是数 ...

  9. mysql ERROR 1045 (28000): Access denied for user解决方法

    参考:http://blog.sina.com.cn/s/blog_759a5a7c01017dj0.html 以下环境是ubuntu. 1, 打算修改mysql的密码.按网上的方法修改mysql的r ...

最新文章

  1. Windows驱动程序的分类
  2. 【经验心得】CS1.6:经典中的精品
  3. 034_CSS绝对定位
  4. [Python学习]PycURL简单学习 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source …...
  5. 发生TM锁争用的情况
  6. 购物车的功能——JS源码
  7. linux同时安装python2和python3_linux-Centos7安装python3并与python2共存
  8. Python 集合(set) 介绍
  9. 错误:this is incompatible with sql_mode=only_full_group_by
  10. 95-190-440-源码-window-Trigger-Trigger简介
  11. java中Math.pow()实例_Java.math.BigDecimal.pow()方法实例
  12. pythonpandas分析数据_python 数据分析--pandas
  13. 如何快速开发后台管理系统【未完,待补充,欢迎拍砖】
  14. 重新复习数据结构-------ArrayList
  15. NekoHtml 乱码出现问号的解决
  16. java 类方法中this_Java Eclipse 中 在类与方法调用中 (this)的用法
  17. 电脑键盘快捷键使用大全
  18. JS实现鼠标点击出现文字特效
  19. 致我们终究拥抱的距离
  20. prometheus监控-1

热门文章

  1. html5广告的版式设计,版式设计在平面广告中的运用
  2. 清除浮动最有效的css写法,清除浮动最有效的css写法
  3. (十五)双边滤波Bilateral Filter
  4. Cassandra repair 工具使用
  5. 在学RTX之前的操作系统知识
  6. CVPR 2023 论文分类汇总:一个专为计算机视觉领域研究者打造的学术资源宝库
  7. SpringCloud版本Hoxton SR5 --- 第四讲:Hystrix 熔断、限流(线程)、降级
  8. 零基础学习前端-从bootstrap开始(一)
  9. ABP Vnext 学习02-授权中心 重写Login 页面
  10. multiprocessing.dummy python使用笔记