目 录CONTENT

文章目录

MySQL用户、权限管理

vanegoo
2024-04-25 / 0 评论 / 0 点赞 / 9 阅读 / 5891 字 / 正在检测是否收录...

用户管理

用户信息存储在mysql.user表中

MySQL用户

  • MySQL是一个多用户数据库, 具有功能强大的访问控制功能。

  • 使用过程中可以为不同用户分配不同的权限。

  • root用户是超级管理员, 拥有所有权限, 包括创建用户,,删除用户 和修改用户密码等管理权限。

  • 为了实际项目的需要, 可以创建拥有不同权限的普通用户。

创建用户

CREATE USER 'username'@'hostname' IDENTIFIED BY 'password'

# 例:CREATE USER 'tom'@'localhost' IDENTIFIED BY '123456'

查询用户

SELECT user,host FROM mysql.user;
# 例: SELECT user,host FROM mysql.user WHERE user='tom';

重命名用户

RENAME USER 'tom'@'localhost' TO 'jerry'@'localhost'

删除用户

DROP USER 'jerry'@'localhost'

修改用户密码

# 使用 SET PASSWORD 命令:
SET PASSWORD FOR 'username'@'hostname' = PASSWORD('new_password');
# 使用 ALTER USER 命令:
ALTER USER 'username'@'hostname' IDENTIFIED BY 'new_password';

## 注意,在使用 SET PASSWORD 命令时,需要在 MySQL 5.7.6 之前的版本中使用旧密码哈希函数(OLD_PASSWORD()),而在 MySQL 5.7.6 及以后的版本中则使用新密码哈希函数(PASSWORD())。而使用 ALTER USER 命令时则不需要考虑这个问题。

权限管理

MySQL权限

  • MySQL权限就是MySQL允许做权限以内的事情

  • 比如:

    • 只允许执行SELECT操作, 那么久不能执行UPDATA操作

    • 只允许从192.168.4.5主机连接那么久不能从192.168.4.5以外的其他主机连接MySQL

MySQL权限两阶段验证

  • 第一阶段

    • 服务器首先会检查是否允许连接

  • 第二阶段

    • 如果能连接, MySQL会检查发出的每个请求, 查看是否有足够的权限实施

查看用户权限

SHOW GRANTS FOR 'username'@'hostname';

授予用户权限

  • 语法: GRANT 权限 ON 库名.表名 TO用户

# 授予指定单个权限
GRANT SELECT ON project1.* TO 'tom'@'localhost';
# 授予指定多个权限
GRANT INSERT,UPDATE,DELETE ON project1.* TO 'tom'@'localhost';
# 授予用户所有权限
GRANT ALL PRIVILEGES ON project2.* TO 'tom'@'localhost';

撤销用户授权

  • 语法: REVOKE 权限 ON 库,.表 FROM 用户@地址

# 削减用户拥有的所有权限
REVOKE ALL PRIVILEGES ON project2.* FROM 'tom'@'localhost';

MySQL权限管理原则

  • 授予满足用户需求的最小权限

  • 创建用户时指定用户登录的主机范围

  • 初始化数据库时删除没有密码的用户

  • 为每个用户设置满足复杂度要求的密码

  • 定期清理了不需要的用户

  • 定期回收用户不需要的权限

MySQL用户权限分布

用户相关

  • MySQL的用户信息记录在mysql.user表

权限相关

  • 全局权限记录在mysql.user表

  • 完整库权限记录在mysal.db中

  • 完整表权限记录在musql.tables_priv表

  • 指定字段权限记录在mysql.tables_prv和mysql.columns_priv表

# 查看用户信息
DESC mysql.user;

CREATE USER 'jerry'@'localhost' IDENTIFIED BY '123456';

SELECT user,host,authentication_string FROM mysql.user WHERE user='jerry';

SHOE GRANTS FOR 'jerry'@'localhost';
  • MySQL用户全局权限

GRANT SELECT ON*.* TO 'jerry'@'localhost';

SHOW GRANTS FOR 'jerry'@'localhost';

SELECT * FROM mysql.user WHERE user='jerry';
  • MySQL 用户指定库权限

GRANT INSERT ON project1.* TO 'jerry'@'localhost';

SHOW GRANTS FOR 'jerry'@'localhost';

SELECT * FROM mysql.db WHERE user='jerrt';
  • MySQL用户指定表权限

CREATE DATABASE project1;

CREATE TABLE project1.user(
id INT NULL PRIMARY KEY AUTO_INCREMENT,
name CHAR(50) NOT NULL DEFAULT '',
age TINYINT UNSIGNED NOT NULL DEFAULT 18,
class CHAR(9) NOT NULL DEFAULT 'NSDVN2502'
)ENGINT=InnoDB,CHARSET='utf8';
# 查看用户指定表权限
GRANT DELETE ON project1.user TO 'jerry'@'localhost';

SHOW GRANTS FOR 'jerry'@'localhost';

SELECT * FROM mysql.tables_priv WHERE user='jerry';
  • MySQL用户指定表字段权限

GRANT UPDATE(name.age) ON project1.user TO 'jerry'@'localhost';

SHOW GRANTS FOR 'jerry'@'localhost';

SELECT * FROM mysql.tables_priv WHERE user='jerry';

SELECT * FROM mysql.columns_priv EHERE user='jerry';

0

评论区