# 统一身份认证用户数据同步 将校园管理系统用户/组织数据定时同步到认证中间库,供第三方统一身份认证平台拉取。 ## 目录结构 ``` 用户信息同步统一身份认证/ ├── 3.在认证中间库建立表.sql # 第三方原始 Oracle 建表脚本(勿修改) ├── 建表脚本_mysql.sql # MySQL 适配建表脚本(本地测试用) ├── data.conf # 研发环境配置 ├── data.conf.prod # 生产环境配置(Oracle 目标库) ├── create_tables.sh # 创建中间表 ├── sync_user_to_sso.sh # 主同步脚本 ├── verify_sync.sh # 同步结果校验(支持 MySQL / Oracle) ├── db_helper.py # MySQL 辅助 ├── oracle_gen_merge.py # 从 MySQL 生成 Oracle MERGE SQL(生产) ├── sync_sql/sync_all_mysql.sql # MySQL 同步 SQL ├── sync_oracle/merge_all.sql # Oracle 说明(实际由 gen 脚本生成) ├── 字段映射说明.md └── logs/ # 运行日志(自动创建) ``` ## 快速开始(研发环境) ```bash cd 用户信息同步统一身份认证 # 1. 创建中间表(仅新增6张表,不修改已有表) chmod +x *.sh ./create_tables.sh # 2. 执行一次全量同步 ./sync_user_to_sso.sh --full --once # 3. 校验同步结果 ./verify_sync.sh ``` ## 定时运行(推荐:守护进程 + 时间窗,无需 crontab) 生产配置 `SYNC_WINDOW_ENABLED=true` 时:脚本每小时醒来一次,**仅在 0 点~1 点之间**真正执行同步,其余时段跳过。手动 `--once` / `--full --once` 不受时间窗限制。 ```bash # 后台常驻(服务器重启后需重新拉起,或配合 systemd) source /etc/profile.d/oracle.sh cd /path/to/用户信息同步统一身份认证 nohup ./sync_user_to_sso.sh >> logs/daemon.log 2>&1 & # 查看 ps -ef | grep sync_user_to_sso | grep -v grep tail -f logs/daemon.log ``` 相关配置(`data.conf` / `data.conf.prod`): | 配置项 | 说明 | |--------|------| | `CYCLE_INTERVAL` | 醒来间隔秒数,默认 3600 | | `SYNC_WINDOW_ENABLED` | `true` 开启时间窗 | | `SYNC_WINDOW_START_HOUR` | 开始小时(含),默认 0 | | `SYNC_WINDOW_END_HOUR` | 结束小时(不含),默认 1,即 00:00~00:59 | 也可改用 crontab(可选): ```bash 10 0 * * * source /etc/profile.d/oracle.sh; /path/to/sync_user_to_sso.sh --once >> /path/to/logs/cron.log 2>&1 ``` ## 生产部署 1. 复制 `data.conf.prod` 为 `data.conf` 或指定 `--config=data.conf.prod` 2. 填写源库(校园系统 MySQL)和目标库(认证中间库 Oracle)连接信息 3. 目标库使用第三方提供的 `3.在认证中间库建立表.sql` 在 Oracle 中建表 4. 确保服务器已安装 Instant Client(`basic` + `sqlplus`),并配置: ```bash export ORACLE_HOME=/usr/lib/oracle/23/client64 export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH ``` 5. 依赖:`python3` + `pymysql`(`pip3 install pymysql`) 6. 全量同步一次并校验: ```bash source /etc/profile.d/oracle.sh ./sync_user_to_sso.sh --full --once ./verify_sync.sh ``` 7. 后台常驻(时间窗内每天自动同步一次): ```bash source /etc/profile.d/oracle.sh nohup ./sync_user_to_sso.sh >> logs/daemon.log 2>&1 & ``` ## 配置说明 | 配置项 | 说明 | |--------|------| | SOURCE_DB_* | 源库(校园管理系统,只读) | | TARGET_DB_* | 目标库(认证中间库,读写) | | TARGET_DB_TYPE | `mysql`(测试)或 `oracle`(生产) | | SYNC_MODE | `full` 全量 / `incremental` 增量 | | CYCLE_INTERVAL | 守护进程醒来间隔秒数,默认 3600 | | SYNC_WINDOW_ENABLED | 是否仅在指定小时段同步(守护模式) | | SYNC_WINDOW_START_HOUR / END_HOUR | 时间窗,默认 0~1(每天 0 点档) |