SQL 化权限管理是什么
启用 SQL 访问控制后,可以像常规数据库那样管理账号:CREATE USER 建账号、GRANT 授权、CREATE ROLE 组织权限、CREATE QUOTA 限制资源,账号信息默认存放在 access_control_path 指向的本地文件中。授权支持库级、表级甚至列级,配额可以限制单用户的查询资源用量。排查权限来源时要留意 users.xml 里的账号与 SQL 化账号可能并存,SHOW GRANTS、system.users 与 system.grants 是最直接的核对手段。
基本信息
| 建用户 | CREATE USER app IDENTIFIED WITH sha256_password BY '…' |
|---|---|
| 授权 | GRANT SELECT ON analytics.* TO app,也支持列级授权 |
| 角色与配额 | CREATE ROLE / GROUP、CREATE QUOTA |
| 查看 | SHOW USERS / SHOW GRANTS / system.users / system.grants |
| 存储位置 | access_control_path 下的本地文件 |
| 所属系统 | ClickHouse(SQL 访问控制) |
典型使用场景
- 只读账号:给数据平台或 BI 工具开只读权限
- 最小权限:按库表甚至列授权,限制敏感字段的访问
- 角色管理:把常用权限组合成角色后批量授予
- 资源限制:用 QUOTA 约束单用户的查询资源用量
- 权限审计:用 system.grants 导出各账号的授权清单
建号与授权
建号与授权
CREATE USER app_user IDENTIFIED WITH sha256_password BY 'S3cret'; -- 建账号
GRANT SELECT ON analytics.* TO app_user; -- 库级只读
SHOW GRANTS FOR app_user; -- 核对已授权限
SELECT name, storage, auth_type FROM system.users; -- 账号来源与认证方式语句读法
| 语句 | 作用 | 注意 |
|---|---|---|
| CREATE USER | 建账号 | 认证方式与密码策略按版本选择 |
| GRANT | 授权 | 支持库级、表级与列级 |
| CREATE ROLE | 建角色 | 便于批量授予同一组权限 |
| CREATE QUOTA | 配额 | 限制单用户资源用量 |
| SHOW GRANTS | 查看授权 | 排查权限来源最快的手段 |
只读账号是数据平台最常见的需求:授权范围尽量收到库表与列级,再配合 QUOTA 限制查询资源,避免分析查询影响在线业务。
users.xml 中定义的账号与 SQL 化账号并存时,排查要两边都看,否则容易误判权限来源,出现「改了授权却不生效」的情况。
默认用户 default 若保留空密码且可直连,生产环境要为它设置密码或限制来源地址,外部扫描最先尝试的就是这类账号。
权限变更后用 SHOW GRANTS FOR 与 system.grants 双向核对,并定期导出授权清单做审计,比事故发生后逐个追查快得多。