用途:诊断并解决 ClickHouse 的授权与认证错误,尤其是版本升级后出现的 ACCESS_DENIED、NOT_ENOUGH_PRIVILEGES 类问题。它从 system.errors、system.query_log、system.grants、system.role_grants 中定位被阻止操作缺少的权限,并计算解封所需的最小授权。若连接模式、集群和时间窗口尚未确定,应先运行 altinity-expert-clickhouse-connection。
主要能力:查询包 checks.sql 含 4 项检查——grants-01 查 24 小时内 system.errors 中的访问与认证错误;grants-02 从异常码 497 的失败查询提取缺失权限;grants-03 查受影响用户的当前授权;grants-04 查其已分配角色。reference.md 提供权限族与 access_control_improvements 默认值背景,仅在需要解释建议时阅读。
使用方式:从技能目录逐个读取包文件,语句逐条执行,不要整文件运行;语句以分号结尾,以 -- @check <id> <title> 开头,结果保留 id。遵守 -- @requires,缺表、需要 Keeper 而服务器无 Keeper/ZooKeeper、或版本条件不满足时跳过,并列出跳过 id 与原因。存在集群宏时保留 {cluster},否则按连接技能的改写规则处理;其他 {placeholder} 需替换真实值或跳过。出错时记录检查 id 与错误首行后继续;仅对 UNKNOWN_IDENTIFIER 运行 DESCRIBE TABLE system.<table> 并去掉缺失列。severity 列为该行结论,直接采用,不要重新评级。
关键规则:grants-02 的 missing_privileges 是服务器自身答案,据此构造 GRANT 语句,不要凭查询文本推断权限。授权范围尽量收窄,优先列或 db.table,而非 db.* 或 .。若用户已通过角色获得权限,优先授予角色。grants-01 的认证错误(AUTHENTICATION_FAILED、WRONG_PASSWORD、REQUIRED_PASSWORD)不属权限问题,应修认证方式或主机 ACL,不要提 GRANT。对 SOURCES 及其成员 S3、URL、FILE、REMOTE 等外泄、SSRF、提权面权限,只授具体所需项并授给角色,绝不用总括权限或 .。勿为常规 ACCESS_DENIED 授予 ACCESS MANAGEMENT、WITH GRANT OPTION、displaySecretsInShowAndSelect、NAMED COLLECTION ADMIN、ALLOW SQL SECURITY NONE、IMPERSONATE。升级后需检查 access_control_improvements 的 select_from_system_db_requires_grant、select_from_information_schema_requires_grant、on_cluster_queries_require_cluster_grant,这些开启后原可用用户需显式授予 system.、INFORMATION_SCHEMA. 或 CLUSTER,属行为变化而非权限丢失。
最小授权示例:GRANT SELECT ON system.processes TO role_analytics; GRANT role_analytics TO user_x;
报告格式:头部写连接模式、集群或单节点、ClickHouse 版本、时间窗口;发现项表格含 check、severity、object、evidence、recommendation,Critical 优先,evidence 引用结果数字;一行列出无问题的 OK 检查 id;不可省略跳过与失败检查的 id 及原因或首个错误行;最后给后续技能与即时操作。后续方向:问“谁权限过大”加载 altinity-expert-clickhouse-security;版本相关权限变更需审计侧确认同上;system.query_log 缺失或截断加载 altinity-expert-clickhouse-logs;ON CLUSTER 语句失败或挂起加载 altinity-expert-clickhouse-replication。