github

mysql 新建用户

在 MySQL 中新建用户需要 CREATE USER 语句,并根据需要授予相应权限。

基本语法

CREATE USER '用户名'@'主机' IDENTIFIED BY '密码';

1. 创建新用户

基础创建

-- 创建本地用户(只能从本机连接)
CREATE USER 'john'@'localhost' IDENTIFIED BY 'password123';

-- 创建远程用户(可以从任何主机连接)
CREATE USER 'john'@'%' IDENTIFIED BY 'password123';

-- 创建指定 IP 的用户
CREATE USER 'john'@'192.168.1.100' IDENTIFIED BY 'password123';

-- 创建网段用户
CREATE USER 'john'@'192.168.1.%' IDENTIFIED BY 'password123';

创建用户并同时设置密码(MySQL 8.0+)

-- MySQL 8.0 推荐方式
CREATE USER 'alice'@'localhost' IDENTIFIED WITH mysql_native_password BY 'strong_password';

-- 使用默认认证插件
CREATE USER 'bob'@'localhost' IDENTIFIED BY 'password123';

2. 授予权限

授予所有权限

-- 授予某个数据库的所有权限
GRANT ALL PRIVILEGES ON mydb.* TO 'john'@'localhost';

-- 授予所有数据库的所有权限(超级用户)
GRANT ALL PRIVILEGES ON *.* TO 'john'@'localhost';

-- 授予特定数据库的所有表权限
GRANT ALL ON mydb.* TO 'john'@'localhost';

授予特定权限

-- 只读权限(SELECT)
GRANT SELECT ON mydb.* TO 'reader'@'localhost';

-- 查询和插入权限
GRANT SELECT, INSERT ON mydb.* TO 'writer'@'localhost';

-- 查询、插入、更新、删除权限
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'editor'@'localhost';

-- 创建表和索引权限
GRANT CREATE, ALTER, INDEX ON mydb.* TO 'developer'@'localhost';

授予表级别的权限

-- 只针对特定表的权限
GRANT SELECT, INSERT ON mydb.users TO 'app_user'@'localhost';
GRANT ALL ON mydb.orders TO 'order_manager'@'localhost';

3. 刷新权限

重要:授予权限后必须刷新权限表,使其立即生效

FLUSH PRIVILEGES;

4. 完整示例

示例1:创建一个应用用户

-- 1. 创建用户
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'App@Password123';

-- 2. 授予必要权限
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'app_user'@'localhost';

-- 3. 刷新权限
FLUSH PRIVILEGES;

示例2:创建只读用户

-- 创建只读用户
CREATE USER 'readonly'@'%' IDENTIFIED BY 'Read@Only123';

-- 授予查询权限
GRANT SELECT ON *.* TO 'readonly'@'%';

-- 或者只授予特定数据库
GRANT SELECT ON sales_db.* TO 'readonly'@'%';

FLUSH PRIVILEGES;

示例3:创建管理员用户

-- 创建管理员(所有权限)
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'Admin@12345';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

5. 查看和管理用户

查看所有用户

-- MySQL 5.7+
SELECT user, host FROM mysql.user;

-- MySQL 8.0+
SELECT user, host, plugin FROM mysql.user;

查看用户权限

-- 查看指定用户的权限
SHOW GRANTS FOR 'john'@'localhost';

-- 查看当前用户权限
SHOW GRANTS;

修改用户密码

-- MySQL 5.7 及以前
SET PASSWORD FOR 'john'@'localhost' = PASSWORD('new_password');

-- MySQL 5.7.6+ 和 8.0
ALTER USER 'john'@'localhost' IDENTIFIED BY 'new_password';

-- 修改当前用户密码
ALTER USER USER() IDENTIFIED BY 'new_password';

删除用户

-- 删除用户
DROP USER 'john'@'localhost';

-- 删除用户(如果存在)
DROP USER IF EXISTS 'john'@'localhost';

重命名用户

RENAME USER 'old_name'@'localhost' TO 'new_name'@'localhost';

6. 权限撤销

-- 撤销特定权限
REVOKE INSERT ON mydb.* FROM 'john'@'localhost';

-- 撤销所有权限
REVOKE ALL PRIVILEGES ON *.* FROM 'john'@'localhost';

-- 撤销授权选项
REVOKE GRANT OPTION ON *.* FROM 'john'@'localhost';

7. 最佳实践

密码安全建议

-- 使用强密码(包含大小写、数字、特殊字符)
CREATE USER 'secure'@'localhost' IDENTIFIED BY 'MyP@ssw0rd2024!';

-- 设置密码过期策略
ALTER USER 'app_user'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;

-- 设置用户锁定策略(失败重试)
ALTER USER 'app_user'@'localhost' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 2;

最小权限原则

-- 不要随意授予 ALL PRIVILEGES
-- 只授予完成任务所需的最小权限

-- 好的做法
GRANT SELECT, INSERT ON app_db.* TO 'user'@'localhost';

-- 避免的做法
GRANT ALL ON *.* TO 'user'@'localhost';

8. 完整的创建用户脚本模板

-- 创建用户完整脚本
-- 1. 创建用户
CREATE USER IF NOT EXISTS 'newuser'@'localhost' IDENTIFIED BY 'StrongP@ss123';

-- 2. 设置密码策略(可选)
ALTER USER 'newuser'@'localhost' 
    PASSWORD EXPIRE INTERVAL 90 DAY 
    FAILED_LOGIN_ATTEMPTS 3;

-- 3. 授予权限
GRANT SELECT, INSERT, UPDATE ON mydatabase.* TO 'newuser'@'localhost';

-- 4. 设置资源限制(可选)
ALTER USER 'newuser'@'localhost' 
    WITH MAX_QUERIES_PER_HOUR 100 
    MAX_UPDATES_PER_HOUR 20 
    MAX_CONNECTIONS_PER_HOUR 10;

-- 5. 刷新权限
FLUSH PRIVILEGES;

-- 6. 验证
SHOW GRANTS FOR 'newuser'@'localhost';

注意事项

  1. 主机设置localhost 表示只能本机连接,% 表示任意主机
  2. 权限生效:修改权限后记得执行 FLUSH PRIVILEGES
  3. 安全建议:避免使用弱密码,遵循最小权限原则
  4. 备份:删除用户前先备份相关权限信息
  5. MySQL 版本差异:MySQL 8.0 和 5.7 在密码管理上有差异

执行这些操作需要具有 CREATE USERGRANT 权限(通常是 root 用户)。

posted @ 2026-05-22 14:04  博讯科技工作室  阅读(2)  评论(0)    收藏  举报

赣州博讯科技工作室

©2019

回到顶部
回到底部
公众号 视博web工作室