31、用户授权 GRANT
1、查询权限:
SHOW GRANTS FOR '用户名'@'主机名';
2、授予权限:
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名'; -- 立即生效 FLUSH PRIVILEGES;
权限类型(privilege_type)
| 权限 | 说明 |
|---|---|
| ALL PRIVILEGES | 所有权限 |
| SELECT | 查询数据 |
| INSERT | 插入数据 |
| UPDATE | 更新数据 |
| DELETE | 删除数据 |
| CREATE | 创建数据库/表 |
| DROP | 删除数据库/表 |
| ALTER | 修改表结构 |
| INDEX | 创建/删除索引 |
| CREATE VIEW | 创建视图 |
| SHOW DATABASES | 查看数据库列表 |
| PROCESS | 查看进程信息 |
| RELOAD | 重新加载权限 |
| REPLICATION CLIENT | 复制客户端权限 |
| CREATE USER | 创建用户 |
| 权限 | 说明 | 适用对象 |
|---|---|---|
ALL [PRIVILEGES] |
所有可用权限(不含 GRANT OPTION) |
全局/数据库/表 |
SELECT |
查询数据 | 表、列 |
INSERT |
插入数据 | 表、列 |
UPDATE |
更新数据 | 表、列 |
DELETE |
删除数据 | 表 |
CREATE |
创建数据库或表 | 全局、数据库 |
DROP |
删除数据库或表 | 全局、数据库、表 |
ALTER |
修改表结构 | 表 |
INDEX |
创建/删除索引 | 表 |
REFERENCES |
外键约束(MySQL 中未实际使用) | 表 |
EXECUTE |
执行存储过程/函数 | 存储过程 |
USAGE |
“无权限”,仅允许连接(默认) | 全局 |
权限级别(priv_level)
格式:
ON [数据库名].[对象名]
| 级别 | 写法 | 说明 |
|---|---|---|
| 全局权限 | *.* |
所有数据库、所有表 例: GRANT CREATE USER ON *.* TO ... |
| 数据库权限 | db_name.* |
某个数据库内所有表 ✅ 最常用: test.* |
| 表权限 | db_name.tbl_name |
某个具体表 例: test.user |
| 列权限 | db_name.tbl_name (col1, col2) |
需在权限后指定列 |
| 存储过程权限 | PROCEDURE db_name.proc_name |
需加 PROCEDURE 关键字 |
⚠️ 注意:
*表示“所有”,但不能单独写*,必须是db.*或*.*- 默认数据库可通过
USE db;设置,但授权时建议写全名
用户标识(user_or_role_specification)
格式:
'用户名'@'主机'
- 用户名:区分大小写(取决于系统),建议小写。
- 主机(Host):
'%':任意主机(包括远程和本地)'localhost':仅本机(通过 socket 或 127.0.0.1)'192.168.1.%':支持通配符(网段)'10.0.51.5':具体 IP'myhost.example.com':域名(需 DNS 解析)
🔐 安全建议:避免使用
'user'@'%',尽量限制为具体 IP 或内网段。
例子
-- 授予整个数据库的所有权限 GRANT ALL PRIVILEGES ON mydatabase.* TO 'dbadmin'@'localhost'; -- 授予特定数据库的特定权限 GRANT SELECT, INSERT, UPDATE ON company.* TO 'app_user'@'%'; GRANT CREATE, DROP, ALTER ON testdb.* TO 'developer'@'192.168.1.%';
3、撤销权限:
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
注意事项
- 多个权限用逗号分隔
- 授权时,数据库名和表名可以用 * 进行通配,代表所有
本文来自博客园,作者:chao_xiong,转载请注明原文链接:https://www.cnblogs.com/chao-xiong/p/19238487

浙公网安备 33010602011771号