codecamp

OceanBase 数据转换的安全注意事项

通过隐式转换或不指定格式模型的显式转换将日期时间值转换为文本时,格式模型由一个全局会话参数定义。根据源数据类型,这些参数名称为​ NLS_DATE_FORMAT​、​NLS_TIMESTAMP_FORMAT​ 或 ​NLS_TIMESTAMP_TZ_ FORMAT​。这些参数的值可以在客户端环境或 ​ALTER SESSION​语句中指定。

当不指定格式模型的显式转换对动态构造的 SQL 语句中的日期时间值进行显式转换时,格式模型对会话参数的选择过程会对数据库安全性产生负面影响。

动态构造的 SQL 语句是指由程序或者存储过程生成的 SQL 语句。执行动态构造的 SQL 语句,需要 OceanBase 内置的 PL 包 ​DBMS_SQL​ 或与 PL 语句 ​EXECUTE IMMEDIATE​ 相关,但这些并不是唯一执行动态构造的 SQL 文本的方式。

如下所示,​start_date​ 的数据类型为 ​DATE​,使用会话参数 ​NLS_DATE_FORMAT​ 中指定的格式模型将 ​start_date​ 的值转换为文本,再将结果传递到 SQL 文本中。日期时间格式模型可以简单地由双引号所包含的文本组成。

SELECT last_name FROM employees WHERE hire_date > '' || start_date || '';
说明 
为显式转换的格式模型设置全球化参数的用户可以决定上述转换产生了什么文本。
若 SQL 语句由过程执行,则该过程的执行可能会由于session变量的修改而被SQL注入。当某些过程具有更高权限(例如Definer's Rights Procedure)时,造成的安全方面的影响可能更大。


OceanBase 数据类型转换
OceanBase 字面量概述
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

OceanBase 控制台指南

OceanBase ODC 使用指南

OceanBase Web 版 ODC

OceanBase 客户端版 ODC

OceanBase Connector/J 开发者指南

OceanBase 什么是OceanBase Connector/J

OceanBase SQL 参考(MySQL 模式)

OceanBase SQL 参考(Oracle 模式)

OceanBase 基本元素

OceanBase 数据库对象

OceanBase 函数

OceanBase 单行函数

OceanBase 返回数字的字符串函数

OceanBase 通用比较函数

OceanBase 编码解码函数

OceanBase SQL 调优指南

OceanBase 相关协议

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }