Linux下Mysql添加用户操作踩到的坑
最近,笔者正在做的project想要对数据库做比较多的调试,同时也为了方便开发与版本部署以及之后数据库的整体迁移,于是想在数据库添加用户操作以及开放数据库的远程访问,折腾了一个多小时,学到了以下一些内容。
环境与目标
操作系统: centos7.2
数据库: MariaDB,MariaDB与mysql给用户的体验差别不大,基本都是兼容的,常用命令也基本相同。
目标: 原有登录数据库用root账户,无密码访问直接登录,希望设置账户名以及对应权限。
# 原有的登录数据库方法
mysql -u root -p
原理
Mysql或者说MariaDB管理用户权限等内容,是database里面的mysql中的user表,这个user表的结构包括了:host(允许访问的主机名)、user(登录的用户名)、password(登录密码或者口令)以及允许访问的权限(包括了可以访问的数据库、增删改查等)。
因此,最容易理解的一种方式就是用mysql常用的insert、delete、update等语句即可。
操作
例如想要新增用户:
use mysql;
insert into user (Host, User, Password) values ('xxx', 'xxx', PASSWORD('xxx'));
# 刷新操作,必须做
FLUSH PRIVILEGES;
# 为其赋予权限
grant all on *.* to 'username'@'hostname' identified by 'password' with grant option;
exit;
# 重启数据库服务,这里笔者用的是mariadb,如果直接是Mysql,就用重启Mysql的指令
systemctl restart mariadb.service
想要修改root用户密码:
use mysql;
# 根据实际需求更新
update user set password=password('password') where user='root';
# 刷新操作,必须做
FLUSH PRIVILEGES;
# 为其赋予权限
grant all on *.* to 'root'@'hostname' identified by 'password' with grant option;
exit;
# 重启数据库服务,这里笔者用的是mariadb,如果直接是Mysql,就用重启Mysql的指令
systemctl restart mariadb.service
遇到过的问题以及解决方法
1. 无法进入数据库或者进入数据库无权限访问Mysql表:
可能因为忘记密码或者其他原因无法访问mysql表,则:
-
停止数据库服务:
systemctl stop mariadb.service
-
跳过密码验证:修改/etc/my.cnf文件,在[mysqld]下面添加上一行:skip-grant-tables
[mysqld] skip-grant-tables
-
重启数据库服务:
systemctl start mariadb.service
-
免密登录数据库:
mysql -uroot -p
-
执行前文增加修改等操作
-
完成之后,记得把/etc/my.cnf加的那一行删去或者注释,否则难以保证安全性,之后重启数据库服务。
2.执行1中的赋予权限操作时报错:
如果在赋予权限的时候报错:
The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
则:
-
关掉新主库的只读属性
set global read_only=0; flush privileges;
-
继续1中的步骤再次重新赋予权限后,开启只读属性
set global read_only=1; flush privileges;
-
继续1中的步骤,直至完成
3.修改之后尝试登录,用户名为空:
修改了之后尝试命令登录:
mysql -uroot -p
但是发现access denied,根据提示显示登录的是’’@‘localhost’,很明显,并没有按照我们希望的root或者其他用户名登录,使用了一个空的用户名(匿名用户)。
笔者提供一个简单粗暴的方法:直接用数据库的delete操作,删除了Mysql的user表里所有用户名(User)为空的记录。
参考资料
推荐阅读
-
解决在Linux操作系统下无法连接MySQL服务端的问题
-
如何在Linux下修改Mysql的用户(root)密码
-
linux下mysql数据库的操作的方法
-
linux mysql5.5升级至mysql5.7的步骤与踩到的坑
-
Linux下Mysql添加用户操作踩到的坑
-
Linux下Mysql的常规操作
-
Java开发人员必备的linux学习大全(用户管理,基本操作,mysql、jdk等开发软件的安装,图文详解)
-
Mysql学习(一)添加一个新的用户并用golang操作Mysql
-
运用Servlet+JSP+MySQL+JDBCTempleat+Duird+BeanUtilS+tomcat技术。实现用户信息的增删改查操作(添加功能及界面实现)。
-
安全狗下添加用户的另一方法(大量操作实现突破)