中国农业银行被罚 420 万元:因重要信息系统突发事件未报告、网络信息系统存在较多漏洞等 6 项原因

并处以4 2 0万罚款。

六项违规行为: 1 .未报告系统事故。
时间和地点都不确定。
数据丢失,系统崩溃。
2 . 打印数据清晰存储。
银行卡号和密码。
风险很高。
3 、生产网络和无线网络保护较差。
攻击者进入。
4 .数据管理粗糙。
权限混乱,没有审核。
5 、系统漏洞较多。
没有修理,没有补丁。
6 、网站泄露敏感信息。
SQL注入。

依据《银行业监督管理法》。
第二十一条、第四十六条。
监管部门很严格。
银行需要加强保护。

对数据库insert 时org.springframework.dao.DataIntegrityViolationException: SqlMapClient operation

昨天,在帮助同事调试数据库应用程序时,遇到一个很常见的bug,插入数据时抛出org.springframework.dao.DataIntegrityViolationException。
此异常通常是由于数据违反数据库完整性约束而发生的。
例如,主键重复或外键引用不存在的记录。

我打开Student数据库,发现里面确实没有构造表,所以我决定按照步骤创建它。
创建表的指令很简单,就几行命令:
sql 创建表建筑( id INT 主键, 名称 VARCHAR(2 5 5 ) NOT NULL );
然后我用DESC构造可视化这个表的结构,发现表结构非常简单,只有两个字段:id和name。

然后我根据需要创建了building_information表。
表的结构如下:
sql 创建表建筑物信息( info_id INT 主键, Building_id INT, info_content VARCHAR(1 000), 外键(building_id)参考建筑物(id) );
我再次使用 DESC Building_information 显示该表的结构,并确认外键设置正确并且指向建筑表的 id 字段。

最后,我尝试在构建表中插入一条记录:
sql INSERT INTO Building (id, name) VALUES (1 , '主楼');
插入时,我故意让这条记录违反了外键约束,系统立即抛出异常。
此时我意识到触发器已被触发,并且由于外键约束,数据可能不一致。

我认为如果这个触发器的目的是在插入记录时自动检查并插入相关信息,我可能需要仔细检查触发器逻辑以确保它不会导致这样的错误。
等等,还有一件事。
我突然想到也许我们应该检查是否有其他记录插入到构建表中以避免外键约束问题。

但不管怎样,解决这个问题首先要确认数据库表结构和约束设置正确,然后再考虑触发逻辑。
在这个过程中我发现细节非常重要,一个小错误就会导致整个应用出现问题。

com.ibm.db2.jcc.am.SqlDataException: DB2 SQL Error: SQLCODE=-420, SQLSTATE=22018, SQLERRMC=INTEGER,

嘿,我已经习惯了。
去年,我在上海建设ERP系统时,也遇到过类似的情况。
当时我们的数据库是DB2 ,我们写了一个存储过程来将字符串转换为整数。
结果是传入的字符串是浮点字符串,比如“1 2 3 .4 5 ”,如果直接用INTEGER函数转换,就会报这个错误:“Invalid character found in function's string argument”。

如果您查看此错误消息,您会发现很明显:字符串中存在无法转换的无效字符。
为什么?由于 INTEGER 函数需要纯数字字符串,因此它不能包含“.”。
这是相当烦人的,尤其是当用户在填写表单时填写一串带有小数位的数字时。
后端没有正确处理它,直接将其扔到数据库中,当然没有识别它。

解决办法其实很简单。
您可以在转移前添加判断。
例如使用DB2 函数,首先检查是否是数字或者直接使用正则表达式来判断。
我这里有一段旧代码,具体内容我忘了。
这可能意味着您必须在传递字符串之前确认该字符串是合法的数字。
如果直接使用CAST('1 2 3 .4 5 ' AS INTEGER)肯定不行。
数据库会直接崩溃并向你报告这个错误。

这个教训是深刻的。
开发时,数据类型不能有二义性。
特别是,必须验证用户输入。
虽然看似简单,但一不小心就会掉入陷阱。
如果遇到将浮点数转换为整数的问题,请记住先去掉小数位,或者直接评估是否可以转换。
别让事情变得困难,这肯定是错误的。

哦,对了,错误码SQL04 2 0N和sqlstate:2 2 01 8 是标准的DB2 错误码,专门告诉你传递的参数类型不正确。
嗯,对此要格外小心,并进行多一层验证。
你应该尝试一下,你就能解决它。