yashandb教程FG168-YashanDB三权分立配置
本文档风哥主要介绍YashanDB三权分立的相关知识,包括YashanDB三权分立的概念、优势、组成、规划策略、配置方法、角色管理、监控审计等内容,风哥教程参考YashanDB官方文档安全管理相关内容编写,适合DBA人员在学习和生产环境中使用。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 YashanDB三权分立概念
YashanDB三权分立是一种安全管理机制,通过将数据库管理权限分为系统管理、操作管理和审计管理三个独立的权力体系,实现权力的相互制约和平衡,提高数据库系统的安全性。三权分立的核心思想是将不同的管理职责分开,避免单一用户拥有过多的权限,从而减少安全风险。
- 权力分离:将系统管理、操作管理和审计管理三种权力分开
- 相互制约:三种权力之间相互监督和制约
- 权限最小化:每个角色只拥有完成职责所需的最小权限
- 审计跟踪:所有操作都有详细的审计记录
- 安全增强:提高系统的安全性和可靠性
1.2 YashanDB三权分立优势
YashanDB三权分立的主要优势包括:
- 安全增强:通过权力分离,减少单点故障和权限滥用的风险
- 合规性:满足各种合规要求,如等保、PCI DSS等
- 责任明确:各角色责任明确,便于追溯和管理
- 风险控制:降低内部威胁和误操作的风险
- 审计完整:所有操作都有详细的审计记录
1.3 YashanDB三权分立组成
YashanDB三权分立主要由以下三个部分组成:
- 系统管理:负责数据库系统的安装、配置、维护和升级等管理工作
- 操作管理:负责数据库的日常操作,如数据维护、备份恢复等
- 审计管理:负责对数据库操作进行审计和监控,确保合规性
Part02-生产环境规划与建议
2.1 YashanDB三权分立规划
YashanDB三权分立规划要点:
– 系统管理员:负责系统级配置和管理
– 安全管理员:负责用户和权限管理
– 审计管理员:负责审计和监控
– 普通用户:负责日常业务操作
# 权限规划
– 系统管理员:系统级配置权限
– 安全管理员:用户和权限管理权限
– 审计管理员:审计和监控权限
– 普通用户:业务操作权限
# 职责分离
– 系统管理:系统安装、配置、维护、升级
– 安全管理:用户创建、权限分配、密码管理
– 审计管理:审计配置、日志分析、合规检查
– 业务操作:数据查询、修改、备份恢复
# 流程规划
– 权限申请流程:用户权限申请、审批、分配
– 操作审批流程:重要操作的审批和执行
– 审计流程:审计日志收集、分析、报告
– 应急响应流程:安全事件的处理和响应
2.2 YashanDB三权分立策略
YashanDB三权分立策略建议:
– 系统管理员:不参与日常业务操作
– 安全管理员:不参与系统配置和业务操作
– 审计管理员:不参与系统配置和业务操作
– 普通用户:只参与业务操作
# 权限管理策略
– 最小权限原则:每个角色只拥有完成职责所需的最小权限
– 权限审批:权限分配需要审批
– 权限定期审查:定期审查权限分配情况
– 权限回收:及时回收不需要的权限
# 审计策略
– 全面审计:对所有重要操作进行审计
– 审计日志保护:确保审计日志的安全性和完整性
– 审计日志分析:定期分析审计日志
– 审计报告:定期生成审计报告
# 安全策略
– 密码策略:强密码要求和定期更换
– 访问控制:基于角色的访问控制
– 网络安全:限制网络访问
– 数据加密:敏感数据加密存储
2.3 YashanDB三权分立安全考虑
YashanDB三权分立安全考虑:
- 权限分离:确保不同角色之间的权限分离
- 审计覆盖:确保所有重要操作都有审计记录
- 访问控制:严格控制对系统和数据的访问
- 密码管理:实施强密码策略
- 定期审查:定期审查权限和审计记录
Part03-生产环境项目实施方案
3.1 YashanDB三权分立配置
3.1.1 YashanDB三权分立基本配置
— 创建系统管理员角色
CREATE ROLE sys_admin_role;
— 创建安全管理员角色
CREATE ROLE security_admin_role;
— 创建审计管理员角色
CREATE ROLE audit_admin_role;
— 步骤2:分配系统管理员权限
GRANT SYSDBA TO sys_admin_role;
— 注意:实际生产环境中应根据需要分配具体权限,避免使用SYSDBA
— 步骤3:分配安全管理员权限
GRANT CREATE USER, ALTER USER, DROP USER TO security_admin_role;
GRANT GRANT ANY PRIVILEGE, GRANT ANY ROLE TO security_admin_role;
GRANT CREATE ROLE, ALTER ROLE, DROP ROLE TO security_admin_role;
— 步骤4:分配审计管理员权限
GRANT AUDIT SYSTEM, AUDIT ANY TO audit_admin_role;
GRANT SELECT ON DBA_AUDIT_TRAIL TO audit_admin_role;
GRANT SELECT ON DBA_FGA_AUDIT_TRAIL TO audit_admin_role;
— 步骤5:创建三权分立用户
— 创建系统管理员用户
CREATE USER sys_admin IDENTIFIED BY “SysAdmin123!”;
GRANT sys_admin_role TO sys_admin;
— 创建安全管理员用户
CREATE USER security_admin IDENTIFIED BY “SecurityAdmin123!”;
GRANT security_admin_role TO security_admin;
— 创建审计管理员用户
CREATE USER audit_admin IDENTIFIED BY “AuditAdmin123!”;
GRANT audit_admin_role TO audit_admin;
— 步骤6:验证用户和角色
SELECT
username,
account_status
FROM dba_users
WHERE username IN (‘SYS_ADMIN’, ‘SECURITY_ADMIN’, ‘AUDIT_ADMIN’);
— 输出结果
USERNAME ACCOUNT_STATUS
————— —————
SYS_ADMIN OPEN
SECURITY_ADMIN OPEN
AUDIT_ADMIN OPEN
— 查看角色权限
SELECT
grantee,
granted_role
FROM dba_role_privs
WHERE grantee IN (‘SYS_ADMIN’, ‘SECURITY_ADMIN’, ‘AUDIT_ADMIN’);
3.1.2 YashanDB三权分立高级配置
CREATE ROLE system_config_role;
GRANT ALTER SYSTEM, ALTER SESSION TO system_config_role;
GRANT CREATE TABLESPACE, ALTER TABLESPACE, DROP TABLESPACE TO system_config_role;
GRANT CREATE PROFILE, ALTER PROFILE, DROP PROFILE TO system_config_role;
GRANT SELECT ON V_$SYSTEM_PARAMETER TO system_config_role;
— 步骤2:创建细粒度的安全管理权限
CREATE ROLE user_admin_role;
GRANT CREATE USER, ALTER USER, DROP USER TO user_admin_role;
GRANT CREATE ROLE, ALTER ROLE, DROP ROLE TO user_admin_role;
GRANT GRANT ANY PRIVILEGE, GRANT ANY ROLE TO user_admin_role;
GRANT SELECT ON DBA_USERS TO user_admin_role;
GRANT SELECT ON DBA_ROLES TO user_admin_role;
— 步骤3:创建细粒度的审计管理权限
CREATE ROLE audit_config_role;
GRANT AUDIT SYSTEM, AUDIT ANY TO audit_config_role;
GRANT SELECT ON DBA_AUDIT_TRAIL TO audit_config_role;
GRANT SELECT ON DBA_FGA_AUDIT_TRAIL TO audit_config_role;
GRANT SELECT ON DBA_AUDIT_OBJECT TO audit_config_role;
— 步骤4:重新分配权限
REVOKE sys_admin_role FROM sys_admin;
GRANT system_config_role TO sys_admin;
REVOKE security_admin_role FROM security_admin;
GRANT user_admin_role TO security_admin;
REVOKE audit_admin_role FROM audit_admin;
GRANT audit_config_role TO audit_admin;
— 步骤5:启用审计
ALTER SYSTEM SET audit_trail = ‘DB,EXTENDED’ SCOPE=SPFILE;
— 重启数据库使审计设置生效
— SHUTDOWN IMMEDIATE;
— STARTUP;
— 步骤6:配置审计策略
AUDIT ALL BY sys_admin BY ACCESS;
AUDIT ALL BY security_admin BY ACCESS;
AUDIT ALL BY audit_admin BY ACCESS;
AUDIT ALL BY fgedu BY ACCESS;
3.2 YashanDB三权分立角色管理
3.2.1 YashanDB三权分立角色创建与管理
CREATE ROLE app_user_role;
GRANT CREATE SESSION TO app_user_role;
GRANT SELECT, INSERT, UPDATE, DELETE ON fgedu.sales TO app_user_role;
GRANT SELECT, INSERT, UPDATE, DELETE ON fgedu.customers TO app_user_role;
GRANT SELECT, INSERT, UPDATE, DELETE ON fgedu.products TO app_user_role;
— 步骤2:创建业务用户
CREATE USER fgedu_app IDENTIFIED BY “FgApp123!”;
GRANT app_user_role TO fgedu_app;
— 步骤3:创建只读用户角色
CREATE ROLE read_only_role;
GRANT CREATE SESSION TO read_only_role;
GRANT SELECT ON fgedu.sales TO read_only_role;
GRANT SELECT ON fgedu.customers TO read_only_role;
GRANT SELECT ON fgedu.products TO read_only_role;
— 步骤4:创建只读用户
CREATE USER fgedu_read IDENTIFIED BY “FgRead123!”;
GRANT read_only_role TO fgedu_read;
— 步骤5:管理角色权限
— 查看角色权限
SELECT
grantee,
privilege
FROM dba_sys_privs
WHERE grantee = ‘APP_USER_ROLE’;
— 查看对象权限
SELECT
grantee,
owner,
table_name,
privilege
FROM dba_tab_privs
WHERE grantee = ‘APP_USER_ROLE’;
— 调整角色权限
REVOKE DELETE ON fgedu.sales FROM app_user_role;
GRANT INSERT, UPDATE ON fgedu.sales TO app_user_role;
— 步骤6:管理用户角色
— 查看用户角色
SELECT
username,
granted_role
FROM dba_role_privs
WHERE username = ‘FGEDU_APP’;
— 调整用户角色
REVOKE app_user_role FROM fgedu_app;
GRANT read_only_role TO fgedu_app;
3.2.2 YashanDB三权分立权限审查
SELECT
grantee,
privilege,
admin_option
FROM dba_sys_privs
WHERE grantee IN (‘SYS_ADMIN’, ‘SECURITY_ADMIN’, ‘AUDIT_ADMIN’, ‘FGEDU_APP’, ‘FGEDU_READ’)
ORDER BY grantee, privilege;
— 步骤2:审查对象权限
SELECT
grantee,
owner,
table_name,
privilege
FROM dba_tab_privs
WHERE grantee IN (‘SYS_ADMIN’, ‘SECURITY_ADMIN’, ‘AUDIT_ADMIN’, ‘FGEDU_APP’, ‘FGEDU_READ’)
ORDER BY grantee, owner, table_name, privilege;
— 步骤3:审查角色权限
SELECT
grantee,
granted_role,
admin_option
FROM dba_role_privs
WHERE grantee IN (‘SYS_ADMIN’, ‘SECURITY_ADMIN’, ‘AUDIT_ADMIN’, ‘FGEDU_APP’, ‘FGEDU_READ’)
ORDER BY grantee, granted_role;
— 步骤4:审查高权限用户
SELECT
username,
account_status,
profile
FROM dba_users
WHERE username IN (
SELECT grantee
FROM dba_sys_privs
WHERE privilege IN (‘SYSDBA’, ‘SYSOPER’, ‘SYSASM’)
);
— 步骤5:生成权限审查报告
— 可以使用SQL生成详细的权限审查报告
3.3 YashanDB三权分立监控
3.3.1 YashanDB三权分立审计监控
SELECT
username,
timestamp,
action_name,
object_name,
sql_text
FROM dba_audit_trail
WHERE timestamp > SYSDATE – 7
ORDER BY timestamp DESC;
— 步骤2:查看细粒度审计日志
SELECT
db_user,
object_schema,
object_name,
policy_name,
statement_type,
timestamp,
sql_text
FROM dba_fga_audit_trail
WHERE timestamp > SYSDATE – 7
ORDER BY timestamp DESC;
— 步骤3:监控用户登录
SELECT
username,
timestamp,
action_name,
returncode,
client_identifier
FROM dba_audit_trail
WHERE action_name IN (‘LOGON’, ‘LOGOFF’)
AND timestamp > SYSDATE – 1
ORDER BY timestamp DESC;
— 步骤4:监控权限变更
SELECT
username,
timestamp,
action_name,
object_name,
sql_text
FROM dba_audit_trail
WHERE action_name IN (‘GRANT’, ‘REVOKE’)
AND timestamp > SYSDATE – 7
ORDER BY timestamp DESC;
— 步骤5:监控对象变更
SELECT
username,
timestamp,
action_name,
object_name,
object_type,
sql_text
FROM dba_audit_trail
WHERE action_name IN (‘CREATE’, ‘ALTER’, ‘DROP’)
AND timestamp > SYSDATE – 7
ORDER BY timestamp DESC;
3.3.2 YashanDB三权分立安全监控
SELECT
username,
account_status,
lock_date,
expiry_date
FROM dba_users
ORDER BY account_status;
— 步骤2:查看无效用户
SELECT
username,
account_status
FROM dba_users
WHERE account_status != ‘OPEN’;
— 步骤3:查看密码过期用户
SELECT
username,
expiry_date
FROM dba_users
WHERE expiry_date < SYSDATE;
-- 步骤4:查看失败登录尝试
SELECT
username,
count(*)
FROM dba_audit_trail
WHERE action_name = 'LOGON'
AND returncode != 0
AND timestamp > SYSDATE – 1
GROUP BY username
ORDER BY count(*) DESC;
— 步骤5:查看特权用户
SELECT
username,
granted_role
FROM dba_role_privs
WHERE granted_role IN (‘DBA’, ‘SYSDBA’, ‘SYSOPER’)
ORDER BY username;
Part04-生产案例与实战讲解
4.1 YashanDB三权分立配置实战
案例背景:某企业需要实施三权分立,提高数据库系统的安全性,符合等保要求。
— 确保数据库已启动
— 步骤2:创建三权分立角色
CREATE ROLE sys_admin_role;
CREATE ROLE security_admin_role;
CREATE ROLE audit_admin_role;
— 步骤3:分配权限
— 系统管理员权限
GRANT ALTER SYSTEM, ALTER SESSION TO sys_admin_role;
GRANT CREATE TABLESPACE, ALTER TABLESPACE, DROP TABLESPACE TO sys_admin_role;
GRANT CREATE PROFILE, ALTER PROFILE, DROP PROFILE TO sys_admin_role;
GRANT SELECT ON V_$SYSTEM_PARAMETER TO sys_admin_role;
GRANT SELECT ON V_$INSTANCE TO sys_admin_role;
— 安全管理员权限
GRANT CREATE USER, ALTER USER, DROP USER TO security_admin_role;
GRANT CREATE ROLE, ALTER ROLE, DROP ROLE TO security_admin_role;
GRANT GRANT ANY PRIVILEGE, GRANT ANY ROLE TO security_admin_role;
GRANT SELECT ON DBA_USERS TO security_admin_role;
GRANT SELECT ON DBA_ROLES TO security_admin_role;
— 审计管理员权限
GRANT AUDIT SYSTEM, AUDIT ANY TO audit_admin_role;
GRANT SELECT ON DBA_AUDIT_TRAIL TO audit_admin_role;
GRANT SELECT ON DBA_FGA_AUDIT_TRAIL TO audit_admin_role;
GRANT SELECT ON DBA_AUDIT_OBJECT TO audit_admin_role;
— 步骤4:创建三权分立用户
CREATE USER sys_admin IDENTIFIED BY “SysAdmin123!”;
CREATE USER security_admin IDENTIFIED BY “SecurityAdmin123!”;
CREATE USER audit_admin IDENTIFIED BY “AuditAdmin123!”;
— 分配角色
GRANT sys_admin_role TO sys_admin;
GRANT security_admin_role TO security_admin;
GRANT audit_admin_role TO audit_admin;
— 步骤5:启用审计
ALTER SYSTEM SET audit_trail = ‘DB,EXTENDED’ SCOPE=SPFILE;
— 重启数据库
— SHUTDOWN IMMEDIATE;
— STARTUP;
— 步骤6:配置审计策略
AUDIT ALL BY sys_admin BY ACCESS;
AUDIT ALL BY security_admin BY ACCESS;
AUDIT ALL BY audit_admin BY ACCESS;
AUDIT ALL BY fgedu BY ACCESS;
— 步骤7:验证配置
SELECT
username,
granted_role
FROM dba_role_privs
WHERE username IN (‘SYS_ADMIN’, ‘SECURITY_ADMIN’, ‘AUDIT_ADMIN’);
— 输出结果
USERNAME GRANTED_ROLE
————— —————
SYS_ADMIN SYS_ADMIN_ROLE
SECURITY_ADMIN SECURITY_ADMIN_ROLE
AUDIT_ADMIN AUDIT_ADMIN_ROLE
4.2 YashanDB三权分立权限管理实战
案例背景:某企业需要管理三权分立的权限,确保权限的合理分配和使用。
— 创建业务操作角色
CREATE ROLE business_op_role;
GRANT CREATE SESSION TO business_op_role;
GRANT SELECT, INSERT, UPDATE, DELETE ON fgedu.sales TO business_op_role;
GRANT SELECT, INSERT, UPDATE, DELETE ON fgedu.customers TO business_op_role;
— 创建业务查询角色
CREATE ROLE business_query_role;
GRANT CREATE SESSION TO business_query_role;
GRANT SELECT ON fgedu.sales TO business_query_role;
GRANT SELECT ON fgedu.customers TO business_query_role;
— 创建业务用户
CREATE USER fgedu_op IDENTIFIED BY “FgOp123!”;
CREATE USER fgedu_qry IDENTIFIED BY “FgQry123!”;
— 分配角色
GRANT business_op_role TO fgedu_op;
GRANT business_query_role TO fgedu_qry;
— 步骤2:权限管理
— 查看用户权限
SELECT
username,
granted_role
FROM dba_role_privs
WHERE username IN (‘FGEDU_OP’, ‘FGEDU_QRY’);
— 调整权限
— 为业务操作角色添加更多权限
GRANT SELECT, INSERT, UPDATE, DELETE ON fgedu.products TO business_op_role;
— 为业务查询角色添加更多权限
GRANT SELECT ON fgedu.products TO business_query_role;
— 步骤3:权限审查
— 审查系统权限
SELECT
grantee,
privilege
FROM dba_sys_privs
WHERE grantee IN (‘BUSINESS_OP_ROLE’, ‘BUSINESS_QUERY_ROLE’);
— 审查对象权限
SELECT
grantee,
owner,
table_name,
privilege
FROM dba_tab_privs
WHERE grantee IN (‘BUSINESS_OP_ROLE’, ‘BUSINESS_QUERY_ROLE’);
— 步骤4:权限回收
— 回收不需要的权限
REVOKE DELETE ON fgedu.sales FROM business_op_role;
— 验证权限回收
SELECT
grantee,
owner,
table_name,
privilege
FROM dba_tab_privs
WHERE grantee = ‘BUSINESS_OP_ROLE’
AND table_name = ‘SALES’;
4.3 YashanDB三权分立审计实战
案例背景:某企业需要实施审计,监控数据库操作,确保合规性。
ALTER SYSTEM SET audit_trail = ‘DB,EXTENDED’ SCOPE=SPFILE;
ALTER SYSTEM SET audit_sys_operations = TRUE SCOPE=SPFILE;
— 重启数据库
— SHUTDOWN IMMEDIATE;
— STARTUP;
— 步骤2:配置审计策略
— 审计系统级操作
AUDIT SYSTEM BY ACCESS;
— 审计用户管理操作
AUDIT CREATE USER, ALTER USER, DROP USER BY ACCESS;
AUDIT CREATE ROLE, ALTER ROLE, DROP ROLE BY ACCESS;
AUDIT GRANT, REVOKE BY ACCESS;
— 审计对象操作
AUDIT CREATE TABLE, ALTER TABLE, DROP TABLE BY ACCESS;
AUDIT CREATE INDEX, ALTER INDEX, DROP INDEX BY ACCESS;
AUDIT CREATE VIEW, ALTER VIEW, DROP VIEW BY ACCESS;
— 审计数据操作
AUDIT SELECT, INSERT, UPDATE, DELETE ON fgedu.sales BY ACCESS;
AUDIT SELECT, INSERT, UPDATE, DELETE ON fgedu.customers BY ACCESS;
AUDIT SELECT, INSERT, UPDATE, DELETE ON fgedu.products BY ACCESS;
— 步骤3:创建细粒度审计策略
BEGIN
DBMS_FGA.ADD_POLICY(
object_schema => ‘FGEDU’,
object_name => ‘CUSTOMERS’,
policy_name => ‘CUSTOMERS_AUDIT’,
audit_condition => ‘AGE < 18',
audit_column => ‘NAME, EMAIL, ADDRESS’,
handler_schema => NULL,
handler_module => NULL,
enable => TRUE,
statement_types => ‘SELECT, INSERT, UPDATE, DELETE’,
audit_trail => DBMS_FGA.DB_EXTENDED
);
END;
/
— 步骤4:查看审计日志
— 查看系统审计日志
SELECT
username,
timestamp,
action_name,
object_name,
sql_text
FROM dba_audit_trail
WHERE timestamp > SYSDATE – 1
ORDER BY timestamp DESC;
— 查看细粒度审计日志
SELECT
db_user,
object_schema,
object_name,
policy_name,
statement_type,
timestamp,
sql_text
FROM dba_fga_audit_trail
WHERE timestamp > SYSDATE – 1
ORDER BY timestamp DESC;
— 步骤5:生成审计报告
— 可以使用SQL生成详细的审计报告
— 例如:登录失败报告、权限变更报告、数据访问报告等
Part05-风哥经验总结与分享
5.1 YashanDB三权分立最佳实践
YashanDB三权分立最佳实践:
- 权限分离:严格分离系统管理、安全管理和审计管理权限
- 最小权限:每个角色只拥有完成职责所需的最小权限
- 审计覆盖:确保所有重要操作都有审计记录
- 定期审查:定期审查权限分配和审计记录
- 密码管理:实施强密码策略,定期更换密码
- 访问控制:基于角色的访问控制,限制权限范围
- 培训教育:对管理员和用户进行安全培训
- 文档记录:详细记录三权分立的配置和管理流程
5.2 YashanDB三权分立检查清单
– [ ] 系统管理员、安全管理员和审计管理员角色是否创建
– [ ] 三权分立用户是否创建
– [ ] 各角色权限是否合理分配
– [ ] 审计是否启用
– [ ] 审计策略是否配置
– [ ] 权限审查机制是否建立
– [ ] 审计日志是否定期分析
– [ ] 安全事件响应流程是否建立
– [ ] 密码策略是否实施
– [ ] 访问控制是否有效
# 三权分立实施步骤
1. 规划三权分立架构
2. 创建三权分立角色
3. 分配角色权限
4. 创建三权分立用户
5. 启用审计功能
6. 配置审计策略
7. 测试三权分立功能
8. 部署到生产环境
9. 定期审查和调整
10. 建立监控和响应机制
# 三权分立安全要点
– 权限分离:确保不同角色之间的权限分离
– 审计覆盖:确保所有重要操作都有审计记录
– 密码安全:实施强密码策略
– 访问控制:限制对敏感资源的访问
– 定期审查:定期审查权限和审计记录
– 培训教育:提高安全意识
– 应急响应:建立安全事件响应机制
5.3 YashanDB三权分立常见问题处理
YashanDB三权分立常见问题及处理方法:
– 现象:某个角色拥有过多或过少的权限
– 处理:审查权限分配,调整权限范围
# 常见问题2:审计日志过多
– 现象:审计日志过大,影响系统性能
– 处理:调整审计策略,只审计重要操作
# 常见问题3:审计日志丢失
– 现象:审计日志不完整或丢失
– 处理:确保审计日志的安全性和完整性
# 常见问题4:权限冲突
– 现象:不同角色之间的权限冲突
– 处理:重新设计权限结构,避免冲突
# 常见问题5:三权分立实施困难
– 现象:实施三权分立后,日常操作不便
– 处理:优化流程,平衡安全性和可用性
# 常见问题6:审计分析困难
– 现象:审计日志量大,分析困难
– 处理:使用审计分析工具,建立自动化分析机制
# 常见问题7:密码管理问题
– 现象:密码泄露或忘记密码
– 处理:实施强密码策略,建立密码重置流程
# 常见问题8:权限回收不及时
– 现象:用户离职后权限未及时回收
– 处理:建立权限回收机制,定期审查用户权限
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
