01 MySQL 8:数据库账户管理
1. 远程登录MySQL
# 语法:mysql -h [目标IP/主机名] -P[端口号] -u[用户名] -p[密码]
mysql -h192.168.85.131 -P3306 -umayan -p
2. 查询账户
2.1. 查看用户信息
MySQL
数据库的 用户信息 存放在 user
表( MySQL
服务下存在系统自带的 mysql
数据库)。
use mysql ;
show tables;
2.2. 查看 user 表结构
desc user;
# 或者
describe user;
2.3. 查看密码信息
密码信息: 经过加密后的密码信息
select user,host,authentication_string from user;
3. 新建账户
📣📣注意: MySQL 8
版本中新增了一个 system_user
帐户类型。由于 root
用户没有 SYSTEM_USER
权限。然后对其他账户进行操作时,有可能会出现如下错误。
如果出现上图错误,则给 root
账户添加 system_user
权限即可:
grant system_user on *.* to 'root';
3.1. 新建登录账户
语法: CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
参数说明:
参数 | 简述 |
---|---|
username | 创建的用户名 |
localhost | 指定该用户在哪个主机上可以登陆,如果是本地用户可用 localhost ,如果想让该用户可以从任意远程主机登陆,可以使用通配符 % 。 |
password | 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器。 |
# 新建chnmayan账户,密码为123456.允许登录的主机%
CREATE USER 'chnmayan'@'%' IDENTIFIED BY '123456';
4. 修改账户
# 语法:RENAME USER '[旧的用户名]'@'[旧的主机地址]' TO '[新的用户名]'@'[新的主机地址]';
RENAME USER 'chnmayan'@'%' TO 'mayan'@'%';
5. 删除账户
# 语法:
DROP USER '[用户名]'@'[登录主机地址]';
6. 查询当前登录账户
# 语法:
select user();
7. 修改账户密码
7.1. 普通账户修改自身
MySQL 8
版本相对于旧版本有些不同之处。普通账户修改自身登录密码的时候用到 REPLACE
关键字,进行旧密码验证。
# 语法:
ALTER USER USER() IDENTIFIED BY '[新密码]' REPLACE '[旧密码]';
# 或者
ALTER USER '[用户名]'@'[登录主机地址]' IDENTIFIED BY '[新密码]' REPLACE '[旧密码]';
7.2. root账户修改自身
ALTER USER USER() IDENTIFIED BY '[新密码]';
# 或者
ALTER USER '[用户名]'@'[登录主机地址]' IDENTIFIED BY '[新密码]';
7.3. root账户修改其他账户密码
ALTER USER '[用户名]'@'[登录主机地址]' IDENTIFIED BY '[新密码]';
root
修改密码的时候不需要 REPLACE
关键字校验旧密码。REPLACE
关键字只适用于普通账户修改自身密码 的时候。
7.4. 指定密码的加密方式
MySQL 8
中是可以指定密码的加密方式(默认:caching_sha2_password
)。
旧版本的加密方式: mysql_native_password
新版本的加密方式: caching_sha2_password
ALTER USER 'chnmayan'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
8. root账户密码忘记
8.1. 关闭mysql服务
systemctl stop mysqld.service
8.2. 启动mysql服务
mysqld --user=root --skip-grant-tables
8.3. 查看mysql服务状态
systemctl status mysqld
8.4. 登录MySQL数据库
mysql -hlocalhost -P3306 -uroot -p
8.5. 登录后查看mysql.user表
SELECT host, user, plugin, authentication_string FROM user;
8.6. 删除root用户
delete from mysql.user where user=’root’;
flush privileges;
commit;
8.7. 新建root用户
create user root;
8.8. 给root用户设置密码
alter user 'root'@'%' identified by '新密码';
8.9. 给root用户赋权
grant all on *.* to 'root'@'%';
8.10. 更新root用户给其他用户赋权的权限
此时, root
账户给其他用户进行赋权操作,可能会报错:显示 root
用户没有授权权限。
mysql.user
表里面的 Grant_priv
字段的值为 N ,把这个字段的值更新为 Y 即可。
update mysql.user set Grant_priv='Y' where user='root';
8.11. 刷新权限
FLUSH PRIVILEGES;
9.账户权限
9.1. 查询权限
9.1.1. 查询当前登录账户
SHOW GRANTS;
9.1.2. 查看其他账户
# 语法:SHOW GRANTS FOR '[用户名]'@'[登录主机地址]';
SHOW GRANTS FOR 'chnmayan'@'%';
9.2. 赋予权限
使用足够权限的用户(通常是 root
用户)登录 MySQL
服务器。
GRANT
语句为用户分配权限。权限可以精确到特定的数据库、表或操作类型(如SELECT
,INSERT
, UPDATE
, DELETE
等)。
# 语法:
GRANT [权限列表] ON [数据库名.表名] TO '[用户名]'@'[登录主机地址]';
9.2.1. 赋权某账户所有权限
给用户 chnmayan
赋予权限,使其能从任意主机( %
)访问并操作所有数据库的所有权限。
GRANT ALL PRIVILEGES ON *.* TO 'chnmayan'@'%';
9.2.2. 赋权某账户指定数据库的所有权限
给用户 chnmayan
赋予权限,使其能从任意主机( %
)访问并操作指定数据库(比如 db1
)的全部权限。
GRANT ALL PRIVILEGES ON db1.* TO 'chnmayan'@'%';
9.2.3. 赋权某账户指定数据库的指定权限
给用户 chnmayan
赋予权限,使其能从任意主机( %
)访问并操作指定数据库(比如 db1
)的读权限。
GRANT SELECT ON db1.* TO 'chnmayan'@'%';
9.2.4. 刷新权限
分配完权限后,通常需要执行 FLUSH PRIVILEGES
来确保权限立即生效。
FLUSH PRIVILEGES;
9.2.5. 补充
privileges: 用户的操作权限,如 SELECT
, INSERT
, UPDATE
,CREATE
等,如果要授予所有的权限则使用 ALL
。
拓展:
权限 | 权限说明 | 权限级别 |
---|---|---|
CREATE | 创建数据库、表或索引的权限 | 数据库、表或索引 |
DROP | 删除数据库或表的权限 | 数据库或表 |
GRANT OPTION | 赋予权限选项 | 数据库或表 |
REFERENCES | 引用权限 | 数据库或表 |
ALTER | 更改表的权限 | 数据表 |
DELETE | 删除表数据的权限 | 数据表 |
INDEX | 操作索引的权限 | 数据表 |
INSERT | 添加表数据的权限 | 数据表 |
SELECT | 查询表数据的权限 | 数据表 |
UPDATE | 更新表数据的权限 | 数据表 |
CREATE VIEW | 创建视图的权限 | 视图 |
SHOW VIEW | 查看视图的权限 | 视图 |
ALTER ROUTINE | 更改存储过程的权限 | 存储过程 |
CREATE ROUTINE | 创建存储过程的权限 | 存储过程 |
EXECUTE | 执行存储过程权限 | 存储过程 |
FILE | 服务器主机文件的访问权限 | 文件管理 |
CREATE TEMPORARY TABLES | 创建临时表的权限 | 服务器管理 |
LOCK TABLES | 锁表的权限 | 服务器管理 |
CREATE USER | 创建用户的权限 | 服务器管理 |
RELOAD | 执行 flush privileges, refresh, reload 等刷新命令的权限 | 服务器管理 |
PROCESS | 查看进程的权限 | 服务器管理 |
REPLICATION CLIENT | 查看主从服务器状态的权限 | 服务器管理 |
REPLICATION SLAVE | 主从复制的权限 | 服务器管理 |
SHOW DATABASES | 查看数据库的权限 | 服务器管理 |
SHUTDOWN | 关闭数据库的权限 | 服务器管理 |
SUPER | 超级权限 | 服务器管理 |
ALL [PRIVILEGES] | 所有权限 | |
USAGE | 没有任何权限 |
9.3. 撤销权限
使用 REVOKE
语句撤销用户的权限。撤销权限的方式与授予权限相似,你需要指定要撤销权限的用户、权限类型以及作用的对象(数据库、表等)。
# 语法:revoke [权限列表/ALL] on 库名.表名 from '[用户名]'@'[登录主机地址]';
9.3.1. 撤销某用户全部权限
REVOKE ALL PRIVILEGES ON *.* FROM 'chnmayan'@'%';
9.3.2. 撤销某用户指定数据库全部权限
REVOKE ALL PRIVILEGES ON db1.* FROM 'chnmayan'@'%';
9.3.3. 撤销某用户指定数据库的指定权限
REVOKE SELECT PRIVILEGES ON db1.* FROM 'chnmayan'@'%';
9.3.4. 刷新权限
撤销完权限后,通常需要执行 FLUSH PRIVILEGES
来确保权限立即生效。
FLUSH PRIVILEGES;
本文隶属于 【个人专栏】:02 MySQL📋📋📋
到这里 01 MySQL 8:数据库账户管理 就结束了!!!🎉🎉🎉
欢迎小伙伴们学习和指正!!!😊😊😊
祝大家学习和工作一切顺利!!!😎😎😎