最近,笔者正在做的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)为空的记录。
本文详细介绍了在CentOS 7.2环境下,如何使用MariaDB进行用户管理及权限设置,包括创建新用户、修改root用户密码、解决无法访问数据库等问题。通过SQL语句实现用户操作,并提供了在遇到权限问题时的解决方法。
4093

被折叠的 条评论
为什么被折叠?



