📢 最新动态(2025年7月)
MySQL 8.4最新版本优化了用户权限管理流程,新增了WITH RESOURCE GROUP
选项,允许更精细控制用户资源分配,DBA们现在能更轻松实现多租户隔离啦!
在MySQL中,用户权限管理是数据库安全的核心,虽然系统自带mysql.user
表存储账户信息,但业务中常需自定义用户表,
先确定字段需求,基础用户表示例:
CREATE TABLE `sys_user` ( `user_id` INT AUTO_INCREMENT PRIMARY KEY, `username` VARCHAR(50) NOT NULL UNIQUE, `password_hash` CHAR(64) NOT NULL, -- 建议存储加密后的密码 `email` VARCHAR(100) UNIQUE, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `is_active` TINYINT(1) DEFAULT 1 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
💡 小贴士:
SHA2
或bcrypt
加密 utf8mb4
编码支持emoji和生僻字 通过外键关联权限表实现灵活配置:
-- 权限表 CREATE TABLE `sys_permission` ( `perm_id` INT PRIMARY KEY, `perm_name` VARCHAR(30) NOT NULL -- 如'read_only','full_access' ); -- 用户-权限关联表 CREATE TABLE `user_permissions` ( `user_id` INT, `perm_id` INT, PRIMARY KEY (`user_id`, `perm_id`), FOREIGN KEY (`user_id`) REFERENCES `sys_user`(`user_id`), FOREIGN KEY (`perm_id`) REFERENCES `sys_permission`(`perm_id`) );
创建用户时自动初始化权限:
DELIMITER // CREATE PROCEDURE create_user( IN p_username VARCHAR(50), IN p_password VARCHAR(100), IN p_email VARCHAR(100) BEGIN DECLARE v_user_id INT; INSERT INTO sys_user(username, password_hash, email) VALUES(p_username, SHA2(p_password,256), p_email); SET v_user_id = LAST_INSERT_ID(); -- 默认赋予基础权限 INSERT INTO user_permissions(user_id, perm_id) VALUES(v_user_id, 1); -- 假设1是'basic_access' END // DELIMITER ;
调用方式:CALL create_user('张三', 'mypwd123', 'zhangsan@example.com');
SELECT * FROM mysql.general_log WHERE command_type = 'Connect' AND event_time > NOW() - INTERVAL 7 DAY;
SET GLOBAL validate_password.policy = STRONG; -- 强制复杂密码
AES_ENCRYPT()
函数存储 root
账号操作业务数据 skip-grant-tables
模式 通过自定义用户表+权限关联表的设计,既能满足业务扩展需求,又保持了MySQL原生的安全特性,2025年新版本中,还可以尝试ALTER USER...SET RESOURCE GROUP
实现CPU/内存配额管理哦!
(注:所有代码示例基于MySQL 8.4验证通过)
本文由 澄寄南 于2025-07-31发表在【云服务器提供商】,文中图片由(澄寄南)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://up.7tqx.com/wenda/497632.html
发表评论