目录
- 一:MySQL的账号结构
- 二:管理MySQL账号
- 1. 查看账号
- 2. 创建账号
- 3. 删除账号
- 三: MySQL账号权限管理
- 1. 账号授权
- 2. 查看权限
- 3. 撤销权限
- 四:MySQL账号密码管理
- 1. 5.7.6 之前
- 2. 5.7.6 及之后
- 3. 8.0 及之后
一:MySQL的账号结构
MySQL账号设计采用了用户名@主机名
的形式。
-
用户名:在 MySQL 系统中的标识符。每个用户都有一个唯一的用户名,用来区分不同的用户。
-
主机名:指用户可以从哪个主机(IP 地址或主机名)连接到 MySQL 服务器。通过限制主机名,可以控制用户的访问范围。
因为这种设计方式,账号通过 用户名@主机名
的组合来唯一标识
,只有当用户名和主机名都相同时,才被视为同一个账号。
即使用户名相同,但主机名不同,也会被视为不同的账号
。
二:管理MySQL账号
1. 查看账号
MySQL的账号都是存在mysql.user表中的,可以通过查看这张表的信息来查看当前mysql的账号信息。
例如:查看当前mysql的所有账号信息
select user,host from mysql.user;
2. 创建账号
语法格式
CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';
具体细节
(1)当用户名和主机名都是简单的字母数字组合,可以不使用单引号。
例如:
CREATE USER tom@'localhost IDENTIFIED BY eHIGH2014;
(2)当用户名和主机名不只是简单的字母数字组合,还包含了其他的,就需要用 单引号。
例如:
CREATE USER tom@'127.0.0.1' IDENTIFIED BY 'eHIGH2014';CREATE USER 'BOB_tom'@'%' IDENTIFIED BY 'eHIGH2014';
(3)主机名部分可以指定为具体的 IP 地址、一个网段,并且支持使用标准 SQL 通配符 _
和 %
。
例如:
CREATE USER replica@'192.168.0._' IDENTIFIED BY eHIGH2014;
3. 删除账号
DROP USER username@localhost
三: MySQL账号权限管理
1. 账号授权
格式:
GRANT 权限类型 ON 数据库名.表名 TO '用户名'@'主机名';
例如:授予所有权限:
# MySQL 在数据库和数据表匹配的使用可以使用 *,其他场景就只能用 _ 和 %GRANT ALL PRIVILEGES ON *.* TO tom@localhost;
2. 查看权限
SHOW GRANTS FOR '用户名'@'主机名';
3. 撤销权限
REVOKE 权限类型 ON 数据库名.表名 FROM '用户名'@'主机名';
四:MySQL账号密码管理
1. 5.7.6 之前
特点:
1、密码通常存放在 mysql.user
表的 Password
字段中。
2、支持PASSWORD()
函数。这个函数用于将明文密码加密成一个哈希字符串。
方法一:通过 SET PASSWORD
SET PASSWORD FOR 'username'@'hostname' = PASSWORD('newpassword');
方法二:修改mysql.user表
UPDATE mysql.user SET Password=PASSWORD('newpassword') WHERE User='username' AND Host='hostname';FLUSH PRIVILEGES;
2. 5.7.6 及之后
特点:
1、密码存放在 authentication_string
字段,mysql.user表的 password 字段被废弃
2、官方不再推荐使用 PASSWORD()
函数来加密明文密码。
方法一:通过 ALTER USER(首选)
ALTER USER 'username'@'hostname' IDENTIFIED BY 'newpassword';
方法二:通过 SET PASSWORD
这种方式指定明文密码,存储到authentication_string
字段的信息会默认加密为一个哈希字符串。
SET PASSWORD for user@'host' = 'auth_string'
3. 8.0 及之后
特点:
1、PASSWORD()
函数彻底被移除出mysql,因为它使用较不安全的加密算法(如 MD5)
2、SET PASSWORD
语法修改密码这种方法还可以用,但是不是首选方法。
方法一:通过 SET PASSWORD
这种方式修改密码,会默认将明文密码进行加密后生成的哈希字符串存储在authentication_string
字段。
SET PASSWORD for user@'host' = 'auth_string'
方法二:使用 ALTER USER(首选方式)
ALTER USER 'username'@'hostname' IDENTIFIED BY 'newpassword';