• 关于

    数据库dblink

    的搜索结果

回答

dblink, 建立 dblink,如在A库 里面又本地 A表 B库 有B表, 在A库建一个 DBlink 直接连到该库,B@Dblink名字,insert   into   table a   select  from table b@Dblink名 。  如何建立 dblink--create database link Dblink名称(自己任意写)  connect to  username(连b库用户名) identitfied by password(连B库的密码) using ' 在tnsnames 配置连接B库的连接名'。######我用的而是mysql该如何建立dblink######同一台数据库服务器的话   数据库名.tableb   可以实现。不同服务器的话初步想法是做个同步表的脚本,公司虽然读写分离,暂时没有多服务器的需求######sharding-jdbc 之类的或许可以帮助你######http://huqiji.iteye.com/blog/2068613 mysql类似Oracle 的dblink实现。
kun坤 2020-05-31 18:19:49 0 浏览量 回答数 0

回答

Cause:由于大量使用dblink远程连接未正常释放所致,也可能是bug所致。 Solution:一,最好不要大量使用dblink方式实时远程取数据,有大概如下几个缺点:1,频繁对远程数据库创建连接,释放连接会有较大开销,特别是OLTP类数据库。2,此类远程dblink连接session,如本地session不退出或手动释放,此类session是不会及时自动释放的。大量耗用远程数据库资源。3,占用网络带宽4,触发bug,此类bug很多此类应用根绝实际需求可以用物化视图,触发器等方式替代.注:切忌使用dblink嵌套dblink的访问方式,性能会非常糟糕,而且不稳定。 二,使用ALTERSESSIONCLOSEDATABASELINKdblink_name;语句来手动关闭远程dblinksession.在使用此语句前,切忌先执行commit;否则报错ORA-02080或者不能达到预期效果
爱吃鱼的程序员 2020-06-23 00:21:51 0 浏览量 回答数 0

问题

oracle数据库dblink跨库查询报错询问 ?报错

AB两个服务器,在A服务器建立了链接B库的dblink,B库有6个表,只有两个表不能通过跨库查询,其他的表都可以实现跨库查询, 跨库查询语句如下: sele...
爱吃鱼的程序员 2020-06-23 00:21:36 0 浏览量 回答数 1

万券齐发助力企业上云,爆款产品低至2.2折起!

限量神券最高减1000,抢完即止!云服务器ECS新用户首购低至0.95折!

回答

详细解答可以参考官方帮助文档DTS在启动迁移之前,会进行前置预检查,本小节简单介绍Oracle->RDS For PPAS的预检查内容: 预检查项 检查内容 备注 源库连接性检查 检查DTS服务同Oracle实例的连通性 (1) 填写信息是否有误?如果填写信息有误,请修改后重新预检查(2) 检查Oracle是否开启监听端口 目的库连接性检查 检查DTS服务同目的RDS For PPAS实例的连通性 检查填写信息是否有误,如果有误请先修改后重新预检查 源库版本检查 检查Oracle实例的版本,DTS是否支持 DTS目前只支持10g,11g,12c三个版本 源库权限检查 检查Oracle实例访问账号的权限是否满足要求 如果权限不足,请参照上面的权限要求一节授权后,重新预检查 目的库权限检查 检查RDS For PPAS实例访问账号的权限是否满足要求 如果权限不足,请参照上面的权限要求一节授权后,重新预检查 同名对象存在性检查 检查待迁移对象在目标RDS For PPAS是否已经存在 如果检查失败,请将目标库中这些已经存在的对象删除后,重新进行预检查 源端同名对象存在性检查 检查待迁移对象中,要迁入目标同一个schema的对象是否同名 如果检查失败,可以参考 库表列映射 将重名对象进行重命名 源库日志模式检查 检查源库是否开启archive log 如果未开启,请启用后,重新预检查 约束完整性检查 检查待迁移对象依赖的父对象是否迁移 如果检查失败,那么可以修改迁移对象,同时迁移依赖的父对象后,重新预检查 DBLINK存在性检查 检查源库是否存在DBLINK 如果存在,那么需要修改迁移对象,不选择DBLINK 增量拓扑冲突检查 检查同一个迁移对象是否已经存在迁移链路 如果存在冲突链路,那么需要删除掉冲突链路后,重新预检查 字段类型检查 检查待迁移表的是否存在数据类型为long类型的字段 如果存在那么对应的表只能进行全量数据迁移,不能选择增量数据迁移 表是否存在主键或者唯一性非空索引检查 检查待迁移表是否包含主键或非空唯一键 如果存在那么对应的表只能进行全量数据迁移,不能选择增量数据迁移 补偿日志开启检查 检查是否开启supplemental_log 如果未开启,请启用后,重新预检查
2019-12-01 23:09:43 0 浏览量 回答数 0

回答

是oracle数据库dblink改了,造成的原因可能是你的dataguard出问题了,也可能是你在只读从库上执行了一些update,insert等语句。 提示明显的说了,数据已打开只读。 问一下你们的资深人士,问问数据库架构是什么。
爱吃鱼的程序员 2020-06-20 16:58:02 0 浏览量 回答数 0

回答

目前RDS不支持自定义数据类型,不支持DBlink;在采用前请考虑以上不足。另外你需要根据你的数据库类型选择对应的RDS版本;至于性能,根据你的描述建议选择内存2400M的数据库。
紫龙001 2019-12-02 01:24:41 0 浏览量 回答数 0

问题

oracle 使用dblink调用存储过程,报错! :报错

我在代码中通过dblink方式调用了A库的存储过程my_proc(?),这个存储过程参数是一个自定义类型。 代码提示报错:无效的名称模式: TEST001.REMIND_ARRAY_2D 这里的REMIND_ARR...
kun坤 2020-06-14 07:32:20 0 浏览量 回答数 1

问题

oracle 使用dblink调用存储过程,报错!?报错

我在代码中通过dblink方式调用了A库的存储过程my_proc(?),这个存储过程参数是一个自定义类型。 代码提示报错:无效的名称模式: TEST001.REMIND_ARRAY_2D 这里的REMIND_ARR...
爱吃鱼的程序员 2020-06-14 21:19:48 0 浏览量 回答数 1

问题

oracle 使用dblink调用存储过程,报错! - oracle报错

我在代码中通过dblink方式调用了A库的存储过程my_proc(?),这个存储过程参数是一个自定义类型。 代码提示报错:无效的名称模式: TEST001.REMIND_ARRAY_2D 这里的REMIND_ARR...
montos 2020-06-02 23:09:48 0 浏览量 回答数 1

问题

oracle 使用dblink调用存储过程,报错!-oracle报错

"<p style=""font-family:微软雅黑, Verdana, sans-serif, 宋体;font-size:13.333333969116211px;""> 我...
montos 2020-05-31 16:13:42 0 浏览量 回答数 1

问题

为什么通过定时任务来调用过程执行非常慢,会话一直卡在dblink的等待上,但是直接查询数据库链很快呢

本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。点击链接欢迎加入感兴趣的技术领域群。...
珍宝珠 2019-12-01 20:00:40 8 浏览量 回答数 0

问题

oracle创建dblink,测试一直报错。连接不上服务器?报错

我建的dblink,测试时候一直报 TNS :could not resolve the connect identifier specified  连不上啊 ,用plsql直接登录远程数据库是可以的 ...
爱吃鱼的程序员 2020-06-14 16:12:25 0 浏览量 回答数 1

回答

多数据库用例间 DBLINK 性能有优化方案? ------------------------- 回 64楼(rds-pd) 的帖子 这个很重要啊,请尽快。
小哈哈乖乖 2019-12-02 00:53:03 0 浏览量 回答数 0

回答

问题解决了:客户机上的using中的连接一定要记得重写,只有服务端的链接配置才能在dblink中引用,配置在oracle客户端的tnsnane.ora中的链接配置是不能在dblink中使用的 用户名和密码不要加''或者""create databaselinkydccs_link     connectto 用户名identifiedby 密码     using'(DESCRIPTION=  (ADDRESS_LIST=    (ADDRESS=(PROTOCOL=TCP)(HOST=11.11.11.11)(PORT=1521))  )  (CONNECT_DATA=    (SERVER=DEDICATED)    (SERVICE_NAME=test)  ) )'; 如果是在数据库主机上,使用tnaname.ora中配的引用就行了
爱吃鱼的程序员 2020-06-14 16:12:42 0 浏览量 回答数 0

回答

回 2楼(小猪猪) 的帖子 RDS可用区正在开发中,12月初就会大家见面,请密切关注我们的官网变动。 ------------------------- 回 3楼(小哈哈乖乖) 的帖子 您问的是多实例之间dblink功能吧,dblink功能目前RDS由于权限控制问题还无法支持到,我们会记录下需求,后面作为我们改进的方向。 ------------------------- 回 8楼(胜哥) 的帖子 从RDS的角度来说,RDS性能和RDS的内存,cpu,IOPS都有关系,如果网站的访问量很大,负载高,数据库的压力大,那么首先看下是不是sql写的不够好,控制台会有优化的建议可以参考下(索引,主键等),如果有问题可以做相应的优化,如果确实是内存规格不够用,cpu达到瓶颈,可以考虑升级内存规格来解决(内存越大对应的cpu处理能力也越大)。 关于内网速度也说一下,相同地域的ECS内网连RDS速度不会是瓶颈,绝大部分用户也都是这种连法。 ------------------------- 回 9楼(nizuzong) 的帖子 呵呵,您的不是RDS的问题吧,ECS问题可以到ECS论坛提问 ------------------------- 回 13楼(lxd5866) 的帖子 云数据库,自己看吧,官网有介绍。 ------------------------- 回 16楼(mahaidong) 的帖子 1.UDF权限目前没有支持计划,开放UDF对权限要求很高,涉及主机级别,安全风险很大。 2.建议可以用mysql的压缩特性compress对大字段进行压缩。建议也可以参考下此链接: http://hidba.org/?p=551 ------------------------- 回 17楼(wei2014) 的帖子 抱歉,控制台的优化我们在继续,我们记录下您的建议,新版控制台正在设计,年前会和大家见面。 ------------------------- 回 22楼(binfeng) 的帖子 抱歉,此功能确实困扰了一部分用户,当前我们实现了做切换内外网的时候可以保持域名不变,切换后就不需要再修改连接地址,内外网同时实现的问题我们已经在预研阶段,我们会尽快推进,努力早点实现。 ------------------------- 回 25楼(dfar2008) 的帖子 抱歉给你带来了困扰,数据库和账号个数的放开是我们近期的计划,预计15年Q1前就可以放开。 ------------------------- 回 26楼(耳朵哥) 的帖子 暂时还无好的办法。 ------------------------- 回 34楼(水中剑) 的帖子 1. 不会锁表。 2. 只读实例本身就是一个实例配置,只不过只提供读的权限,由于只读实例的生存周期可控,随时创建随时释放,所以只能采用按量付费的方式,即目前的按小时计费。 ------------------------- 回 37楼(chinaoc) 的帖子 您的需求我们记录下来,后面会进行评估的。 ------------------------- 回 43楼(会友运动网) 的帖子 RDS的数据是写多重备份的,可靠性是经过一定的算法得出,具体的参数不便透露。 ------------------------- 回 45楼(橘子) 的帖子 抱歉此问题给你带来的困扰,目前我们正在做调整,将实例规格的连接数放开,快的话12月份就会全线大幅上调连接数,让每个规格不再有连接数不够的问题,同时价格不会变化。 ------------------------- 回 53楼(浅小思) 的帖子 楼主关注我上面的回复,快的话12月份我们就可以全面大幅上调连接数的,价格会维持不变。 ------------------------- 回 50楼(hi50029130) 的帖子 RDS创建后由于有一些数据库必须的文件,如数据库元文件,ibdata等,这部分数据会占用500MB,另外上传过数据后也会产生部分日志文件会占用部分空间,是正常的情况。 ------------------------- 回 54楼(stanwei) 的帖子 这个需要在应用程序端做配置,读和写请求分发的不同的实例(我们只读实例也会提供一个连接地址)。 ------------------------- 回 55楼(mangowang) 的帖子 RDS底层默认就是主从的架构,不需要你再额外搭建从库,平时只有主实例在工作,备实例做高可用,主实例故障后就会切换到备库,我们的RDS(MySQL)和官方的是兼容的,您的数据库完全可以迁移上来,不会有兼容性问题。 ------------------------- 回 62楼(sttt) 的帖子 RDS默认就是HA 主备架构。 ------------------------- 回 58楼(因为爱) 的帖子 看到您的吐槽,我们深感压力,我们知道这个内外网不能同时存在的问题确实困扰了你,由于是内部和外部都要连RDS的情况,目前还没办法很好的解决,由于内外网共存会涉及底层架构的调整,此事我们也正在稳步推进中,后续我们推出安全链路模式的RDS,基于安全链路我们推出内外网同时存在,预计15年1月份左右。 ------------------------- 回 89楼(苦茶独酌) 的帖子 有支持的计划,计划15年上半年完成对PG的支持。 ------------------------- 回 67楼(ivytest) 的帖子 RDS不是在虚机上装的类似镜像的东西,RDS有一套自己的集群,系统,主备架构保证高可用,内存和磁盘空间在使用过程中都是可以随时升级的,IOPS每个规格对应的数据都不一样,当然对应的数值都是可以满足的,不存在缺斤少两。 ------------------------- 回 71楼(tewang) 的帖子 权限细化我们正在努力做,15年Q1会有新变化。 ------------------------- 回 61楼(meexun) 的帖子 楼主,1000万PV和用那个RDS没有必然关系,要看应用访问数据库的情况决定,光这些数据无法判断用何种配置RDS。 ------------------------- 回 100楼(小优信息) 的帖子 楼主,我们现在已经支持免费体验了,需要体验下吗,控制端的功能正在全力开发中呢。
rds-pd 2019-12-02 00:53:09 0 浏览量 回答数 0

回答

你错误了理解了异常处理机制.php早期版本根本就没有异常处理机制.异常的出现是跟反射同时出现的.之前的代码都是用错误处理函数来抛出错误等级.由错误处理函数接收之后加以分析处理.代码采用的更多是流水线式的结构.后来为了完善对于oo思想编程的实现,不断加入了异常机制,完善了接口,克隆,反射,以及多态特性.总之,php里用多态有点不伦不类,接口还马马虎虎.克隆在新的底层实现下就变的必不可少.由于对oo思想的跟进,后来有不断出现了命名空间.这个重要是为了实现闭包特性,延迟绑定.类的访问权限控制以及继承权限的控制.说多了.总之很多特性都是为了实现对oo思想的支持.其实没有oo,利用早期版本提供的特性一样可以写出符合需求的代码. zf2  echo1/0; 试试,能不能捕获回复<aclass='referer'target='_blank'>@leo108:求写法...回复<aclass='referer'target='_blank'>@liet:可以,set_exception_handler可以不用try,catch就throw一个异常么?兄台throw 专门抛出异常的, 没有被捕获和能不能抛出异常是两码事.我看框架里代码没有try,catch直接if判断了下就thrownew一个异常,我直接throw他就报错 兄台啊,别偷换概念。 框架里抛出的异常不用try..catch,直接就可以throw 说得好像异常要try..catch才能throw抛的一样。。抛是抛,捕获是捕获,两码子事干嘛扯到一起?本来就不应该在一起,我完全可以在A页面抛,B页面捕获。要是try..catch..throw在一起那才叫扯淡呢,那就是脱裤子放屁了。 异常抛出了就必须要捕获,但不是说异常抛出了就必须马上去捕获。好比吃完饭必须要拉屎(不拉难道全部消化?从皮肤排出来?),但不是说吃完饭就必须马上去拉屎,我可以稍后去。 core/lib/db/mysqli.class.php抛异常<preclass="brush:php;toolbar:true;auto-links:false;">publicfunctionconnect($config){$this->dbLink=mysqli_init();$this->dbLink->real_connect($config['host'],$config['login'],$config['password'],$config['database'],$config['port']?intval($config['port']):3306,'',MYSQLI_CLIENT_FOUND_ROWS);if(mysqli_connect_errno()){thrownewBaseException("数据库连接失败",1001);}if($config['charset']){$this->dbLink->query("SETNAMES'{$config['charset']}'");}return$this->dbLink;} <spanstyle="font-size:10pt;line-height:1.5;">/hi/index.php框架总入口,捕获异常 <preclass="brush:php;toolbar:true;auto-links:false;">publicfunctionrun(){try{$this->route();$this->Controll();}catch(BaseException$e){$e->errorMessage();}}比喻很形象啊 <spanstyle="font-family:微软雅黑,Verdana,sans-serif,宋体;font-size:15px;line-height:22px;background-color:#FFFFFF;">try..catch是不受用户控制的系统异常时后自动抛出,<spanstyle="font-family:微软雅黑,Verdana,sans-serif,宋体;font-size:15px;line-height:22px;background-color:#FFFFFF;">throw想抛就抛即使程序没有异常,都可以用<spanstyle="color:#FF6600;font-family:微软雅黑,Verdana,sans-serif,宋体;line-height:normal;background-color:#FFFFFF;">set_exception_handler指定的函数处理,这样可以更好的处理程序的未知问题;; <spanstyle="font-family:微软雅黑,Verdana,sans-serif,宋体;font-size:15px;line-height:22px;background-color:#FFFFFF;">比如说某个核心参数变量的值只能为‘a或者b,但是不知道什么原因变成c了这时候程序不能处理必须提前终止程序try就无能为力了。这时候代码可能没有任何问题,但是从逻辑上来说会出现不可控因素一般就手动<spanstyle="font-family:微软雅黑,Verdana,sans-serif,宋体;font-size:16px;line-height:22px;background-color:#FFFFFF;">throw <spanstyle="line-height:22px;">
爱吃鱼的程序员 2020-06-22 13:58:12 0 浏览量 回答数 0

问题

快速入门PPAS版-常用管理函数

RDS 上 PPAS 由于没有对外开放超级用户,用户无法像线下使用 PPAS 那样使用 superuser 账号管理数据库对象。为此,我们推出了一组管理函数,帮助用户顺利使用云上的 PPAS 各种功...
李沃晟 2019-12-01 21:38:18 602 浏览量 回答数 0

回答

如果小项目,业务逻辑和查询不是很复杂的话,直接上Spring data JPA吧,基本CRUD都提供了,稍微复杂的可以自己写JPQL。如果数据量比较大,查询逻辑也很复杂,用JdbcTemplate,方便后期维护。MyBatis还是不要用了,那玩意很烦,不如直接用JdbcTemplate。JFinal我没用过,不发表意见。######回复 @一书生 : 没有没有缺点的银弹。绝大多数OLTP系统,JPA都是合格的。如果写不好,绝大多数都是开发人员设计水平和编码水平的问题,这种情况下,换了纯JDBC有时候更糟。######回复 @魔力猫 : 其实我的意思是JPA有一定的局限性,比如我之前碰到一个问题:就是使用UNION关键字将两个结果集组装到一起的时候,Hibernate提供的JPA实现就不行了,EclipseLink的JPA实现却是可以。所以它有好的一方面就是省事,但也有一定的局限性。######OLTP查询如果非常复杂,那么表设计BUG是肯定的。######用 jdbctemplate 挺好的,就是java没有heredoc 写大段sql不方便 如果模板有一种支持动态参数的语法,其实用模板来处理sql最方便 ######@yak 可没你赚的多呀,哈哈哈######回复 @xfblue : 虚幻中的高层光明人士,请问你的脑容量多大?,这么光明的高层人士,还花工夫专门跟小杂毛较劲,你的时薪一小时多少钱?######@yak 现实中的底层阴暗人士,请问你的心理阴影多大面积的?哈哈哈,还拿分享代码跟我说事,小杂毛一枚,哈哈哈######回复 @xfblue : 心理光明的大杂种,你看,这我也会哦,没有任何技术含量,说不上谁比谁强,只能说明你逻辑比较差,这不是你个杂种的错,是根本不开逻辑课的原因,但是写代码没有逻辑就说不过去,怪不得你分享的代码为0######@yak 比你强,心理阴暗的小杂种######我自己写了个jdbctemplate拼接sql###### 引用来自“Eric_林”的评论mybatis 轻量 强烈不建议 mybatis,非常非常繁琐######回复 @繁华似水 : 正是有了属于Google的名号,各种G粉蜂拥而至.######回复 @eechen : mybatis 到真不是google的开头的,开始是ibatis,后来被谷歌收购了还是怎么得,变成google团队了。这个锅不能乱扣。######回复 @首席撸出血 : sborm,minidao 这些都是典型的基于jdbcTemplate的薄封装######给个git地址,我去学习一下,一直想用JdbcTemplate做ORM######回复 @luokery : 基于jdbcTemplate 做一个简单ORM######mybaties ######要看你系统是什么样的。建议无特别需求,OLTP系统还是用官方的标准,JPA。 ######mybatis不错######mybatis 轻量###### 引用来自“魔力猫”的评论要看你系统是什么样的。建议无特别需求,OLTP系统还是用官方的标准,JPA。 JPA+1###### 现在ORM 用的是 JPA 标准API 底层实现你可以配置任意实现JPA 标准API的框架如 Hibernate,eclipse-link,open-jpa http://www.oracle.com/technetwork/java/javaee/tech/persistence-jsp-140049.html 整合他们肯定是spring-data-jpa 最方便 你只需要写接口 传@query 即可 大部分CRUD 方法他基本接口CrudRepository都自带了 spring-data-jpa 提供若干基本接口 你可以按需继承即可 http://projects.spring.io/spring-data-jpa/ 就跟当初hibernate 指定DB 方言一样 你使用JPA 标准api开发 后台orm实现配置你需要用的orm实现即可 比如这就是指定JPA 实现用的是eclipselink  <bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect" />  从java7 开始 orm mq cache 等框架领域陆续JAVA 都在推出一系列标准API 来统一各个框架层 ###### @抢小孩糖吃 你用spring 的话可以看看 AbstractRoutingDataSource 这是SPRING 提供的路由数据源 你只需要实现具体切换数据源 设置数据源 代码即可 特别简单好用,还可以结合AOP使用######以key做搜索数据源注册名称、以value做数据源对象存放。定期扫描是否有新数据源需要注册,jdbctemplate可以直接set,拿来使用。主要我需求不同库的相同名称表是不一样的数据结构######回复 @抢小孩糖吃 : 不知道你是怎么个跨库法。######非常感谢,回去研究下。我自己写了个多数据源动态扫描,加上jdbctemplate,还是蛮好用的。当然JPA作为标准,还是需要实践的######回复 @抢小孩糖吃 : 你指的跨库是一个SQL 语句的跨库 还是若干个SQL 语句的跨库?一个SQL 语句跨库 用比如ORACLE DBLINK table@DBID 那就只能写原生SQL 语句了 JPA 支持原生SQL . 多个SQL 语句对应不同的库 用SPRING AbstractRoutingDataSource 路由 一句代码 setDbSource(dbid)即可实现DB 切换
kun坤 2020-06-15 11:08:21 0 浏览量 回答数 0

问题

如何建立基于RDS PostgreSQL的备库

用户在阿里云购买了RDS PostgreSQL,如何在自己的机房或者ECS上建立备库?关于如何构建逻辑备库,在我以前的文章有详细的讲解,所谓逻辑备库,是可以跨版本...
云栖大讲堂 2019-12-01 21:32:46 2301 浏览量 回答数 0

问题

常用管理函数

RDS 上 PPAS 由于没有对外开放超级用户,用户无法像线下使用 PPAS 那样使用 superuser 账号管理数据库对象。为此,我们推出了一组管理函数,帮助用户顺利使用云上的 PPAS 各种功...
云栖大讲堂 2019-12-01 21:37:49 966 浏览量 回答数 0

回答

您面临多种已知 SQL攻击的风险,包括您提到的 SQL注入:是的!Mysql_Escape_String可能仍然使您容易受到SQL注入的影响,具体取决于您在查询中使用PHP变量的位置。 考虑一下: $sql = "SELECT number FROM PhoneNumbers " . "WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value); 这样可以安全可靠地逃脱吗?没有!为什么?因为黑客很可能仍然可以这样做: 在我之后重复: mysql_real_escape_string()仅用于转义变量数据,而不是表名,列名,尤其是LIMIT字段。 LIKE漏洞:LIKE“ $ data%”,其中$ data可能是“%”,它将返回所有记录...这很可能是安全漏洞...只想像一下信用卡最后四位的查找。糟糕!现在,黑客可能会收到您系统中的每个信用卡号!(顺便说一句:几乎不建议存储完整的信用卡!) 字符集漏洞:无论仇恨者怎么说,Internet Explorer 在2011年仍然容易受到字符集漏洞的攻击,也就是说,如果您正确地设计了HTML页面,就相当于 !这些攻击非常讨厌,因为它们给黑客提供了与直接SQL注入一样多的控制权:例如完全攻击。 这是一些示例代码来演示所有这些: // Contains class DBConfig; database information. require_once('../.dbcreds'); $dblink = mysql_connect(DBConfig::$host, DBConfig::$user, DBConfig::$pass); mysql_select_db(DBConfig::$db); //print_r($argv); $sql = sprintf("SELECT url FROM GrabbedURLs WHERE %s LIKE '%s%%' LIMIT %s", mysql_real_escape_string($argv[1]), mysql_real_escape_string($argv[2]), mysql_real_escape_string($argv[3])); echo "SQL: $sql\n"; $qq = mysql_query($sql); while (($data = mysql_fetch_array($qq))) { print_r($data); } 这是传递各种输入时此代码的结果: $ php sql_exploits.php url http://www.reddit.com id SQL generated: SELECT url FROM GrabbedURLs WHERE url LIKE 'http://www.reddit.com%' ORDER BY id; Returns: Just URLs beginning w/ "http://www.reddit.com" $ php sql_exploits.php url % id SQL generated: SELECT url FROM GrabbedURLs WHERE url LIKE '%%' ORDER BY id; Results: Returns every result Not what you programmed, ergo an exploit -- $ PHP sql_exploits.php 1 = 1 ' http://www.reddit.com '身份证结果:返回每列和每个结果。 然后有一些非常讨厌的LIMIT漏洞: $ php sql_exploits.php url 'http://www.reddit.com' "UNION SELECT name FROM CachedDomains" Generated SQL: SELECT url FROM GrabbedURLs WHERE url LIKE 'http://reddit.com%' LIMIT 1 UNION SELECT name FROM CachedDomains; Returns: An entirely unexpected, potentially (probably) unauthorized query from another, completely different table. 无论您是否了解攻击中的SQL,都是不明智的。这表明,即使是最不成熟的黑客也很容易绕过mysql_real_escape_string()。那是因为它是一种反应式防御机制。它仅修复数据库中非常有限且已知的漏洞。 所有转义都永远不足以保护数据库。实际上,您可以显式地对每个已知的漏洞进行反应,并且将来,您的代码很可能会受到将来发现的攻击的攻击。 适当且唯一(实际上)的防御是一种主动:使用准备好的语句。对准备好的语句的设计要格外小心,以便仅执行有效的和已编程的SQL。这意味着,如果正确完成,则会大大降低执行意外SQL的可能性。 从理论上讲,可以很好地实现的准备好的语句将不受所有已知和未知的攻击的影响,因为它们是SERVER SIDE技术,由DATABASE SERVERS THEMSELVES和与编程语言接口的库处理。因此,始终保证您会受到最低限度的保护,免受任何已知的黑客攻击。 而且代码更少: $pdo = new PDO($dsn); $column = 'url'; $value = 'http://www.stackoverflow.com/'; $limit = 1; $validColumns = array('url', 'last_fetched'); // Make sure to validate whether $column is a valid search parameter. // Default to 'id' if it's an invalid column. if (!in_array($column, $validColumns) { $column = 'id'; } $statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' . 'WHERE ' . $column . '=? ' . 'LIMIT ' . intval($limit)); $statement->execute(array($value)); while (($data = $statement->fetch())) { } 现在不是那么难吗?而且它的代码减少了百分之四十七(195个字符(PDO)对375个字符(mysql_),这就是我所说的“充满胜利”。来源:stack overflow
保持可爱mmm 2020-05-13 11:54:06 0 浏览量 回答数 0

云产品推荐

上海奇点人才服务相关的云产品 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 阿里云AIoT