用户与权限管理
MySQL 用户与权限管理(基础)
MySQL 通过用户名 + 主机名来唯一标识一个用户账户,并可以授予不同级别的权限(全局、数据库、表、列等)。下面是基础操作。
一、创建用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
username:登录用户名。host:允许该用户从哪个主机连接。'localhost':仅允许本机连接。'%':允许任意主机连接(注意安全风险)。- 也可指定具体 IP 或网段,如
'192.168.1.%'。
IDENTIFIED BY 'password':设置密码。
示例:
-- 创建本地用户(仅本机可登录)
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'SecurePass123';
-- 创建可从任意主机连接的用户(谨慎使用)
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'RemotePass456';
注意:MySQL 8.0 默认使用
caching_sha2_password插件,旧客户端可能需要调整。可指定插件:IDENTIFIED WITH mysql_native_password BY 'password'。
二、授予权限(GRANT)
GRANT privilege1, privilege2 ON database_name.table_name TO 'username'@'host';
权限级别:
*.*:所有数据库的所有表(全局权限)。database_name.*:指定数据库的所有表。database_name.table_name:指定数据库的指定表。- 甚至可指定列(如
SELECT(col1),但较少用)。
常见权限:
| 权限 | 说明 |
|---|---|
ALL [PRIVILEGES] | 授予所有可用权限(除 WITH GRANT OPTION 外) |
SELECT | 查询数据 |
INSERT | 插入数据 |
UPDATE | 更新数据 |
DELETE | 删除数据 |
CREATE | 创建数据库或表 |
DROP | 删除数据库或表 |
INDEX | 创建/删除索引 |
ALTER | 修改表结构 |
GRANT OPTION | 允许将自己的权限授予其他用户(需额外指定) |
示例:
-- 授予 app_user 对 mydb 数据库所有表的 SELECT 和 INSERT 权限
GRANT SELECT, INSERT ON mydb.* TO 'app_user'@'localhost';
-- 授予管理员全局所有权限,且可授权给其他人
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
-- 授予对特定表的 UPDATE 权限
GRANT UPDATE ON mydb.orders TO 'app_user'@'localhost';
提示:
WITH GRANT OPTION允许该用户将自己拥有的权限转授给其他用户(谨慎授予)。
三、撤销权限(REVOKE)
REVOKE privilege1, privilege2 ON database_name.table_name FROM 'username'@'host';
示例:
-- 撤销 app_user 对 mydb 数据库的 INSERT 权限
REVOKE INSERT ON mydb.* FROM 'app_user'@'localhost';
-- 撤销全局权限
REVOKE ALL PRIVILEGES ON *.* FROM 'temp_user'@'%';
注意:REVOKE 只能撤销已授予的权限,不能撤销 GRANT OPTION 本身(需单独指定 WITH GRANT OPTION 的撤销,语法同)。
四、删除用户(DROP USER)
DROP USER 'username'@'host';
示例:
DROP USER 'old_user'@'localhost';
如果用户有打开的连接,可能会报错,可先
KILL连接或强制删除。
五、刷新权限(FLUSH PRIVILEGES)
FLUSH PRIVILEGES;
- 作用:使之前通过
GRANT、REVOKE、CREATE USER等命令修改的权限立即生效**(其实这些 DCL 命令会自动刷新,但在某些情况下如果直接操作了权限表,就需要手动刷新)**。 - 通常在使用
GRANT或REVOKE后不需要手动执行,但如果你手动修改了mysql.user表,则需要执行FLUSH PRIVILEGES。
六、查看权限
-- 查看当前用户的权限
SHOW GRANTS;
-- 查看指定用户的权限
SHOW GRANTS FOR 'username'@'host';
示例:
SHOW GRANTS FOR 'app_user'@'localhost';
七、完整示例流程
-- 1. 创建用户
CREATE USER 'dev'@'localhost' IDENTIFIED BY 'dev123';
-- 2. 授予权限(开发数据库的所有表的所有权限)
GRANT ALL PRIVILEGES ON devdb.* TO 'dev'@'localhost';
-- 3. 查看权限
SHOW GRANTS FOR 'dev'@'localhost';
-- 4. 测试连接(另开终端)
-- mysql -u dev -p -h localhost
-- 5. 撤销部分权限(例如撤销删除权限)
REVOKE DELETE ON devdb.* FROM 'dev'@'localhost';
-- 6. 删除用户(不再需要)
DROP USER 'dev'@'localhost';
八、安全最佳实践
- 最小权限原则:只授予用户必须的最小权限(例如只读用户仅
SELECT)。 - 限制主机:尽量不要使用
'%',而是指定具体的 IP 或应用服务器地址。 - 强密码:使用复杂密码,避免默认或弱密码。
- 定期清理:删除不再使用的用户。
- 避免使用
WITH GRANT OPTION:除非用户真正需要转授权限。 - 权限分级:生产环境、测试环境、只读备份账号应分开。
通过以上基础命令,可以完成 MySQL 日常的用户管理和权限分配。更复杂的角色管理(MySQL 8.0 支持 CREATE ROLE)属于进阶内容。
参考文献
| 资料 | 说明 |
|---|---|
| MySQL 8.0 手册 | 官方 |
| 数据存储导读 | 学习路径 |
相关文章
常用函数
MySQL 提供了丰富的内置函数,用于处理字符串、数值、日期和时间以及条件逻辑。下面分类介绍最常用的基础函数。
多表查询
多表查询用于从两个或更多表中获取数据。常见的连接类型包括内连接、外连接(左、右)和自连接。
MySQL 安装与基本操作
MySQL 的安装因操作系统而异,但安装完成后,通过命令行客户端连接并进行基本管理的方法是通用的。下面分别介绍安装方式和常用命令。
数据类型
MySQL 支持多种数据类型,可分为数值、字符串、日期时间、枚举/集合以及 JSON 等。选择合适的类型可以优化存储空间和查询性能。
查询数据
数据查询语言(DQL)用于从数据库中检索数据,核心是 SELECT 语句。下面从基础查询、条件筛选、排序、限制行数、聚合与分组等方面进行介绍。
数据库与表的基本操作
DDL(Data Definition Language)用于定义数据库结构,包括创建、修改、删除数据库和表。下面介绍 MySQL 中常用的 DDL 语句。
Series
mysql
1 / 11