项目适 Oracle改造及SSL安全性配置问题汇总详解

目录
  • 背景
  • Oracle 适配点
  • 其他低级错误
  • 高级问题
  • 工具思维
    • 开发启示录

背景

项目开发初期使用 MySQL ,后期需要适配 Oracle ,总结适配过程及多数据库支持时,从开发初期就需要考虑的几点。

另外,总结几点最近半年开发过程中的技术问题。坑都填了,也该是时候记录一下填坑的经过了,要不然下次可能还会踏入同一个坑。

Oracle 适配点

  • 表名称长度限制,支持 Oracle 12C 以下是需要考虑 30个字符的限制。
  • Oracle 关键字 USER 不能乱用做别名.跟 MySQL 不一样,Oracle 有一张特殊的用户表名称就是 USER
  • Oracle 没有默认转义符号,支持模糊查询时,需要手动编写查询语句指定 ESCAPE 字符。这点 MyBatisPlus 插件的模糊查询爱莫能助,所以还是需要自定义模糊查询 SQL。好在 MySQL 和 Oracle 的 ESCAPE 语法是是一样的,可以统一。此外字符串连接函数 CONCAT 也应该以 Oracle 为主,只能有两个参数。
  • Oracle 的字段长度,一个中文的长度是2,这点与 MySQL 不一样。可变长度、允许输入中文的字段,都需要自动扩大到 MySQL 的 2 倍长。
  • Oracle 的 null 值插入或者更新时的异常问题,可以通过 MyBatisPlus 的全局配置 jdbc-type-for-null: 'null' 统一解决。
  • Oracle 区分大小写的,SQL 语法中注意小写是否真的是小写,如果是,需要加引号转义。
  • MySQL 的 text 或者 LongText 字段,对应 NCLOB VS VARCHAR(4000),有些特殊字段需要超长字符的,有个四千的边界,超过就需要用 NCLOB 类型。

其他低级错误

有些低级错误,比如:

  • yml 配置冒号后面要有空格,特殊字符用单引号。
  • IDEA 将普通 Java 工程导出可执行 jar 的时候,MANTIFET 清单文件生成的目录必须放在 src 下面,否则打包生成的文件执行时找不到主类。
  • 迭代器遍历的正确用法是 while(it.hasNext) 而非 if ,后者只会执行一次。再次印证了一句经验:不要相信拷贝来的代码,除非经过了你的测试。
  • 精度丢失问题,一个简单的计算指定周期的时间戳的代码,未考虑精度问题而溢出:
long result = 0;
switch (type){
case "year":
 result = time*365*24*60*60*1000;
  break;
case "month":
  result = time*30*24*60*60*1000;
  break;
case "day":
  result = time*24*60*60*1000;
  break;
  }

这个简单的根据时间单位类型,计算间隔的时间戳的代码, time 类型传入了 int ,结果几个纯数值默认 int 相乘后,单位为 year 结果溢出为负数了。

这是一个计算密码锁定时间的功能,锁定时间算出为负了,当密码正确时自动判断是否继续锁定时,当前时间 > (锁定开始时间+锁定时常)直接解锁了。

这个错误虽然低级,但是却测不出来,只有脑回路清奇的测试把密码锁定策略的锁定周期设置为年时才会显现。

高级问题

Web 项目安全扫描,https 支持的过程中,默认的 ssl 配置被扫到了不安全的密码套件和密钥长度过短的问题。Spring Boot 项目配置 SSL ,在目标服务器配置后 ciphers 密码套件后,访问不成功,总结一下这个过程。

相关的 SSL 配置:

ssl:
    enabled: false
    key-store: file:xxx.jks
    key-store-type: JKS
    key-alias: xxx
    key-store-password: xxx
    # 配置证书版本,默认是 TLS1.0
    protocol: TLS
    # 设置SSL版本,默认是 TLS1.0
    enabled-protocols: TLSv1.2
    # 密钥套件算法,剔除不安全的算法
    ciphers: TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

需要注意的是,ciphers 参数中的密码算法对 JDK 版本有要求,较低的1.8 小版本是不支持的。

工具思维

有一台服务器的 SFTP 服务配置连接时间很短,由于网络问题,FTP 客户端总是没法在30秒内完成连接。但是碰到需要上传文件的时候,怎么办呢?

找别人上传了两次之后,总不能每次都找别人帮忙上传吧。试了下 Java 的 FTP 上传工具类,jsch 竟然能成功上传。一个简单的工具类,就成了缩减版的 FTP 工具了。

开发启示录

启示一,协同开发过程中,如果你看到了确实是问题的异常,抛在开发沟通群里,不能指望真正负责这个模块的人会主动解决这个问题。最好的方法是 @他 并明确告诉他有问题。否则,下次这个问题复现的时候,还是会再次面对的。

启示二,再次反思,拷贝代码要测试。

以上就是项目适 Oracle改造及SSL安全性配置问题汇总详解的详细内容,更多关于Oracle改造SSL安全适配的资料请关注我们其它相关文章!

(0)

相关推荐

  • Oracle 11g实现安全加固的完整步骤

    前言 数据库安全配置中,需要做相关的安全加固工作.以确认数据库的安全,但是,有些时候,操作不当或者数据库业务账号修改密码后,而程序的连接数据库的配置封装在jar里,如果jar内的连接数据库的配置信息没有做相应的修改的话.就会对数据库的此业务账号造成严重的后果. 本文将详细介绍关于Oracle 11g安全加固的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 1.安全加固的检查方向 1.1.sysdba用户远程登录限制(查看Oracle登录认证方式) 检查: show pa

  • Oracle监听口令及监听器安全详解

    很多Oracle用户都知道,Oracle的监听器一直存在着一个安全隐患,假如对此不设置安全措施,那么能够访问的用户就可以远程关闭监听器. 相关示例如下: D:>lsnrctl stop eygle LSNRCTL for 32-bit Windows: Version 10.2.0.3.0 - Production on 28-11月-2007 10:02:40 Copyright (c) 1991, 2006, Oracle. All rights reserved. 正在连接到 (DESCR

  • 网站启用https后的SSL的安全配置和检测

    现在的网站通常开启SSL已经是标配了,不过,配置好了SSL后,还需要判断一下服务器部署的是否安全,如果没有配置好的话,会带来很多安全隐患. SSL/TLS 系列中有六种版本:SSL v2,SSL v3,TLS v1.0,TLS v1.1.TLS v1.2.TLS v1.3: SSL v2 是不安全的,不能使用. 当与 HTTP(POODLE 攻击)一起使用时,SSL v3 是不安全的,当与其他协议一起使用时,SSL v3 是弱的.它也是过时的,不应该被使用. TLS v1.0 也是不应该使用的传

  • 提升Oracle用户密码安全性的策略

    环境:Oracle 11.2.0.4 客户需求:主要背景是数据库中有很多业务用户名,且由于部分用户缺乏安全意识,甚至直接将自己的密码设置为和用户名一样,目前客户期望密码设置不要过于简单,最起码别和用户名一致或相似就好. 1.官方解决方案 实际上Oracle提供有一个非常好用的安全校验函数,来提升用户密码的复杂性.这个在之前的文章<Oracle 11g 安全加固>中的"1.8.数据库密码安全性校验函数"章节就已经有了确切的解决方案,核心内容如下: select limit f

  • oracle net manager 数据传输安全步骤详解

    简介 Net Manger可以管理服务命名和监听程序. 所谓监听程序就是一个Oracle服务器上进程,负责监听/响应客户端对Oracle服务的请求.之前我们在安装数据库实例时,同时已经安装了一个监听程序,这点我们知道就行. 本篇重点给大家介绍oracle net manager 数据传输安全,具体操作步骤如下所示: oracle net manager来加密客户端与数据库之间或中间件与 数据库之间的网络传输数据 第一步:开始-->所有程序 -->oracle --> 配置和移植工具 --

  • Nginx服务器中关于SSL的安全配置详解

    本文向你们展示如何在nginx的web服务器上设置更强的SSL.我们是通过使SSL无效来减弱CRIME攻击的这种方法实现.不使用在协议中易受攻击的SSLv3以及以下版本并且我们会设置一个更强的密码套件为了在可能的情况下能够实现Forward Secrecy,同时我们还启用HSTS和HPKP.这样我们就有了一个更强.不过时的SSL配置并且我们在Qually Labs SSL 测试中得到了A等级. 我们在nginx的设置文档中如下编辑 复制代码 代码如下: /etc/nginx/sited-enab

  • 项目适 Oracle改造及SSL安全性配置问题汇总详解

    目录 背景 Oracle 适配点 其他低级错误 高级问题 工具思维 开发启示录 背景 项目开发初期使用 MySQL ,后期需要适配 Oracle ,总结适配过程及多数据库支持时,从开发初期就需要考虑的几点. 另外,总结几点最近半年开发过程中的技术问题.坑都填了,也该是时候记录一下填坑的经过了,要不然下次可能还会踏入同一个坑. Oracle 适配点 表名称长度限制,支持 Oracle 12C 以下是需要考虑 30个字符的限制. Oracle 关键字 USER 不能乱用做别名.跟 MySQL 不一样

  • java 查询oracle数据库所有表DatabaseMetaData的用法(详解)

    一 . 得到这个对象的实例 Connection con ; con = DriverManager.getConnection(url,userName,password); DatabaseMetaData dbmd = con.getMetaData(); 二. 方法getTables的用法 原型: ResultSet DatabaseMetaData.getTables(String catalog,String schema,String tableName,String []type

  • oracle数据匹配merge into的实例详解

    oracle数据匹配merge into的实例详解 前言: 很久之前,估计在2010年左右在使用Oralce,当时有个需求就是需要对两个表的数据进行匹配,这两个表的数据结构一致,一个是正式表,一个是临时表,这两表数据量还算是比较大几百M.业务需求是用临时表中的数据和正式表的匹配,所有字段都需要一一匹配,而且两表还没有主键,这是一个比较麻烦和糟糕的事情. 场景: 1.如果两表所有字段值都一致则不处理: 2.如果有部分字段不一致则更新: 3.如果正式表中数据在临时表中不存在,则需要删除: 满足上面场

  • oracle数据库中sql%notfound的用法详解

    SQL%NOTFOUND 是一个布尔值.与最近的sql语句(update,insert,delete,select)发生交互,当最近的一条sql语句没有涉及任何行的时候,则返回true.否则返回false.这样的语句在实际应用中,是非常有用的.例如要update一行数据时,如果没有找到,就可以作相应操作.如: begin update table_name set salary = 10000 where emp_id = 10; if sql%notfound then insert into

  • Oracle sqlldr导入一个日期列实例详解

    Oracle sqlldr导入一个日期列实例详解 1. LOAD DATA INFILE * INTO TABLE test FIELDS TERMINATED BY X'9' TRAILING NULLCOLS ( c2 "upper(:c2)", c3 date "yyyymmdd", c1 "SEQ_test_c1.nextval" ) BEGINDATA AAAAAAAAAA 20051201 BBBBBBBBBB 20050112 CR

  • Oracle回滚段使用查询代码详解

    大批量执行DML语句造成回滚段大量占用,又回退操作,如何直观查询数据回滚情况? 单机环境 查询回滚执行进度 select /*+ rule */s.sid, r.name rr, nvl(s.username,'no transaction') us, s.osuser os, s.terminal te, t.used_urec rec, t.used_ublk blk from v$lock l, v$session s, v$rollname r,v$transaction t where

  • oracle中的procedure编写和使用详解

    1.创建/修改 CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter_list)] {IS|AS} [local_declarations] BEGIN executable_statements [EXCEPTION exception_handlers] END [procedure_name]; a.parameter_list格式如下 parameter_name1 [in | out | in out] type, param

  • Oracle误删除表数据后的数据恢复详解

    Oracle误删除表数据后的恢复详解   测试环境: SYSTEM:IBM AIX 5L                         Oracle Version:10gR2 1. undo_retention参数的查询与修改 使用show parameter undo命令查看当前的数据库参数undo_retention设置. 显示如下: SQL> show parameter undo NAME                                 TYPE        VAL

  • Eclipse中导入Maven Web项目并配置其在Tomcat中运行图文详解

    今天因为实习的关系需要讲公司已经开发的项目导入进Eclipse,而公司的项目是用Maven来构建的所以,需要将Maven项目导入进Eclipse下. 自己因为没有什么经验所以搞了得两个多小时,在这里和大家分享一下自己的经验已经在这之中遇到的一些问题. 首先我通过svn将公司的项目checkout到了本地. 因为Maven遵循的是规约比配置重要的原则,所以Maven项目的结构一般是进入目录后是一个pom.xml文件和一个src文件夹,当然可能还存在一些README之类的这些都不重要,最关键的就是p

  • 在vue项目中优雅的使用SVG的方法实例详解

    1.基础介绍 本文旨在介绍如何在项目中配置和方便的使用svg图标. 本文以vue项目为例,当然在react中的使用原理基本相似. svg图标可以直接通过img标签来使用,也可当做icon来使用. 本文是参考了鑫旭大佬的文章:SVG Sprite技术介绍. 2.配置 安装svg-sprite-loader.通过vue-cli脚手架创建的项目默认情况下会使用 url-loader 对svg进行处理,所以需要处理下: { test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, l

随机推荐