等保测评:SQLServer操作超时

一、说明

本文说的是等级保护1.0中SQLServer数据库操作超时的内容,实际在SQLServer中有很多种超时选项,很容易将其混为一谈,本文将尽力将之说清楚。

二、操作超时的意义

操作超时在sqlserver数据库中可能包含好几个意思:

2.1. 客户端连接数据库时的连接超时时间

就是指在客户端连接数据库时,如果在限定时间内数据库没有回应,则返回失败的结果,其中的时间。

值得注意的是,此项是由客户端来指定而非数据库,更具体的来说,是在数据库连接字符串中,以C#为例子:

server=.;database=myDB;User ID=sa;Password=password;Connect Timeout=500

复制

其中的Connect Timeout即为连接超时时间,单位为秒。也就是说,连接超时时间不仅是由客户端指定,而且还具体到某次连接当中,很简单,如果客户端下次发来的连接字符串把Connect Timeout的值改了,自然这一次的连接超时时间也就改了。所以,这里和主机的超时是有些不一样的,主机的超时是在主机中进行设置(无论linux还是windows),由主机决定而不是连接主机的终端决定。

通常我们用SQL Server Management Studio来管理sqlserver数据库,其本质就是一个可以连接数据库的软件而已。

它的原理大概应该是这样:

让用户选择好验证方式(windows验证还是sqlserver验证),输入用户名和口令(如果是sqlserver验证的话),然后你自己通过用户的操作生成相应的连接字符串,连接上数据库,并将此连接字符串进行保存。

成功后保存用户的输入(如用户名和口令)在代码中,如用户进行其他查询(通过点击或者输入sql语句),再使用先前保存的连接字符串,再和数据库连接一次,并执行相应的命令。因为不大可能从头到尾就用一个连接来搞定,所以应该是每执行一次操作就连接一次,只不过除第一次连接(登陆)时需要用户进行输入用户名和口令,其余的连接用户就不需要再次输入了。

这个过程我相信只要是编写过和数据库有交互的软件的人,都能看明白的。

好,那么SQL Server Management Studio有没有地方可以设置连接超时时间呢?

有,就是在登录界面中,而且还能直接手写连接字符串:

等保测评:SQLServer操作超时_第1张图片

等保测评:SQLServer操作超时_第2张图片

2.2. 客户端执行某项sql语句的超时时间

连接数据库后,对数据库进行某项操作(查询、修改、删除、插入),如果在限定时间内没有返回结果,则此次操作失败并中断连接,其中的时间。和连接超时差不多,也是由连接数据库的客户端进行指定,以C#为例子的话,是在代码中对SqlCommand对象的CommandTimeout属性进行设置。

而在SQL Server Management Studio中有两个地方可以进行设置:

登陆界面中 注意,这个是全局设置,估计会用一个全局变量将执行超时值存储起来,每次在SQL Server Management Studio中执行sql语句时,会使用该全局变量进行设置。

每次新建查询后的查询选项

点击新建查询后,会新建一个查询,该查询的执行超时值会使用全局变量的执行超时值进行初始化,当然,你也可以自己再进行改动,改动后仅对这个查询有效。

等保测评:SQLServer操作超时_第3张图片

等保测评:SQLServer操作超时_第4张图片

等保测评:SQLServer操作超时_第5张图片

2.3. 数据库连接远程数据库的超时时间

这里说的是remote login timeout,也就是初级教程中让我们查的值:

等保测评:SQLServer操作超时_第6张图片

这个值是什么意思呢?

我们对sqlserver数据库执行sql语句如查询语句,往往是对一个数据源(数据库)进行查询,而当我们涉及到另一个远程数据源(数据库)的时候,就需要对远程数据源进行连接(登陆),而我们可以通过链接服务器实现这个功能。

通过链接服务器,SQL Server 数据库引擎 和 Azure SQL 数据库托管实例可从远程数据源中读取数据,并针对 SQL Server 实例之外的 OLE DB 数据源等远程数据库服务器执行命令。

在msdn中,remote login timeout的说明如下:

remote login timeout 选项指定从登录远程服务器失败返回前等待的秒数。例如,如果您尝试登录到一个远程服务器而该服务器已关闭, remote login timeout 帮助确保您在计算机停止登录尝试前不必无限期地等待下去。此选项的默认值为 10 秒。如果该值为 0,则允许无限期等待。

比如类似语句就会使用链接服务器:

SELECT * FROM [WIN-CGQ89NM7L8J,15478].master.sys.objects

复制

remote login timeout的意思是指你现在连接的这个数据库,它去连接远程数据源时,相应的连接超时时间。也就是说,这里并不是对SQL Server Management Studio这个客户端软件进行设置,而是对你现在连接的这个sqlserver数据库本身进行设置。

所以我们要进行区分,同样是在SQL Server Management Studio上进行一些设置,有些是对这个软件本身的一些项进行设置(如连接超时值等),而有些则是对你连接的这个数据库的一些项进行设置(如remote login timeout)。

我们既可以通过sql语句对remote login timeout进行设置,也可以在SQL Server Management Studio界面中进行设置:

这两者是等价的,或者说,界面中的远程登录超时值本来就是从数据库中查出来的。

到这里我们可以知道,这个值其实并不符合初级教程中的说明,从描述上看,初级教程是希望对SQL Server Management Studio的空闲时间进行限制,就是长时间不操作SQL Server Management Studio后,SQL Server Management Studio会让你重新输入用户名和口令或者自动退出的功能。

2.4. 数据库的远程执行超时时间

也就是remote query timeout,和remote login timeout差不多一个意思:

remote query timeout 选项指定在 SQL Server 超时之前远程操作可以持续的时间(秒)。此选项的默认值是 600,即允许等待 10 分钟。

查询方法也有两种(sql语句和图形界面):

sp_configure 'remote query timeout'

复制

等保测评:SQLServer操作超时_第7张图片

2.5. 某连接的空闲超时时间

当某连接的空闲时间超过一定限制时将其断开,但是sqlserver数据库本身没有这种设置项,SQL Server Management Studio对自己的某个连接也没有这种设置项。要实现这个功能,需要自己写一个定时任务来解决(来源于网上):

DECLARE @sql NVARCHAR(MAX)
SET @sql=''
SELECT @sql='kill '+LTRIM(spid)+';' FROM sys.sysprocesses AS s
    WHERE s.spid>50                                --不是系统进程
    AND s.spid<>@@SPID                            --不是当前进程
    AND s.last_batch 
  

复制

不过我感觉还是有点问题,last_batch能不能代表最后执行操作的时间,还未能确认。

2.6. SQL Server Management Studio的空闲超时时间

这个其实就是初级教程希望达到的一个目的。

每次SQL Server Management Studio对数据库执行操作,比如你新建一个查询,其本质就是新连接了数据库一次。当然可能SQL Server Management Studio会在某些地方连上数据库就不断开了,一直使用这个连接。但更大概率应该是用完就断,用的时候再连(具体我也不清楚,因为我不知道它代码里怎么实现的),所以连接的空闲超时时间的意义其实并不很大。

而长时间不操作使得SQL Server Management Studio自动退出或者让你重新输入用户名和口令这种设置,应该是没有的,至少我没找到这种选项。这个设置和数据库其实没有任何关系,就是看SQL Server Management Studio本身有没有提供这种配置项而已。

所以,如果非要实现这个功能的话,其实也可以。

一个方法是通过编写SQL Server Management Studio的插件,说不准可以实现相关功能。另一个就是不用SQL Server Management Studio管理sqlserver,你自己编写一款类似的软件,然后自己加上这个功能。

       网络安全入门学习路线

其实入门网络安全要学的东西不算多,也就是网络基础+操作系统+中间件+数据库,四个流程下来就差不多了。

1.网络安全法和了解电脑基础

其中包括操作系统Windows基础和Linux基础,标记语言HTML基础和代码JS基础,以及网络基础、数据库基础和虚拟机使用等...

别被这些看上去很多的东西给吓到了,其实都是很简单的基础知识,同学们看完基本上都能掌握。计算机专业的同学都应该接触了解过,这部分可以直接略过。没学过的同学也不要慌,可以去B站搜索相关视频,你搜关键词网络安全工程师会出现很多相关的视频教程,我粗略的看了一下,排名第一的视频就讲的很详细。 当然你也可以看下面这个视频教程仅展示部分截图: 学到http和https抓包后能读懂它在说什么就行。

2.网络基础和编程语言

3.入手Web安全

web是对外开放的,自然成了的重点关照对象,有事没事就来入侵一波,你说不管能行吗! 想学好Web安全,咱首先得先弄清web是怎么搭建的,知道它的构造才能精准打击。所以web前端和web后端的知识多少要了解点,然后再学点python,起码得看懂部分代码吧。

最后网站开发知识多少也要了解点,不过别紧张,只是学习基础知识。

等你用几周的时间学完这些,基本上算是具备了入门合格渗透工程师的资格,记得上述的重点要重点关注哦! 再就是,要正式进入web安全领域,得学会web渗透,OWASP TOP 10等常见Web漏洞原理与利用方式需要掌握,像SQL注入/XSS跨站脚本攻击/Webshell木马编写/命令执行等。

这个过程并不枯燥,一边打怪刷级一边成长岂不美哉,每个攻击手段都能让你玩得不亦乐乎,而且总有更猥琐的方法等着你去实践。

学完web渗透还不算完,还得掌握相关系统层面漏洞,像ms17-010永恒之蓝等各种微软ms漏洞,所以要学习后渗透。可能到这里大家已经不知所云了,不过不要紧,等你学会了web渗透再来看会发现很简单。

其实学会了这几步,你就正式从新手小白晋升为入门学员了,真的不算难,你上你也行。

4.安全体系

不过我们这个水平也就算个渗透测试工程师,也就只能做个基础的安全服务,而这个领域还有很多业务,像攻防演练、等保测评、风险评估等,我们的能力根本不够看。

所以想要成为一名合格的网络工程师,想要拿到安全公司的offer,还得再掌握更多的网络安全知识,能力再更上一层楼才行。即便以后进入企业,也需要学习很多新知识,不充实自己的技能就会被淘汰。

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

尾言

因为入门学习阶段知识点比较杂,所以我讲得比较笼统,最后联合CSDN整理了一套【282G】网络安全从入门到精通资料包,需要的小伙伴可以点击链接领取哦! 网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!icon-default.png?t=N176https://mp.weixin.qq.com/s/BWb9OzaB-gVGVpkm161PMw

你可能感兴趣的:(sqlserver,数据库,sql)