1.mysql用户的定义

在mysql中,用户由用户名主机域组成的。

1.1 用户名的写法

mysql> create user test1@'localhost';

注意:用户名不要以数字、符号开头,如若一定要这么写,给用户名加上引号才能创建用户。

1.2 用户中的主机域的写法

  • 单个主机地址写法
127.0.0.1
::1
localhost
db01
  • 范围型主机地址写法
172.16.1.%
172.16.%.%
172.%.%.%
%
172.16.1.5%
172.16.1.0/255.255.255.0

其中%代表所有,如172.16.1.%即代表172.16.1.0~172.16.1.255这个范围内的所有地址

2.用户管理

2.1 创建用户

mysql> CREATE USER test2@'localhost' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.00 sec)

2.2 查看数据库中得所有用户

mysql> SELECT User,Host,Password FROM mysql.user;

2.3 删除创建的用户

mysql> DROP USER test2@'localhost';

2.4 修改用户密码

  • 使用update命令修改密码
mysql> UPDATE mysql.user SET Password=PASSWORD('123') WHERE User='root' AND Host='localhost';
  • 使用grant授权修改密码
mysql> GRANT ALL PRIVILEGES ON *.* TO root@'localhost' IDENTIFIED BY '123';
  • 使用mysqladmin修改密码
#密码明文修改
mysqladmin -uroot -p123 password '456'

#不让密码显示出来
mysqladmin -uroot -p password
  • 修改当前登录数据的用户密码
mysql> SET Password=PASSWORD('123');

3.用户权限管理

在mysql数据库中,给用户授权都是通过grant命令来操作的

  • 授权所有库、所有表
GRANT ALL PRIVILEGES ON *.* TO test03@'172.16.1.%' IDENTIFIED BY '123'; 
  • 单库授权
GRANT ALL PRIVILEGES ON mysql.* TO test03@'172.16.1.%' IDENTIFIED BY '123'; 
  • 单表授权
GRANT ALL PRIVILEGES ON mysql.user TO test03@'172.16.1.%' IDENTIFIED BY '123'; 
  • 单列授权,在企业中也称为脱敏(脱离敏感信息)
GRANT SELECT(User,Host) ON mysql.user TO test03@'172.16.1.%' IDENTIFIED BY '123'; 

4.解决忘记数据库root密码问题

此方法不适用于生产环境,因为要先停止数据库。记住在生产环境中停止数据库是个大忌。

  • 停止数据库
systemctl stop mysqld
  • 跳过授权表和网络启动数据库
nohup mysqld_safe --skip-grant-tables --skip-networking &
  • 进入数据库,修改密码

直接使用mysql命令,就可以登进数据库了

update mysql.user set password=password('123') where user='root' and host='localhost';

刷新权限

flush privileges;
  • 关闭安全模式启动的数据库
mysqladmin -uroot -p123 shutdown
  • 使用systemd启动数据库
systemctl start mysqld
  • 连接数据库
mysql -uroot -p123