61 lines
2.2 KiB
Markdown
61 lines
2.2 KiB
Markdown
# 管理员密码哈希问题修复报告
|
||
|
||
## 问题描述
|
||
系统在启动时,初始化的管理员密码哈希值不正确,导致无法登录系统。
|
||
|
||
## 问题原因
|
||
1. **数据库初始化脚本问题**: `init_mysql.sql` 文件中第247行硬编码了错误的密码哈希值:
|
||
- 错误的哈希: `pbkdf2:sha256:260000$7Q8M9V2N4P6R8S0T$8A9B0C1D2E3F4A5B6C7D8E9F0A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6`
|
||
- 问题: salt和hash部分不是有效的编码格式
|
||
|
||
2. **正确的哈希格式**:
|
||
- 格式: `pbkdf2:sha256:iterations$salt_hex$hash_hex`
|
||
- 正确的哈希: `pbkdf2:sha256:600000$03EhhcMpfObidblD$e0f7de0e1028c8ab004c48ec28a3380950568080abd214055f67d02300e2786d`
|
||
|
||
## 修复方案
|
||
|
||
### 1. 重置数据库中的密码哈希
|
||
```python
|
||
from app import create_app, db
|
||
from app.models.admin import Admin
|
||
from werkzeug.security import generate_password_hash
|
||
|
||
app = create_app()
|
||
with app.app_context():
|
||
admin = Admin.query.filter_by(username='admin').first()
|
||
admin.password_hash = generate_password_hash('admin123', method='pbkdf2:sha256')
|
||
db.session.commit()
|
||
```
|
||
|
||
### 2. 修复初始化脚本
|
||
已更新 `init_mysql.sql` 文件,将错误的哈希值替换为正确的哈希值。
|
||
|
||
## 验证结果
|
||
|
||
### 测试用例
|
||
1. ✅ 使用正确密码 'admin123' 登录 - **成功**
|
||
2. ✅ 使用错误密码 'wrongpassword' 登录 - **被正确拒绝**
|
||
3. ✅ 使用空密码登录 - **被正确拒绝**
|
||
|
||
### 登录信息
|
||
- **用户名**: admin
|
||
- **密码**: admin123
|
||
- **状态**: ✅ 可以正常登录
|
||
|
||
## 后续建议
|
||
|
||
1. **修改默认密码**: 首次登录后请立即修改默认密码
|
||
2. **使用强密码**: 建议使用包含大小写字母、数字和特殊字符的强密码
|
||
3. **定期更换密码**: 建议每3-6个月更换一次密码
|
||
4. **启用双因素认证**: 如可能,启用2FA增强安全性
|
||
|
||
## 相关文件
|
||
|
||
- `app/models/admin.py` - 管理员模型,包含密码验证逻辑
|
||
- `init_mysql.sql` - 数据库初始化脚本
|
||
- `reset_admin_password.py` - 密码重置脚本(已创建)
|
||
- `test_login_fixed.py` - 登录功能测试脚本(已创建)
|
||
|
||
## 总结
|
||
问题已完全修复。管理员可以使用用户名 `admin` 和密码 `admin123` 正常登录系统。
|