您现在的位置是:网站首页> 新闻快讯> 软件使用 新闻快讯
pl sql(plsql美化sql在哪)
小玉2023-07-05【软件使用】
234人已围观
简介做过服务程序开发的人,一定会和数据库打交道,那么大部分的开发人员一定会用sql和数据库打交道,之前在还不太成熟的时候,普遍存在sql的注入的风险

pl sql(plsql美化sql在哪)
最后更新:2023-07-05 03:14:40
推荐指数:
做过服务程序开发的人,一定会和数据库打交道,那么大部分的开发人员一定会用sql和数据库打交道,之前在还不太成熟的时候,普遍存在sql的注入的风险,这会带来数据的泄露,sql注入中,有一种叫union联合注入,今天就简单讲讲什么是union联合注入。我们知道,使用sql查询中,可以使用union将多个sql查询语句进行连接,查询的结果就是多个sql查询的集合,那么如果存在sql注入点的话,就可以利用union来查询自己想要的数据。union的使用语法如下:selectxuanph1,xuanph2,xuanph3fromtable_xuanphunionselectxuanph4,xuanph5,xuanph6fromtable_xuanph;union的使用,有一个比较苛刻的限制的条件,就是要求前后的select语句中的字段的列数要相同,因此在注入前,需要知道列数,通常使用orderby语句进行获取,使用方法如下:xuanph'orderbyn#%其中n是数字,你可以先进行设置为某一个固定的值,比如为4,然后输入xuanph'orderby4#%,如果报错,则设置为3,直到没有报错为止,假设为2的时候没有报错,那么可以推测select的列数为2,那么构造union的语句如下:xuanph'unionselectuser(),database()fromtable_xuanph;就可以获取到当前的用户和数据表。以上是union的原理,谨记,不要随便使用上面的方法去试探任何的服务器,否则,后果自负。最近在使用YearningSQL审核平台时,遇到一个问题,配置利用pt-osc去修改大表,结果在SQL工单执行的时候,报如下错误,osc执行失败请检查相关设置是否正确/该表之前如进行过osckill操作请清除该表相关触发器及临时表等遗留数据。于是就去看Yearning工具的日志,将pt-online-schema-change的整个执行命令复制出来,在Yearning所在的服务器上执行,结果竟然也报错,isnotallowedtoconnecttothisMySQLserveratpt-online-schema-changeline2345,很是诡异,竟然说连接不上MySQL数据库。于是就查阅资料,发现是percona-toolkit-3版本的一个bug,当数据库默认端口不为3306时,--host=XXXXX--port=3308D=Yearning100,t=t_test这样写就报错连接不上MySQL数据库,而D=Yearning100,t=t_test,P=3308这样写就不会有问题。由于是Yearning平台内部调用的,没办法修改语法,于是降低percona-toolkit的版本到3.0.11,重新安装好之后,再测试,问题解决。当经历了无数的日日夜夜,朝九晚九,攻克了无数难关,终于将系统预定功能开发完成,通过测试,部署上线后。你是否会感觉志得意满,到达了人生巅峰,高唱无敌是多么寂寞。 现实情况是,如果你这个系统,业务没有做起来,没啥人用,huan则罢liao。如果有越来越多的人,持续使用。随着用户增多,业务数据增多,那系统一定会暴露一些性能问题。而对这些问题的优化解决,以及监测,往往需要比开发具体功能,更高更全面的技术素质及能力。 一、性能问题监控 锅叔云:性能问题是具有隐蔽性能,服务器硬件性能良好不等于系统服务性能良好。这么说可能经验欠缺的同学难于理解。不就是系统慢么,用户会告诉我们啊?我们有服务器监控啊,如果cpu,或者内存满了,会有监控报警啊? 首先,系统慢用户未必会告诉你,如果比你的竞品慢太多,用户会用脚投票。然后,如果你开发的系统在把硬件跑到瓶颈之前都快如闪电,请收下锅叔的膝盖-_-||。 常见的性能问题,往往是欠缺性能考虑引起的,响应巨慢的同时,硬件利用率可能5%不到,这类问题也是此次锅叔主要讨论的。 经验上来说,对于性能问题的监控预警是难于解决具体的性能问题的。实践中我们需要一些日常机制来筛查系统性能问题,避免病入膏肓。 数据库慢查询日志——是一个重要的监控途径,其中记录了耗时较长的数据库操作记录。可以通过手动或自动分析慢查询日志,筛查可能存在的性能问题,主流数据库都支持慢查询日志生成,具体的配置方式此处不做赘述。非统计类的数据操作通常应该在100ms以下。 接口性能监控——后台系统通常是通过服务接口向外提供服务的,前端页面或者移动设备是通过调用服务端接口来完成对应操作的。接口的粒度是大于数据库操作的,一个接口调用可能包含很多个数据库调用。接口性能更接近于用户体验,因为多数时候用户的一个操作动作会对应一个服务接口(如保存,确认)。在不存在慢查询的时候,接口性能可能也会不满足要求,可能的原因如,一个接口循环调用了1000次数据库操作,或者调用了一些第三方接口等。对接口的性能监测原理上就是用调用结束的时间减去进入的时间点计算总耗时,并把这个耗时记录下来,以便时候筛查。Spring的切片能力可以方便的实现该需求。非报表,导出类接口,锅叔认为应当在1秒内完成为佳。 消息队列——如果你的系统中使用到了类似消息队列的机制,对队列中排队的消息数,同样应当进行监测,消息如果发生了堆积,说明在这个阶段内,系统的整体消费能力已经不能满足输出要求了。 以上三个监控维度是互不重叠的,应该同时进行。 二、性能问题的定位 除了数据库慢查询日志可以明确提示具体SQL缓慢外,上面另外两种情况所能直接提示定位到的粒度都比较大,对应一个接口或者一段处理过程代码。 定位更细问题的具体方法也很容易想到,即分段输出各阶段的耗时。如对于一个100行的方法,可以在第30,60,100,分别计算并日志输出这3段执行耗费的时间。重复进行,就最终可以定位到将问题所在。 性能问题的定位需要有一些性能常识,所谓性能常识即,通常做一件事情需要完成的时间,不用很准确,但量级要清楚。比如一次数据库操作,一般在数十毫秒,与内存的交互在纳秒或者微秒间,与第三方系统的接口可能在数百毫秒到几秒之间。有了这些经验我们才能够对耗时是否合理有个基本判断。比如对于一个50毫秒的数据库操作,循环100次就是5秒,已经很慢了,可以考虑是不是可以合并成一次批量操作。 三、应用性能优化方法 合并远程调用——根据经验,实践中因为循环进行数据库操作,或对第三方系统接口进行循环调用,是引起性能问题的非常非常常见的原因。对于此类问题的优化方式通常就是优化调用的方式,使用批量操作。例如,如果需要去数据库中查询锅叔近一年的打卡记录,可以用准确日期,查询365次,也可以用时间范围一次查询出365条,后面的方法肯定比前面的快很多。如果方法比较复杂,冗长,可以从中抽取所需的公共数据,进行统一的批量查询取出,放入内存备用,会比哪里用到哪里查要快很多。同样写入,修改操作,也尽量批量进行。 使用缓存——对于访问频率较高的数据,可以在内存中存储,利用内存存取要快于硬盘很多的特性,来进行访问加速。常见的场景如各种计数——锅叔的文章有多少次浏览之类。 多线程并行——通过多线程把串行修改为并行。例如与设备通信查询状态,逐个查询和并行同时向设备查询,后者要快得多。现实中多数的操作耗时是在IO上,因此多线程方式可以有效提高性能,避免“空”等。多线程并行需要注意做好线程同步。 作者:锅叔原文链接:性能优化,实践浅谈-锅叔-博客园Nature:物质波干涉测量【背景及挑战】光的波粒二象性几乎是量子力学里面最广为人知的基本概念。物质波也是一种特殊波,与电磁波、水波等常规波不同,物质波的干涉非常难观察,因为它是附着在物质上,因此两个物质波要达到交叠并发生干涉那就必须得克服尺寸效应所带来的影响。光脉冲物质波干涉仪当今最精确的量子传感器之一,能够利用在光的吸收和发射过程中施加给原子的量化动量来分裂原子波,从而使它们同时穿过不同的空间路径,额外的动量则会使原子返回到空间中的同一点,从而干扰两个物质波。然而这些设备的精度都不够,其关键在于干涉仪内的两个量子轨迹叠加出现的相位信息编码。这个相位必须通过量子测量来估计,从而提取所需信息,并获得标准量子极限(SQL)。【最新突破】最近,来自科罗拉多大学物理系的JamesK.Thompson团队首次开发了一种新型的物质波干涉仪,该仪器能的干涉相位噪声在SQL之下,这一结果结合了量子力学最显著的两个特征:粒子可以同时出现在两个地方的概念以及不同粒子之间的纠缠。图1物质波干涉仪及实验原理示意图【研究要点】1)该仪器是由700个原子组成的腔量子电动力学系统中的物质波干涉仪,这些原子可在外部自由度中纠缠,在研究的系统中,每个单独的原子在重力作用下自由下落,并在与其他原子纠缠的期间同时穿过空间的两条路径;2)研究还探索了量子非破坏测量和腔介导自旋相互作用,用于产生压缩动量态,证实其直接观测灵敏度均低于标准量子极限,分别为和dB,研究者成功地将一个纠缠态注入到马赫-曾德尔光脉冲干涉仪中,且观测灵敏度为dB。图2表征在SQL之上的观测敏感性参考资料:Greve,G.P.,Luo,C.,Wu,B.etal.Entanglement-enhancedmatter-waveinterferometryinahigh-finessecavity.Nature610,472–477(2022).DOI:10.1038/s41586-022-05197-9https://doi.org/10.1038/s41586-022-05197-9【5000GIT类课程更新通知】近期会陆续更新如下课程,含课件+习题+源码,视频教程很清晰很全,这几天会陆续更新给大家:#python##编程语言#01课程介绍02Python基础(上)03python基础(中)04python基础(下)05python进阶06模块包和程序,Python系统,测验Pythonadv07面向对象编程08问答oo。生活的游戏09网络数据获取(爬虫实战)10正则匹配-正则表达式RegularExpression.树形模型..11数据库基础(上)12数据库基础(下)13课程:SQL数据分析及变更(上)14课程:SQL数据分析及变更(下)15课程:网站开发基础(上)16网站开发基础(中)17网站开发基础(下)18flask入门19flask搜索引擎(上)20烧瓶搜索引擎Python零基础10天进阶班课件这几天在使用uniapp编写一些前端登录窗体验证,后端WebApi使用.Net,本来可以使用string字符串的形式,传递参数,但考虑到后期开发,可能会有在移动端做一些Form表单数据录入及提交,比方说:下订单等信息,考虑到数据文本框可能比较多,哪么如果是这样的话,是否有一种更快捷的方式提交数据,对比了一下,决定使用Data:{"username":"用户","password":"密码"}使用Body数据结构,用类方法封装实体类,可能会好了一些,想到以后要反复重用代码,哪就先这样干吧!废话少说上代码:1、前端:uniapp前端有两个文本框,分别是用户框,密码框,点提交后请求代码如下:uni.request({url:serverUrl+'//api/registLogin/Post',//请求的服务器地址data:{"username":username,"password":password},method:"POST",success:(res)=>{if(res.statusCode==200)//请求如果200成功,否则失败{vardata=res.data;//获得数据后,就可以作一些判断,实现使用tab切换的api页面。uni.switchTab({url:"/pages/msg/more"});}2、后端数据接收方法publicObjectPost([FromBody]Datavalue)//用FromBody结构体接收{varMyData=value;stringcode=MyData.username;//获取传递参数值stringpwd=MyData.password;//获取传递参数值//这里查询,生产环境当然最好,要加入防sql注入编写习惯,这里是就不重述了stringstrSql="Selectusername',passwordFrom用户登录表WhereOperatorCode='"+code+"'AndPwd='"+pwd+"'";DataTabledt=newDataTable();dt=SqlClass.GetTable(strSql,"dt");if(dt.Rows.Count>0){ListuserList=TableToEntity(dt);//调用:returnuserList;//增加实体类对象}else{returnnull;}}3、实体类方法publicclassData{publicstringusername{get;set;}publicstringpassword{get;set;}//这里是针对用户登录表,有两列,实际开发中,如果你登录用户表有多列,你就一列写一个实体,这个看你自己个人设计爱好了。}4、//把Datatable数据集,转换为实体类对象的方法privatestaticListTableToEntity(DataTabledt)whereT:class,new(){Typetype=typeof(T);Listlist=newList();foreach(DataRowrowindt.Rows){PropertyInfo[]pArray=type.GetProperties();Tentity=newT();foreach(PropertyInfopinpArray){if(row[p.Name]isInt64){p.SetValue(entity,Convert.ToInt32(row[p.Name]),null);continue;}p.SetValue(entity,row[p.Name],null);}list.Add(entity);}returnlist;}
很赞哦! (0)
相关文章
文章评论
验证码: