本文目录一览:
-
2、如何应对黑客
什么是的oracle绑定变量 又该如何使用怎么,有哪些优点
绑定变量是为了减少解析的,比如你有个语句这样
select aaa,bbb from ccc where ddd=eee;
如果经常通过改变eee这个谓词赋值来查询,像如下
select aaa,bbb from ccc where ddd=fff;
select aaa,bbb from ccc where ddd=ggg;
select aaa,bbb from ccc where ddd=hhh;
每条语句都要被数据库解析一次,这样比较浪费资源,如果把eee换成“:1”这样的绑定变量形式,无论ddd后面是什么值,都不需要重复解析
如果你用数据仓库,一条大查询一跑几个小时,根本没必要做绑定变量,因为解析的消耗微乎其微,而且绑定变量对优化器判断执行路径也有负面影响。
如何应对黑客
黑客攻击的类型及拦截方式:
黑客可以采取多种不同的攻击方式部分或全部控制一个网站。一般来说,最常见和最危险的是SQL植入(injection)和跨站点脚本(XSS,cross-site scripting ) 。
SQL植入是一种在网络应用程序中植入恶意代码的技术,它利用数据库层面的安全漏洞以达到非法控制数据库目的。这种技术非常强大,它可以操纵网址(查询字符串)或其他任何形式(搜索,登录,电子邮件注册)以植入恶意代码。您可以在网络应用安全联盟(英文)中找到一些关于SQL植入的例子。
为避免此类黑客攻击的发生的确有法可循。举例来说,在前端界面和后端数据库之间增加一个“中间层”就是一种很好的做法。在PHP中,PDO(PHP Data Objects)扩展通常与参数(有时被称作placeholder或绑定变量)共同发生作用,而不是直接将用户输入做为命令语句。另一种极为简单的技术 是字符转义,通过这种方式,所有可以直接影响数据库结构的危险字符都可以被转义。例如,参数中每出现一个单引号〔 ‘ 〕必须代之以两个单引号〔 ’ ‘ 〕来形成一个有效的SQL字符串。这只是两种您可以采取的、最常见的用以改进网站安全并避免SQL植入的有效方式。您还可以在网上找到许多其他符合您需求的资源(编程语言,具体的Web应用程序等)。
下面我们要介绍的是跨站点脚本( XSS )技术 。跨站点脚本是一种通过利用网络应用程序层面的安全漏洞,在网页中植入恶意代码的技术。当网络应用程序处理通过用户输入获得的数据,并且在返回给最终用户前没有任何进一步的检查或验证时,这种攻击就可能发生。您可以在网络应用安全联盟(英文)中找到一些跨站点脚本的例子。
有许多办法可以确保网络应用程序不被这种技术侵犯。一些简便易行的方法包括:
剔除可以被插入到表单中的数据输入(例如,PHP中的strip tags功能);
利用数据编码,避免潜在恶意字符的直接植入(例如,PHP中的htmlspecialchars功能);
在数据输入和数据库端之间创建一个“层”,以避免应用程序代码被直接植入恶意字符。
一些有关CMSs安全的资源:
SQL植入和跨站点脚本只不过是黑客用来攻击和利用无辜网站的多种技术中的其中两种。作为一般的安全准则,在网络安全问题上特别是在使用第三方软件时,一直保持更新以确保您安装了最新版本的软件是非常重要的。许多围绕大型建站社区建设的网络应用程序都提供持续的支持和软件升级。
c#查询oracle数据库,绑定变量形式怎么做
会用ADO.NET执行这句SQL,然后返回数据结果吧?然后因为你的这句SQL只有一行一列的值,所以直接返回0行0列,或0行“COUNT”列就好,如下:
int count = Convert.ToInt32((dataset.Tables[0]).Rows[0][0].ToString());
或:
int count = Convert.ToInt32(datatable.Rows[0][0].ToString());
什么是SQL绑定变量,如何实现绑定变量
1. 认识绑定变量:
绑定变量是为了减少解析的,比如你有个语句这样
select aaa,bbb from ccc where ddd=eee;
如果经常通过改变eee这个谓词赋值来查询,像如下
select aaa,bbb from ccc where ddd=fff;
select aaa,bbb from ccc where ddd=ggg;
select aaa,bbb from ccc where ddd=hhh;
每条语句都要被数据库解析一次,这样比较浪费资源,如果把eee换成“:1”这样的绑定变量形式,无论ddd后面是什么值,都不需要重复解析
Java实现绑定变量的方法:
[java] view plaincopy
PreparedStatement pstmt = con.prepareStatement("UPDATE employees SET salay = ? WHERE id = ?");
pstmt.setBigDecimal(1, 15.00);
pstmt.setInt(2, 110592);
/result statmement: UPDATE employees SET salay = 15.00 WHERE id = 110592
pstmt.executeQuery();
假设要将id从1到10000的员工的工资都更新为150.00元,不使用绑定变量,则:
[java] view plaincopy
sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 1");
sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 2");
sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 3");
sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 4");
sql.executeQuery("UPDATE employees SET salay = 150.00 WHERE id = 10000");
使用绑定变量,则:
[java] view plaincopy
PreparedStatement pstmt;
for (id = 1; id 10000; id )
if (null == pstmt)
pstmt = con.prepareStatement("UPDATE employees SET salay = ? WHERE id = ?");
pstmt.setBigDecimal(1, 150.00);
pstmt.setInt(2, id);
pstmt.executeQuery();
二者区别在于,不用绑定变量,则相当于反复解析、执行了1w个sql语句。使用绑定变量,解析sql语句只用了一次,之后的9999次复用第一次生成的执行计划。显然,后者效率会更高一些。
2. 什么时候不应该/不必要使用绑定变量
a. 如果你用数据仓库,一条大查询一跑几个小时,根本没必要做绑定变量,因为解析的消耗微乎其微。
b. 变量对优化器产生执行计划有很重要的影响的时候:绑定变量被使用时,查询优化器会忽略其具体值,因此其预估的准确性远不如使用字面量值真实,尤其是在表存在数据倾斜(表上的数据非均匀分布)的列上会提供错误的执行计划。从而使得非高效的执行计划被使用。
3. 绑定变量在OceanBase中的实现
目前OceanBase中实现了绑定变量,目的主要是为了编程方便,而不是为了降低生成执行计划的代价。为什么呢?因为OceanBase中目前使用的是一种”静态执行计划“,无论什么Query,执行流程都一样。OB在前端代理ObConnector中实现绑定变量,将用户传入的变量进行to_string()操作,替代SQL语句中相应的部分,形成一个完整的SQL。然后这个SQL传递给MS,MS按照标准流程来解析和执行。相信不远的将来,OB将会实现真正意义上的绑定变量,让用户享受到绑定变量带来的好处。
数据库中,什么是绑定变量,有什么优缺点
绑定变量目的是减小数据库的解析的次数select
from
table
where
field=
:fld:fld这个叫绑定变量,即,数据库解析时用占位符,后再传值执行