为什么需要做权限最小化
织梦 CMS 默认安装时,很多站长为了省事直接把数据库账号设置为 root 或具备全部权限的超级账号,一旦程序存在 SQL 注入、上传漏洞或后台被爆破,攻击者即可获得 FILE、PROCESS、SUPER 等高危权限,进而读写服务器文件、提权控制整台主机。权限最小分配是织梦安全加固的核心环节,目标是让程序账号“够用就好”,即便被攻破也无法越权操作。
权限分析:织梦到底需要哪些权限
正常运行必需权限
SELECT:前台读取栏目、文档、自定义字段。INSERT:会员注册、留言、评论写入。UPDATE:点击数更新、会员资料修改。DELETE:会员删除自己内容、后台清理回收站。
高危但可关闭的权限
FILE:允许LOAD DATA INFILE、SELECT ... INTO OUTFILE读写文件,强烈建议回收。SUPER:可修改全局变量、KILL 其他连接,普通站点用不到。PROCESS:可查看所有线程执行的 SQL,存在信息泄露风险。CREATE、DROP、ALTER:仅在后台升级或安装插件时临时开启,平时应关闭。
操作步骤:创建最小权限账号
1. 登录 MySQL 创建专用账号
建议每个织梦站点使用独立账号,限制来源 IP 为 Web 服务器内网地址,禁止外网连接。
-- 以管理员身份登录 MySQL
mysql -uroot -p
-- 创建仅允许来自 10.0.0.8(Web服务器)连接的账号
CREATE USER 'dede_user'@'10.0.0.8' IDENTIFIED BY 'Str0ng!Pwd_2024';
-- 仅授予织梦库的数据级权限,不要授予 ALL
GRANT SELECT, INSERT, UPDATE, DELETE ON dedecms.* TO 'dede_user'@'10.0.0.8';
-- 显式回收文件与超级权限(默认不给,但双保险)
REVOKE FILE ON *.* FROM 'dede_user'@'10.0.0.8';
REVOKE SUPER ON *.* FROM 'dede_user'@'10.0.0.8';
FLUSH PRIVILEGES;
2. 修改织梦配置文件切换账号
编辑 data/common.inc.php,将原来的高权限账号替换为最小权限账号:
<?php
//数据库连接信息
$cfg_dbtype='mysql';
$cfg_dbhost='10.0.0.6';
$cfg_dbname='dedecms';
$cfg_dbuser='dede_user'; // 改为最小权限账号
$cfg_dbpwd='Str0ng!Pwd_2024';
$cfg_dbprefix='dede_';
$cfg_db_language='utf8';
?>
修改后立即访问前台与后台各功能页验证,重点测试点击数更新、会员登录、留言提交、后台生成静态页。
3. 升级场景临时提权
系统升级、安装模块、修复数据表时需要 DDL 权限,建议用临时账号而非修改原账号:
CREATE USER 'dede_admin_tmp'@'10.0.0.8' IDENTIFIED BY 'Tmp!Pwd#2024';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX
ON dedecms.* TO 'dede_admin_tmp'@'10.0.0.8';
-- 升级完成后立即删除
DROP USER 'dede_admin_tmp'@'10.0.0.8';
权限分配参照表
| 场景 | 推荐权限 | 说明 |
|---|---|---|
| 前台展示 | SELECT | 纯展示站点可进一步收紧 |
| 会员互动 | SELECT, INSERT, UPDATE, DELETE | 常规推荐配置 |
| 后台日常 | 同上,关闭 DDL | 生成静态、发布文章足够 |
| 模块安装/升级 | 临时 CREATE, DROP, ALTER | 用完即删 |
| 备份恢复 | 使用 root 临时操作 | 脚本执行完即断开 |
注意事项
- 账号密码长度不少于 16 位,混合大小写字母、数字、符号,避免被撞库。
- 限定来源 IP,杜绝公网直连数据库端口;服务器只对内网开放 3306。
- 定期用
SHOW GRANTS FOR 'dede_user'@'10.0.0.8';复核权限是否漂移。 - 不要把数据库账号写入前端可访问的 JS、模板注释或日志中。
- 开启 MySQL 审计或 general_log 短期排查,长期开启会影响性能。
建议与行动指引
权限最小化不是一次性配置,而是要纳入站点运维基线。建议把当前账号权限截图存档,每月对照一次;新装插件前先用临时 DDL 账号操作,完成后再切回数据级账号;同时配合 WAF、目录禁写、文件监控等多层防御,让织梦站点在“够用即可”的权限模型下持续稳定运行。