您的当前位置:首页正文

某市驾驶培训监管服务平台 GreatSQL 数据库适配之旅

2024-10-17 来源:个人技术集锦

某市驾驶培训监管服务平台 GreatSQL 数据库适配之旅

一、项目背景

某市驾培系统主要为社会公众提供驾培单位查询和学车报名,为相关合作单位提供某市驾培监管、某市驾培考核等功能。业务信息教练车培训过程视频信息、包括培训机构基本信息、教练员基本信息和学员个人等信息,其服务范围为社会公众。 信息系统定级为第三级。

某市驾培系统部署在某市政务云平台互联网区域和政务外网区域,采用 B/S 结构,使用 JAVA 语言开发。使用 JAVA 语言开发。租用了十多台台虚拟化服务器,其中应用类虚拟化服务器十多台,数据库虚拟化服务器两台,十多台虚拟化服务器的操作系统均为 CentOS v7.4,应用中间使用 Tomcat 9.0 数据库使用 MySQL v5.7.29。

某市驾驶培训监管服务平台系统拓扑

二、渗透测试、系统漏洞、专家建议(等保测评后)

根据渗透测试及漏洞扫描结果,某市驾培系统平台某市云机房所使用的十多台服务器中共发现紧急漏洞三个,高风险漏洞十三个,发现安全问题四十多个,中风险问题二十多个等,其服务器漏洞已与开发单位沟通确认并制定整改计划,将持续进行整改。

序号 名称(地址) 漏洞类型 漏洞数量 危险级别 整改情况
1 https:// . .cn/ 订单金额可被篡改 1 已整改
跨站脚本漏洞 2 已整改
不安全的SSL协议 1 已整改
点击劫持:X-Frame-Options头缺失 1 已整改
2 . . .40:6002/ 文件上传接口越权 1 已整改
跨站脚本漏洞 2 已整改
不安全的SSL协议 1 已整改
JQuery版本过低 1 已整改
Cookie未设置HttpOnly 1 已整改
序号 端口号 漏洞名称 风险 IP 整改情况
1 5353 udp mDNS服务检测 中风险 192.166. . 整改中
2 3306 MySQL 5.7.x < 5.7.30存在多个漏洞(2020年04月CPU) 中风险 192.166. . 整改中
3 3306 MySQL 5.7.x < 5.7.31存在多个漏洞(2020年7月CPU) 中风险 192.166. . 整改中
4 3306 MySQL 5.7.x < 5.7.32存在多个安全漏洞(2020年10月CPU) 中风险 192.166. . 整改中
5 5353 udp mDNS服务检测 中风险 192.166. . 整改中
6 8080 ServletExec 4.1 ISAPI 物理路径暴露 中风险 192.166. . 整改中
7 5672 AMQP明文验证 中风险 192.166. . 整改中
8 80 Web 服务器 HTTP 头文件信息披露 中风险 192.166. . 整改中
9 8080 Web 服务器 HTTP 头文件信息披露 中风险 192.166. . 整改中
10 5353 udp mDNS服务检测 中风险 192.166. . 整改中
11 5353 udp mDNS服务检测 中风险 192.166. . 整改中
12 5353 udp mDNS服务检测 中风险 192.166. . 整改中
13 443 Web 服务器 HTTP 头文件信息披露 中风险 192.166. . 整改中
14 6003 Web 服务器 HTTP 头文件信息披露 中风险 192.166. . 整改中
15 80 Web 服务器 HTTP 头文件信息披露 中风险 192.166. . 整改中
16 8080 Web 服务器 HTTP 头文件信息披露 中风险 192.166. . 整改中
17 8081 Web 服务器 HTTP 头文件信息披露 中风险 192.166. . 整改中
18 5353 udp mDNS服务检测 中风险 192.166. . 整改中
19 22 OpenSSH < 7.5 漏洞 中风险 192.166. . 整改中
20 22 OpenSSH < 7.6 文件创建限制绕过漏洞 中风险 192.166. . 整改中
21 22 OpenSSH 用户枚举漏洞(CVE-2018-15919) 中风险 192.166. . 整改中
22 22 OpenSSH < 7.5 漏洞 中风险 192.166. . 整改中
23 22 OpenSSH < 7.6 文件创建限制绕过漏洞 中风险 192.166. . 整改中
24 22 OpenSSH 用户枚举漏洞(CVE-2018-15919) 中风险 192.166. . 整改中
25 5353 udp mDNS服务检测 中风险 192.166. . 整改中
26 22 OpenSSH < 7.5 漏洞 中风险 192.166. . 整改中
27 22 OpenSSH < 7.6 文件创建限制绕过漏洞 中风险 192.166. . 整改中
28 22 OpenSSH 用户枚举漏洞(CVE-2018-15919) 中风险 192.166. . 整改中
29 5353 udp mDNS服务检测 中风险 192.166. . 整改中
30 99 Web 服务器 HTTP 头文件信息披露 中风险 192.166. . 整改中
31 Nginx range 过滤器整形溢出漏洞(CVE-2017-7529) 中风险 192.166. . 整改中
32 99 nginx < 1.13.2 整形溢出漏洞 中风险 192.166. . 整改中
33 3306 MySQL 5.7.x < 5.7.30存在多个漏洞(2020年04月CPU) 中风险 192.166. . 整改中
34 3306 MySQL 5.7.x < 5.7.31存在多个漏洞(2020年7月CPU) 中风险 192.166. . 整改中
35 3306 MySQL 5.7.x < 5.7.32存在多个安全漏洞(2020年10月CPU) 中风险 192.166. . 整改中
序号 问题类别 问题描述 风险级别 整改措施 整改情况
1 安全区域边界 未限制无线网络的使用 中风险 建议严格限制无线网络的使用 因政务云服务商环境所限,暂不具备整改条件。需向云服务商咨询确认。
2 安全计算环境 某市驾驶培训监管服务平台前台、服务器操作系统和数据库未采用两种或两种以上组合的鉴别技术。 中风险 建议采用两种或两种以上组合的鉴别技术实现用户身份鉴别,如数字证书、令牌等 将通过该系统升级改造等方式实施整改。需向云服务商询问情况
3 安全计算环境 未采用密码技术保证重要业务数据、重要审计数据、主要配置数据和部分个人信息在存储过程中的保密性 中风险 建议对系统管理数据、鉴别信息及重要业务数据采用经国家密码主管部门认可的密码技术,保证其在存储过程中数据的私密性 将通过申请该系统密评改造等方式进行整改。
4 安全计算环境 未对服务器操作系统配置文件进行异地备份,未提供业务数据异地实时备份功能 中风险 建议利用通信网络将关键数据实时传送至备用场地,实现异地数据异地备份 建议承建单位按照整改措施进行整改。建议每周为周期整体备份系统数据,异地保存。建议政务云服务商提供虚拟主机备份的形式。
5 安全计算环境 某市驾驶培训监管服务平台管理后台、服务器操作系统和数据库未授予不同账户为完成各自承担任务所需的最小权限 中风险 建议系统授予不同用户为完成各自承担的任务所需的最小权限,将系统管理员和业务操作员权限分离,并设置独立的安全审计员角色,对各类用户的操作行为进行审计监督 建议系统开发单位于12月底前完成整改。

三、项目目标

将某市驾培系统目前的版本 MySQL v5.7.29 数据库升级到 GreatSQL v8.0.32(数据库名为TYU&……*IO), 某市驾培系统目前的数据量1T,备份完的数据量 20G(进行压缩且无备份TY_tra库及日志表),备份时间 202408192200

3.1 数据库基本信息

基本信息
版本 源端 目标端
数据库 MySQL v5.7.29 GreatSQL v8.0.32
OS CentOS v7.4 CentOS v7.4
数据量 1T 1T
存储 本地文件系统 本地文件系统

3.2 某市驾培系统源库相关情况

a) 源库库表库名TY_ApolloConfigDBTY_ApolloPortalDB    TY_LonganTY_MysqlTY_yg_assTY_yg_insTY_yg_siteTY_yg_ssjTY_yg_sysTY_yg_traTY_yg_tra_testb)源库库索引:见表格c)源库库同义词:无d)源库库序列:无e)源库库触发器:无f)源库库存储过程:见表格g)源库库视图:无h)源库库function:无i)源库库package:无j)源库库package body:无k)其他

3.3 数据量情况

数据量为订单 900左右/天 ,培训数 8w左右/天 ,车载数电子日志 8k左右/天 ,分钟学时数 200w左右/天 ,培训照片 20w左右/天

3.4 迁移停机时间

24小时内完成迁移停机。

四、项目目标上线数据迁移的步骤

五、项目服务运行拓扑

服务软件安装包

-rw-r--r-- 1 root root 121M Feb 4 03:02 greatsql-8.0.32-25.1.el7.x86_64.rpm-bundle.tar.xz  -rw-r--r-- 1 root root 19M Feb 2 15:51 greatsql-client-8.0.32-25.1.el7.x86_64.rpm-rw-r--r-- 1 root root 1.9M Feb 2 15:51 greatsql-devel-8.0.32-25.1.el7.x86_64.rpm-rw-r--r-- 1 root root 2.1M Feb 2 15:51 greatsql-icu-data-files-8.0.32-25.1.el7.x86_64.rpm-rw-r--r-- 1 root root 5.0M Feb 2 15:51 greatsql-mysql-router-8.0.32-25.1.el7.x86_64.rpm-rw-r--r-- 1 root root 93M Feb 2 15:51 greatsql-server-8.0.32-25.1.el7.x86_64.rpm-rw-r--r-- 1 root root 1.5M Feb 2 15:51 greatsql-shared-8.0.32-25.1.el7.x86_64.rpm-rw-r--r-- 1 root root 1.5M Feb 2 15:51 greatsql-shell-8.0.32-16-Linux-glibc2.17-x86_64.tar.xz

某市驾培系统数据库运行拓扑

六、某市驾培系统数据库环境搭建

7.1、安装目标端操作系统并且优化

A、解决ssl的问题

安装 SSL 的相关包

openssh-9.8p1-1.el7.x86_64.rpmopenssh-clients-9.8p1-1.el7.x86_64.rpmopenssh-debuginfo-9.8p1-1.el7.x86_64.rpmopenssh-server-9.8p1-1.el7.x86_64.rpmopenssl-1.1.1h.tar,zlib-1.2.11

B、优化系统参数配置文件sysctl.conf、limits.conf、selinux

sysctl.conf:

fs.aio-max-nr = 3145728fs.file-max = 6815744kernel.shmmni = 4096kernel.shmmax = 68719476736#kernel.shmall = 8388608kernel.shmall = 16777216kernel.sem = 250 32000 100 128kernel.panic_on_oops = 1kernel.numa_balancing= 0kernel.pid_max = 131072net.ipv4.ip_local_port_range = 9000 65500net.core.rmem_default = 262144   net.core.rmem_max = 4194304net.core.wmem_default = 262144net.core.wmem_max = 1048576vm.min_free_kbytes= 4048576vm.hugetlb_shm_group =1000vm.nr_hugepages =21845net.ipv4.ipfrag_low_thresh=15728640net.ipv4.ipfrag_high_thresh=16777216kernel.msgmnb = 65536kernel.msgmax = 65536kernel.msgmni = 2878net.ipv4.ip_forward = 0net.ipv4.conf.default.rp_filter = 0net.ipv4.conf.default.accept_source_route =0net.ipv4.tcp_syncookies = 1kernel.core_uses_pid = 1  

limits.conf:

mysql soft  nproc  65536mysql hard  nproc  65536mysql soft  nofile 65536mysql hard  nofile 65536  

selinux:

SELINUX=disabled

C、系统加固

加强账号及口令安全策略

编号 Linux-02001
名称 加强账号及口令安全策略
系统当前状态 系统当前的账号及口令没有配置安全策略
实施方案 建议按照如下方式进行账号及口令安全策略的配置,修改/etc/login.defs文件,将相应的字段修改为以下内容:PASS_MAX_DAYS 90 //口令最长存留期PASS_MIN_DAYS 30 //口令最短存留期PASS_MIN_LEN 8 //口令最少字符数PASS_WARN_AGE 15 //口令到期提醒时间 (以上仅对实施完这条策略后,新增加的用户有效)
实施目的 增加Linux系统登陆账号的安全性
实施风险
回滚方案 加固前创建备份目录,按照日期命名:mkdir /root/backup2021 将需要修改的配置文件复制保存在备份目录:cp /etc/login.defs /root/backup2021/需要回退的时候将修改前的备份文件覆盖回配置文件即可:cp/root/backup2021/login.defs /etc/security/login.defs
是否实施 (客户填写)

登陆失败锁定

编号 Linux-02002
名称 登陆失败锁定
系统当前状态 登录失败无处理手段
实施方案 建议按照如下方式进行账号及口令安全策略的配置,修改/etc/pam.d/system-auth文件,将相应的字段修改为以下内容:auth required pam_tally.so deny=5 unlock_time=20 (以上仅对实施完这条策略后,新增加的用户有效)
实施目的 增加Linux系统登陆账号的安全性
实施风险
回滚方案 加固前创建备份目录,按照日期命名:(不用重复创建) mkdir /root/backup2021将需要修改的配置文件复制保存在备份目录:cp /etc/pam.d/system-auth /root/backup2021/需要回退的时候将修改前的备份文件覆盖回配置文件即可:cp /root/backup2021/system-auth /etc/pam.d/system-auth
是否实施 (客户填写)

7.2、搭建目标端 GreatSQL 环境,安装最新补丁

A、调整数据库参数

1)配置hugepage# /etc/sysctl.conf中添加如下一行vm.nr_hugepages=46082# 对/etc/security/limits.conf文件进行修改mysql soft memlock unlimitedmysql hard memlock unlimited

B、数据库实例配置文件 my.cnf 如下例所示

[client]no-beepsocket =/usr/local/mysql/data/mysql.sock# pipe# socket=0.0port=3306[mysql]default-character-set=utf8[mysqld]basedir=/usr/local/mysqldatadir=/usr/local/mysql/dataport=3306pid-file=/usr/local/mysql/data/mysqld.pid#skip-grant-tables#skip-name-resolvesocket = /usr/local/mysql/data/mysql.sockcharacter-set-server=utf8default-storage-engine=INNODBslow_query_log = 1slow_query_log_file = /usr/local/mysql/log/slow_query.loggeneral_log = 0general_log_file = /usr/local/mysql/log/general_query.logexpire-logs-days = 14validate_password_dictionary_file='/usr/local/mysql/lib/plugin'validate_password_check_user_name=onplugin-load-add=validate_password.sovalidate-password=FORCE_PLUS_PERMANENT#default_password_lifetime=0skip-external-locking = 1skip-name-resolve = 1explicit_defaults_for_timestamp = true# Server Id.server-id=22611log_timestamps=systemlog_bin =/usr/local/mysql/log/mysql-binlog_bin_index=/usr/local/mysql/log/mysql-bin.indexbinlog_format = rowrelay_log_recovery=ONrelay_log=/usr/local/mysql/log/mysql-relay-binrelay_log_index=/usr/local/mysql/log/mysql-relay-bin.indexlog-error = /usr/local/mysql/data/mysqld.log#### replication ####replicate_wild_ignore_table = information_schema.%,performance_schema.%,sys.%#### semi sync replication settings #####plugin_dir=/usr/local/mysql/lib/pluginplugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"loose_rpl_semi_sync_master_enabled = 1loose_rpl_semi_sync_slave_enabled = 1loose_rpl_semi_sync_master_timeout = 5000#binlog-do-db=cfdi,cloudcp#binlog-ignore-db=mysqlmax_connections=2000query_cache_size=0max_heap_table_size = 64Mnet_buffer_length = 8Ktable_open_cache=2000tmp_table_size=246Mthread_cache_size=300 #限定用于每个数据库线程的栈大小。默认设置足以满足大多数应用thread_stack = 192kkey_buffer_size=512Mread_buffer_size=4Mread_rnd_buffer_size=32Mbinlog_cache_size = 16mmax_binlog_cache_size = 128mmax_binlog_size = 128minnodb_data_home_dir = /usr/local/mysql/data/#innodb_data_file_path = libdata1:1024M:autoextendinnodb_flush_log_at_trx_commit=0innodb_log_buffer_size=16Minnodb_buffer_pool_size=256Minnodb_log_file_size=128Minnodb_log_files_in_group =6#innodb_log_group_home_dir = /usr/local/mysql/log/redo-loginnodb_thread_concurrency=128innodb_autoextend_increment=1000innodb_buffer_pool_instances=8innodb_concurrency_tickets=5000innodb_old_blocks_time=1000innodb_open_files=300innodb_stats_on_metadata=0innodb_file_per_table=1innodb_checksum_algorithm=0back_log=80flush_time=0join_buffer_size=128Mmax_allowed_packet=1024Mmax_connect_errors=2000open_files_limit=4161query_cache_type=0sort_buffer_size=32Mtable_definition_cache=1400binlog_row_event_max_size=8Ksync_master_info=10000sync_relay_log=10000sync_relay_log_info=10000sync_binlog = 1#innodb_flush_logs_at_trx_commit=2innodb_support_xa=ture#innodb_safe_binlog=1#批量插入数据缓存大小,可以有效提高插入效率,默认为8Mbulk_insert_buffer_size = 64Minteractive_timeout = 120wait_timeout = 120log-bin-trust-function-creators=1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

C、数据库修改 server-id参数 每台服务器的参数ID不能相同

server-id=22611server-id=22617server-id=22618

重启数据库数据库实例,使如上配置生效

D、安装密码插件,密码重用限制,密码验证,双密码验证

greatsql> SELECT * FROM mysql.plugin;#在线添加greatsql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';greatsql> SET GLOBAL validate_password_dictionary_file = "/usr/local/mysql/lib/plugin/";greatsql> SET GLOBAL  validate_password_check_user_name= ON;greatsql> SHOW GLOBAL VARIABLES LIKE '%validate_password%';greatsql> SHOW STATUS LIKE 'validate_password%';greatsql> SET GLOBAL validate_password_policy=0;greatsql> SELECT plugin_name,plugin_status,plugin_type,load_option,plugin_library FROM information_schema.plugins;

7.3、搭建目标端greatsql-mysql-router-8.0.32-25环境,安装最新补丁

A 、Profile文件

在 PATH= 添加 mysqlrouter 所在路径

/usr/local/greatsql-mysql-router-8.0.32/bin/,如:PATH=$PATH:$JAVA_BIN:$ES_HOME:/usr/local/greatsql-mysql-router-8.0.32/bin/

验证是否安装成功:

$ mysqlrouter --help

B、服务配置

$ mkdir /usr/local/greatsql-mysql-router-8.0.32/log$ mkdir /usr/local/greatsql-mysql-router-8.0.32/data$ chown mysql:mysql /etc/mysqlrouter.conf$ chown -R mysql:mysql /usr/local/greatsql-mysql-router-8.0.32 

C、创建配置文件

#可参考/usr/local/ greatsql-mysql-router-8.0.32/share/doc/mysqlrouter/sample_mysqlrouter.conf$ cat mysqlrouter.conf[DEFAULT]logging_folder = /usr/local greatsql-mysql-router-8.0.32/logplugin_folder = /usr/local/greatsql-mysql-router-8.0.32/lib/mysqlrouterdata_folder=/usr/local/greatsql-mysql-router-8.0.32/data[logger]level = INFO[routing:primary]bind_address = 0.0.0.0bind_port = 7001destinations = 192.166.*.*:3306, 192.166.*.*:3306routing_strategy = first-available[routing:secondary]bind_address = 0.0.0.0bind_port = 7002destinations = 192.166.*.*:3306routing_strategy = round-robin

七、迁移测试

7.1 生产库数据导出

1)查看数据库表

$ mysql -uroot -pgreatsql> USE TYU&……*IOgreatsql> SELECT * FROM test1;    

2)生产库数据导出

$ /usr/local/mysql/bin/mysqldump -uroot -h192.166.*.*-P3306 -plezhiyun@lzx -d TYU&……*IO> TYU&……*IO20240819.sql-- 导出数据库为dbname某张表(test)结构$ /usr/local/mysql/bin/mysqldump -uroot -plezhiyun@lzx -d TYU&……*IO > TYU&……*IO.sql   

7.2 数据导入

A、创建用户

$ mysql -uroot -h192.166.*.* -P3306 -plezhiyun@lzx -Agreatsql> DROP DATABASE TYU&……*IO;greatsql> CREATE DATABASE IF NOT EXISTS TYU&……*IO DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

B、导入数据

数据库导入:

greatsql> connect TYU&……*IOgreatsql> SOURCE /home/TYU&……*IO.sql

八、项目目标上线数据迁移的项目计划

序号 阶段 工作项 预计起始时间 执行方 执行人 备注
1 环境搭建 操作系统的申请安装
测试环境集群数据库安装
2 迁移测试 数据导入测试数据库
压力测试
功能测试
3 正式割接 正式割接实施
4 割接后 数据库保障

九、回退方案

割接窗口内迁移失败,则方案进入回退。操作步骤如下;

  1. 迁移停止;

  2. 修改原生产库的IP地址;

  3. 将原生产库的监听打开;

  4. 应用程序重新连接至原库;

十、满足渗透测试、系统漏洞、专家建议

安全计算环境 未采用密码技术保证重要业务数据、重要审计数据、主要配置数据和部分个人信息在存储过程中的保密性 中风险 建议对系统管理数据、鉴别信息及重要业务数据采用经国家密码主管部门认可的密码技术,保证其在存储过程中数据的私密性 将通过申请该系统密评改造等方式进行整改。
安全计算环境 未对服务器操作系统配置文件进行异地备份,未提供业务数据异地实时备份功能 中风险 建议利用通信网络将关键数据实时传送至备用场地,实现异地数据异地备份 建议承建单位按照整改措施进行整改。建议每周为周期整体备份系统数据,异地保存。建议政务云服务商提供虚拟主机备份的形式。
安全计算环境 某市驾驶培训监管服务平台管理后台、服务器操作系统和数据库未授予不同账户为完成各自承担任务所需的最小权限 中风险 建议系统授予不同用户为完成各自承担的任务所需的最小权限,将系统管理员和业务操作员权限分离,并设置独立的安全审计员角色,对各类用户的操作行为进行审计监督 建议系统开发单位于12月底前完成整改。
安全计算环境 数据库设置登录连接超时自动退出时间为8小时,时间过长 中风险 建议数据库设置合理的登录连接超时自动退出时间 建议系统开发单位于12月底前完成整改。
安全计算环境 服务器操作系统和数据库未重命名或删除系统默认账户 中风险 建议服务器操作系统和数据库重命名或删除系统默认账户 建议系统开发单位于12月底前完成整改。不要使用Root账户远程登录
安全计算环境 服务器操作系统和数据库存在共享账户的情况 中风险 建议根据实际需求,为不同的用户分配不同权限的账号,避免共用同一个账号对系统进行操作 建议系统开发单位于12月底前完成整改。
安全计算环境 未对重要主体和客体设置安全标记 低风险 建议对重要主体和客体设置安全标记,并控制用户对已标记的敏感信息的操作 建议后期逐步完成敏感信息的分类分级后逐步完成整改。
安全计算环境 未基于可信根对计算设备的系统引导程序、系统程序、重要配置参数和应用程序等进行可信验证 低风险 建议基于可信根对计算设备的系统引导程序、系统程序、重要配置参数和应用程序等进行可信验证,并在应用程序的关键执行环节进行动态可信验证,在检测到其可信性受到破坏后进行报警,并将验证结果形成审计记录送至安全管理中心 暂不具备整改条件,测评中心建议可接受此风险。
安全管理中心 未对安全策略配置、恶意代码防范措施升级、补丁升级等安全相关事项进行集中管理 中风险 建议对安全策略配置、恶意代码防范措施升级、补丁升级等安全相关事项进行集中管理 将根据云服务商的安全策略进行整改。询问政务云服务商具体措施。
安全管理机构 未定期审查审批事项,及时更新需授权和审批的项目、审批部门和审批人等信息 低风险 建议定期审查审批事项,及时更新需授权和审批的项目、审批部门和审批人等信息 将于2023年开展测评工作前进行整改。

Enjoy GreatSQL ?

关于 GreatSQL

GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。

相关链接:

GreatSQL社区:

社区博客有奖征稿详情:

技术交流群:

微信:扫码添加 GreatSQL社区助手 微信好友,发送验证信息 加群

显示全文