在数据库服务中,也是有用户知识概念的,类似系统中的用户管理应用,主要利用用户管理知识,可以实现:

  • 用户登录数据库服务系统中(实现数据库服务登录)
  • 用户管理数据库服务中对象(实现数据库对象管理)

一、创建数据库服务用户信息

创建数据库服务用户信息格式: '用户名称信息'@'白名单信息'

  • 用户名称信息:创建的用户字符串信息
  • 白名单信息:网段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;

Day001-数据库服务安装配置过程-图14

查看当前登录系统的用户信息:

mysql> select user();

Day001-数据库服务安装配置过程-图15

三、修改数据库服务用户密码

进入到数据库环境中,执行以下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;

Day001-数据库服务安装配置过程-图16

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.

Day001-数据库服务安装配置过程-图17

5.2 解锁数据库用户操作

1、进行数据库用户进行解锁操作

mysql> alter user user01@'192.168.1.%' account unlock;

2、查看数据库用户锁定状态

mysql> select user,host,account_locked from mysql.user;

Day001-数据库服务安装配置过程-图18

3、再次登录数据库服务,显示指定用户已经被解锁可以登录

[root@master ~]# mysql -uuser01 -p123456 -h 192.168.1.25

Day001-数据库服务安装配置过程-图19

六、数据库服务用户管理特性(5.7与8.0用户管理区别)

6.1 用户管理区别-01:创建用户授权区别

之前版本,只需要grant命令即可完成用户创建操作+用户密码设置+用户授权操作

mysql> grant all on *.* to xiaoQ@'192.168.30.%' identified by 'oldboy123';

Day001-数据库服务安装配置过程-图20

之后版本,所有系统表都是InnoDB管理了,需要先建立用户再进行授权,并且grant命令不再支持indentified by语句

mysql> create user user03@'192.168.1.%' identified by '123456';

mysql> grant all on *.* to user03@'192.168.1.%';

Day001-数据库服务安装配置过程-图21

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;

Day001-数据库服务安装配置过程-图22

方法二:修改已经创建用户加密插件信息

mysql> alter user 'user03'@'192.168.1.%' identified with mysql_native_password by '123456';

mysql> select user,host,authentication_string,plugin from mysql.user;

Day001-数据库服务安装配置过程-图23

方法三:修改数据库服务配置文件信息(全局修改)

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