在数据库服务中,也是有用户知识概念的,类似系统中的用户管理应用,主要利用用户管理知识,可以实现:
- 用户登录数据库服务系统中(实现数据库服务登录)
- 用户管理数据库服务中对象(实现数据库对象管理)
一、创建数据库服务用户信息¶
创建数据库服务用户信息格式: '用户名称信息'@'白名单信息'
- 用户名称信息:创建的用户字符串信息
- 白名单信息:网段IP地址信息或者名称信息
用户信息构成:用户名称@主机名称/主机地址范围
- 主机范围就是允许哪些机器连接。连接的机器的iP地址,必须再允许的主机范围,否则不允许连接
- 主机名称或主机地址范围表示可以以什么样的方式,来使用数据库管理用户登录数据库系统;
常见的有两种方式:
- 第一种方式:以本地登录方式进行登录数据库系统;
- 第二种方式:以远程登录方式进行登录数据库系统;
进入到数据库环境中,执行以下SQL语句进行创建:
[root@master ~]# mysql -uroot -p123456
mysql> create user user01@'192.168.1.%' identified by '123456';
说明:使用create创建数据库服务用户信息,创建的用户默认是没有数据库的管理权限的。
在进行数据库服务对应管理用户创始时,建议一个数据库对应一个管理人员,以免多个管理员操作管理相同数据库产生冲突;
在进行用户信息创建时,具有多种用户主机域的设置方法:
方法一:设置数据服务管理用户只能本地登录数据库系统,主机域设置方法:
root@localhost
或
root@'127.0.0.1'
相关参数说明:
- localhost:表示只能通过本地主机登录数据库系统
方法二:设置数据服务管理用户可以远程登录数据库系统,主机域设置方法:
root@192.168.30.101
相关参数说明:
- 192.168.30.101:表示可以在192.168.30.101主机上远程登录管理数据库系统
在企业实际网站架构中,会有大量的集群服务器,大量的应用服务器都会连接后端的数据库服务,因此设置远程连接主机域方法有:
方法一:授权单个主机进行访问:
root@192.168.30.101
相关参数说明:
- 192.168.30.101:表示可以在192.168.30.101主机上远程登录管理数据库系统
方法二:授权一个网段进行访问:
# 方式一:书写方法(企业常用)
root@'192.168.30.0/24'
root@'192.168.30.0/255.255.255.0'
-- 授权一个网段主机均可远程登录数据库服务,表示这个网段中192.168.30.1~192.168.30.254均可访问
-- 在数据库中识别默认掩码就是/24,其他掩码信息需要具体写明,需要注意特殊VLSM子网掩码需要长格式指明,不能简写***
# 方式二:书写方法(企业常用)
root@'192.168.30.%'
-- 授权一个网段主机均可远程登录数据库服务,表示这个网段中192.168.30.1~192.168.30.254均可访问
# 方式三:书写方法
root@'172.16.%'
-- 授权一个更大网段主机均可远程登录数据库服务,表示这个网段中192.168.0.1~192.168.255.254均可访问
# 方式四:书写方法
root@'%'
-- 授权任意主机都可以远程登录数据库服务
# 方式五:书写方法
root@'192.168.30.51' 1-254
-- 授权一个具体的主机可以远程登录数据库服务,表示这个主机192.168.30.51可以访问
root@'192.168.30.5%'
-- 授权多个具体的主机可以远程登录数据库服务,表示多个主机192.168.30.50~192.168.30.59均可以访问
二、查询数据库服务用户信息¶
进行到数据库环境中,执行以下SQL语句进行查询:
mysql> select user,host,authentication_string from mysql.user;

查看当前登录系统的用户信息:
mysql> select user();

三、修改数据库服务用户密码¶
进入到数据库环境中,执行以下SQL语句进行修改
mysql> alter user user01@'192.168.1.%' identified by '123';
用户密码修改后进行验证
mysql> select user,host,authentication_string from mysql.user;
四、删除数据库服务用户信息¶
进入到数据库环境中,执行以下SQL语句进行删除:(在生产环境慎用,不用的用户信息可以先锁定)
-- 删除用户user01
mysql> drop user 'user01'@'192.168.1.%';
五、锁定数据库服务用户信息¶
在数据库服务进行用户管理时,也可以将特定数据库管理用户进行锁定,从而实现禁止某些特定用户再次登录数据库服务进行管理;
5.1 锁定数据库用户操作¶
1、进行数据库用户锁定操作
mysql> alter user user01@'192.168.1.%' account lock;
2、查看数据库用户锁定状态
mysql> select user,host,account_locked from mysql.user;

3、再次登录数据库服务,显示指定用户已经被锁定
[root@master ~]# mysql -uuser01 -p123456 -h 192.168.1.25
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 3118 (HY000): Access denied for user 'user01'@'master'. Account is locked.

5.2 解锁数据库用户操作¶
1、进行数据库用户进行解锁操作
mysql> alter user user01@'192.168.1.%' account unlock;
2、查看数据库用户锁定状态
mysql> select user,host,account_locked from mysql.user;

3、再次登录数据库服务,显示指定用户已经被解锁可以登录
[root@master ~]# mysql -uuser01 -p123456 -h 192.168.1.25

六、数据库服务用户管理特性(5.7与8.0用户管理区别)¶
6.1 用户管理区别-01:创建用户授权区别¶
之前版本,只需要grant命令即可完成用户创建操作+用户密码设置+用户授权操作
mysql> grant all on *.* to xiaoQ@'192.168.30.%' identified by 'oldboy123';

之后版本,所有系统表都是InnoDB管理了,需要先建立用户再进行授权,并且grant命令不再支持indentified by语句
mysql> create user user03@'192.168.1.%' identified by '123456';
mysql> grant all on *.* to user03@'192.168.1.%';

6.2 用户管理区别-02:用户密码插件区别¶
之前版本,用户密码加密插件使用的早期版本时,可以保证客户端程序正常登陆,保证主从架构数据正常,保证集群通讯不受到影响;
查看早期数据库服务版本的密码加密插件信息,早期数据库服务的密码加密插件为:mysql_native_password
mysql> show variables like '%auth%';
+-------------------------------+-------------------------------------------+
| Variable_name | Value |
+-------------------------------+-------------------------------------------+
| default_authentication_plugin | mysql_native_password |
| secure_auth | ON |
+-------------------------------+-------------------------------------------+
2 rows in set (0.00 sec)
之后版本,用户密码加密插件使用的后期版本时,将会导致客户端程序无法登录,导致主从架构数据正常,影响集群正常通讯过程;
查看后期数据库服务版本的密码加密插件信息,后期数据库服务的密码加密插件为:caching_sha2_password
mysql> show variables like '%auth%';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| default_authentication_plugin | caching_sha2_password |
+-------------------------------+-----------------------+
1 row in set (0.01 sec)
为了解决数据库服务升级后,用户密码加密插件影响连接建立问题,可以采取以下两种方案
- 方案一(运维职责):替换原有默认密码加密插件,更换为历史版本使用的加密插件(mysql_native_passwordl)
- 方案二(开发职责):替换客户端连接数据库服务端的驱动程序软件,使之兼容新版本加密插件功能
在新版数据库中替换原有密码加密插件具体操作方法:
方法一:创建用户过程修改加密插件信息
mysql> create user user04@'192.168.1.%' identified with mysql_native_password by '123456';
mysql> select user,host,authentication_string,plugin from mysql.user;

方法二:修改已经创建用户加密插件信息
mysql> alter user 'user03'@'192.168.1.%' identified with mysql_native_password by '123456';
mysql> select user,host,authentication_string,plugin from mysql.user;

方法三:修改数据库服务配置文件信息(全局修改)
1、修改数据库服务配置文件信息
[root@master ~]# vim /etc/my.cnf
…
…
[mysqld]
default_authentication_plugin=mysql_native_password
…
…
修改后的内容如下:
[root@master ~]# cat /etc/my.cnf
[mysql]
socket=/tmp/mysql.sock
[mysqld]
default_authentication_plugin=mysql_native_password
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
2、修改数据库服务配置后重启服务程序
[root@master ~]# service mysqld restart
3、登录数据库服务查看加密插件默认配置
[root@master ~]# mysql -uroot -p123456
mysql> show variables like '%auth%';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| default_authentication_plugin | mysql_native_password |
+-------------------------------+-----------------------+
1 row in set (0.00 sec)
企业面试实战案例分享:若数据库服务本地管理员密码遗忘如何处理
解决处理方法:将数据库重启并进入数据库安全模式(不加载验证授权表模式)
停止数据库服务,并检查数据库服务是否停止:
```tiki wiki mysql> shutdown; 或者 service mysql stop -- 在系统命令行关闭
重新启动数据库服务,并设置启动方式为忽略授权表启动方式:
```tiki wiki
[root@oldboy ~]# mysqld_safe --skip-grant-tables --skip-networking &
-- skip-grant-tables 表示忽略授权表启动
-- skip-networking 忽略网络通讯方式启动
# 进行测试服务是否启动
[root@oldboy ~]# ps -ef|grep mysql
采用免密码方式登录数据库系统中,并重置root用户密码信息:
```tiki wiki [root@oldboy ~]# mysql -uroot mysql> flush privileges; --表示先将数据库服务授权表加载到内存中,也可以将内存中修改的授权信息存入到磁盘中 mysql> alter user root@'localhost' identified by 'oldboy123'; --修改数据库服务用户密码信息
重新启动数据库服务程序:
```tiki wiki
# 杀死已经运行的数据库服务进程信息
[root@oldboy ~]# pkill mysqld
[root@oldboy ~]# ps -ef|grep mysql
# 重新启动数据库服务
[root@oldboy ~]# systemctl start mysqld
[root@oldboy ~]# netstat -lntup|grep 3306
# 重新登录进行测试
[root@oldboy ~]# mysql -uroot -poldboy123