iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >SQL_MODE为严格模式下的数据安全专题报告
  • 760
分享到

SQL_MODE为严格模式下的数据安全专题报告

2024-04-02 19:04:59 760人浏览 安东尼
摘要

专题描述详细描述sql_MODE为严格模式下可能出现的数据错误风险。问题提出1日期默认'0000-00-00 00:00:00'的,查询时会直接报错。Caused by: ja

专题描述详细描述sql_MODE为严格模式下可能出现的数据错误风险。
问题提出1日期默认'0000-00-00 00:00:00'的,查询时会直接报错。
Caused by: java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp
URL需添加如下参数:zeroDateTimeBehavior=convertToNull。
2OMS数据库因UAT环境和性能测试环境的参数配置不同,导致性能测试环境下应用SQL执行报错,相关参数为STRICT_TRANS_TABLES与explicit_defaults_for_timestamp。
数据风险1整型类型数据值截断风险

重点关注 TINYINT类型

,其他整数类型上线初期溢出概率低。

以“`payment_display_mode` tinyint(4) 

DEFAULT NULL COMMENT '付款到期日显示方式: 

11-最晚汇款日 12-到期日',” 为例。

示例:在非严格模式下,应用程序为 

字段 payment_display_mode 设置一个值 

小于-128 或大于127 ,

则超过部分会被截断(超过-128,则存储为-128,例如 -200 会默认变成 -128;超过127,则存储为127),例如 300 会默认变成127。

2浮点类型截断

以“`longitude` DECIMAL(19,5) NULL

 DEFAULT '0.00000' COMMENT '经度坐标'” 

为例。


示例:在非严格模式下,应用程序为 

字段 longitude 设置一个值 

超过 5位小数或者整数超过14位,

则超过部分会被截断。

3字符串类型风险

以“`MODIFIER_USER` VARCHAR(30) NUL

L DEFAULT NULL COMMENT '更新者用户账号',”

 为例。


示例:在非严格模式下,

应用程序为 字段 MODIFIER_USER 

设置一个值 超过 30个字符,则超过部分会被截断。

4时间类型风险由于JAVA代码认为0000-00-00 00:00:00时间是非法的时间,JDBC中提供参数控制对它的处理, 故可通过添加zeroDateTimeBehavior=convertToNull使其转化为null。 

连接字符串示例: 
jdbc:Mysql://10.202.198.201:3319/oms6?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull 
5NOT NULL类型风险

非严格模式下,不给字段定义约束

NOT NULL字段赋值 或 给其一个NULL值,

在无定义约束无默认值的情况下:数据值类型的

字段值默认为0,字符串类型的字段值默认为空字符串''。从SQL语句和存储过程处理分析,多数情况下都兼容处理了,但依然请研发团队谨慎评估。

问题原因数据库SQL_MODE设置为严格模式。
解决方案1建议DBA团队设置SQL_MODE为严格模式,运行系统进行测试,将根据报错定位存在的数据隐患,修改程序。
2设置服务器SQL_MODE为严格模式。
知识点1

数据库SQL_MODE设置为严格模式将出现问题分为以下几类

:1、日期默认'0000-00-00 00:00:00'的;查询时会直接报错,

2、字段类型设置为NOT NULL时,插入NULL值将报错;

3、当插入超出数值字段类型范围的值时,直接报错;

2STRICT_TRANS_TABLES释义:

官方文档链接:

Http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sql-mode-strict

官方文档解释:For transactional tables, an error occurs for invalid or missing values in a data-change statement when either STRICT_ALL_TABLES or STRICT_TRANS_TABLES is enabled. The statement is aborted and rolled back.
使用该参数的主要目的还是使得数据库面对错误的数据和操作时倾向于报错,而不是给出警告。便于提早发现问题,与规范对数据库的操作。
3

数据库SQL_MODE设置为非严格模式时,系统上述情况倾向于警告

。插入超过数值类型范围字段值时系统取最大值插入,

插入字符类型字段值超过长度范围时会截断。


您可能感兴趣的文档:

--结束END--

本文标题: SQL_MODE为严格模式下的数据安全专题报告

本文链接: https://www.lsjlt.com/news/44878.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql拒绝访问怎么办
    mysql 出现拒绝访问的原因和解决方法:权限问题:授予用户适当的数据库或表访问权限。防火墙或安全组:允许对 mysql 端口(3306)的入站连接。密码错误:重置 mysql 密码或使...
    99+
    2024-05-19
    mysql
  • mysql怎么比较日期大小
    mysql 中比较日期大小的方法包括:直接比较两个日期,使用 、= 运算符。使用 date_format() 函数将日期转换为字符串,然后比较字符串大小。使用 str_to_date()...
    99+
    2024-05-19
    mysql
  • mysql怎么加锁
    mysql中加锁是一种确保数据并发访问一致性的机制。加锁方式有:表级锁(对整个表加锁)和行级锁(对特定行加锁)。加锁类型有共享锁(允许读取但禁止修改)、排他锁(禁止读取和修改)和意向锁(...
    99+
    2024-05-19
    mysql 并发访问
  • mysql误删数据怎么恢复
    mysql误删数据可通过以下步骤恢复:停止数据库服务,防止数据覆盖。若开启binlog日志,可从中提取删除语句,再重新执行后将数据恢复。使用恢复工具修复表文件或恢复事务。从备份中恢复数据...
    99+
    2024-05-19
    mysql
  • 怎么判断mysql安装成功
    成功安装 mysql 的方法:检查命令行界面版本号;连接到 mysql 服务器,输入 "mysql -u root -p";创建数据库,输入 "create database test;...
    99+
    2024-05-19
    mysql linux macos 防火墙配置
  • mysql怎么修改表名
    如何修改 mysql 表名:检查当前表名:show tables;运行 rename table 语句:rename table 旧表名 to 新表名;验证更改:show tables;...
    99+
    2024-05-19
    mysql
  • mysql删除的表怎么恢复
    mysql 中已删除表的恢复方法主要涉及以下步骤:检查 binlog 日志以获取删除事务信息;使用数据恢复工具扫描数据库文件;从备份还原表数据;或联系 mysql 支持寻求帮助。 My...
    99+
    2024-05-19
    mysql 数据丢失
  • mysql复合主键怎么写
    在 mysql 中编写复合主键:在 create table 语句中使用 primary key 约束并列出字段名称。复合主键的好处包括提高查询效率、保证数据完整性和强制数据顺序。注意选...
    99+
    2024-05-19
    mysql
  • 怎么查看mysql数据库版本
    如何查看 mysql 数据库版本?连接到数据库并执行查询:select version();检查命令行或 mysql workbench 中的服务器属性。 如何查看 MySQL 数据库...
    99+
    2024-05-19
    mysql linux
  • 怎么检测mysql安装成功
    要验证 mysql 安装是否成功,请执行以下步骤:检查系统服务是否正在运行。使用 mysql 命令行工具连接到服务器。创建一个测试数据库并使用它。在数据库中创建一个测试表。插入测试数据并...
    99+
    2024-05-19
    mysql linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作