扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Microsoft Network Monitor
创新互联主要从事成都网站建设、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务平邑,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575
这是微软提供的网络抓包工具
虽然它是微软提供的,但所有的协议parser解析代码全部都是开源的,采用其支持的特有脚本语言编写,易理解、易扩展;
它自带协议parser比较全面,同时有一个开源社区提供持续支持;
另外,它也提供API帮助我们开发自己的网络抓包、协议分析工具。
针对TDS协议解析需求:
Network Monitor自带TDS协议解析器和UI比较友好
Network Monitor自带TDS协议解析器在解析和结果展示方面更全面,以下是一个画面片段,显示了一个SQL Batch包。
先了解一下SQLSERVER的加密阶段
一共有两个阶段
在认证阶段,SQLSERVER会使用自生成的自签名证书,加密客户端发过来的登陆用户名和密码
在数据传输阶段,如果不使用证书,那么数据是使用明文在网络上进行传送的
大家可以看一下这篇文章:
SQL Server 连接加密 (1) -- SQL Server connection encyption
网上有很多制作证书的教程,但是制作证书都比较麻烦,客户端和服务器端都要弄很多东西。
详细制作证书的过程可以参考园子里的这篇文章:
在SQL Server 2005 中开启SSL(图文结合)
当然这篇文章不是讲解这个network monitor抓包工具的,所以轻轻带过就算了
那么,不制作证书怎么加密传输的数据啊????
答案就是:同样使用在认证阶段的自生成的自签名证书
详细步骤:
步骤1:在SQLSERVER服务器端这边设置强行加密
步骤2:重启SQLSERVER,只有重启SQLSERVER设置才能生效
步骤3:打开network monitor,新建一个capture
步骤4:启动capture,开始捕获
步骤5:在客户端这边连上服务器端的SQLSERVER,然后你会在network monitor里的看到SSMS这个进程已经出现在Network Conversations窗口
步骤6:选中他,你会在Frame Summary窗口看到帧信息
步骤7:如果你在服务器端开启了“强行加密”,那么收到的数据包都会是加密的
大家在Protocol Name这一栏看到的是TLS协议,而不会是TDS协议
步骤8:查看帧数据
步骤9:如果没有加密的明文数据,network monitor就能够查看出来,并且Protocol Name这一栏显示的是TDS协议,因为数据包并没有使用TLS协议进行封装
TIPS:当关闭了SSMS的查询窗口之后,连接还是存在的
很多人会问,关闭了连接,怎么连接还存在,客户端为什么还会跟服务器端进行通信?????
实际上,这个是客户端的连接池机制,客户端不断发送keep alive数据包给服务器,下次有同样的连接进行重用了,不需要再进行三次握手o(∩_∩)o
总结
本人介绍了不使用制作证书的方式来对传输的数据进行加密的方法,实际上设置客户端而不设置服务器端也是可以的
不过设置客户端比较麻烦,还需要在连接字符串里加上encrypt属性设置为Yes
设置服务器端和设置客户端的加密的区别
服务器端:所有的连接都是加密的
客户端:只是设置了加密的那个连接是加密的,其他没有设置加密的连接依然是明文传输数据
当然,使用SQLSERVER自生成的证书安全性是不及自己制作的证书的安全性高!!
相关连接:
加密与 SQL Server 的连接
使用自签名证书加密的 SSL 连接不提供强安全性。它们容易在传输中途受到攻击。在生产环境中或在连接到 Internet 的服务器上,不应依赖使用自签名证书的 SSL。
始终要对客户端应用程序与 SQL Server
连接时传输的凭据(在登录数据包中)进行加密。SQL Server
将使用可信证书颁发机构颁发的证书(如果可用)。如果未安装可信证书,则在启动实例时 SQL Server
将生成自签名证书,并使用自签名证书对凭据进行加密。自签名证书有助于提高安全性,但它不提供针对通过服务器进行的身份欺骗的保护。如果使用自签名证书,
并且 ForceEncryption 选项的值设置为“是”,则将使用自签名证书对通过网络在 SQL Server
和客户端应用程序之间传输的所有数据进行加密
定期备份SQL数据库是必须的。 我们已经覆盖的方式就可以轻松备份您的所有SQL Server数据库到本地硬盘中,但这并不能防止驱动器和/或系统故障。 作为针对此类灾难的额外保护层,您可以在网络共享上复制或直接创建备份。
在本地备份,然后复制到网络共享
完成此任务的首选和最直接的方法是简单地创建数据库的本地备份,然后将相应的备份文件复制到网络共享。您可以通过创建如下所示的批处理脚本来完成此操作:
SET LocalFolder = C:Program Files Microsoft SQL ServerMSSQL.1MSSQLBackup
SqlCmd -E -Q“备份数据库MyDB到磁盘=%LocalFolder%MyDB.bak”
XCopy“%LocalFolder%MyDB.bak”“\ 192.168.16.55BackupDatabases”/ Z / V
DEL“%LocalFolder%MyDB.bak”
此脚本执行以下操作(逐行):
将变量设置为本地SQL备份目录。
创建MyDB的SQL备份(使用Windows身份验证)到本地SQL备份目录。
将本地备份文件复制到网络共享。
删除本地备份文件。
同样,这是首选方法,因为它的工作原理和备份失败的可能性是最小的,因为备份是在本地磁盘上创建。 但是,如果没有足够的磁盘空间来存储备份文件的本地副本,则此操作将失败。 在这种情况下,您需要添加额外的磁盘空间或直接备份到网络共享。
直接备份到网络共享
通常,当您尝试使用以下命令直接创建备份到网络共享时:
SqlCmd -E -Q“备份数据库MyDB到磁盘=\ 192.168.16.55BackupDatabasesMyDB.bak”
你很可能会得到一个错误的行:
消息3201,级别16,状态1,服务器JF,行1
无法打开备份设备\ 192.168.16.55BackupDatabasesMyDB.bak。 操作系统错误5(访问被拒绝。)。
消息3013,级别16,状态1,服务器JF,第1行
BACKUP DATABASE异常终止。
尽管使用Windows身份验证(-E开关)和Windows帐户作为通过Windows资源管理器访问和复制文件到共享的能力运行SQL备份命令,仍会出现此错误。
此操作失败的原因是SQL命令在SQL Server服务运行的帐户的边界内执行。 当您在计算机上查看服务列表时,很可能您将看到运行为(登录为)列的SQL Server服务本地系统或网络服务,它们是没有网络访问权限的系统帐户。
在我们的系统上,网络共享命令的备份失败,因为我们有SQL Server服务作为本地系统运行,再也无法获得任何网络资源。
为了允许SQL直接备份到网络共享,我们必须将SQL Server服务作为可访问网络资源的本地帐户运行。
编辑SQL Server服务的属性,并在“登录”选项卡上将服务配置为作为具有网络访问权限的备用帐户运行。
单击“确定”后,您将收到一条提示,指示在重新启动服务之后,设置才会生效。
重新启动服务。
服务列表现在应显示SQL Server服务正在作为您配置的帐户运行。
现在当您运行命令直接备份到网络共享:
SqlCmd -E -Q“备份数据库MyDB到磁盘=\ 192.168.16.55BackupDatabasesMyDB.bak”
您应该会看到一个成功消息:
处理数据库MyDB的152页,文件1上的文件MyDB。
为数据库MyDB处理2页,文件1上的文件MyDB_log。
BACKUP DATABASE在0.503秒(2.493 MB /秒)中成功处理了154页。
使用备份文件现在在网络共享目录:
网络共享注意事项请务必注意,备份命令希望能够直接连接到网络共享,而不会提示您输入凭据。 您配置要运行的SQL Server服务的帐户必须与网络共享具有可信连接,其中相应的凭据允许访问,否则可能会发生以下错误:
消息3201,级别16,状态1,服务器JF,行1
无法打开备份设备\ 192.168.16.55BackupDatabasesMyDB.bak。 操作系统错误1326(登录失败:未知用户名或密码错误。)。
消息3013,级别16,状态1,服务器JF,第1行
BACKUP DATABASE异常终止。
此错误表示网络共享不接受帐户的用户名和密码,并且命令失败。
另一个要记住的问题是备份直接执行到网络资源,因此网络连接中的任何打嗝可能会导致您的备份失败。 因此,您只应该备份到稳定的网络位置(即可能不是VPN)。
安全隐患
如前所述,使用在本地备份然后复制到网络共享的方法是首选,因为它允许您将SQL服务作为仅具有本地系统访问权限的帐户运行。
通过将服务作为备用帐户运行,您打开了潜在的安全问题的大门。 例如,恶意SQL脚本可以在备用帐户下执行并攻击网络资源。 此外,对相应帐户(密码更改/到期或帐户的删除/禁用)的任何更改将导致SQL Server服务无法启动。
如果您使用备用帐户运行SQL Server实例,请务必记住这些要点。 如果采取适当的预防措施,则这些不显示阻止程序,则应考虑添加额外的硬盘驱动器空间,然后实施本地备份和复制,以便可以使用本地帐户运行SQL服务。
打开要导出的凭证点击输出--输出
然后选择文件名及保存类型
选择类型的时候从后面的备选项中选择
microsoft.excel
97
(*.xls)
或者是excel的其他版本
点击保存就行了
保存后的文件需要调整行列
数据属性等
调成你想要的格式就行了
你这个不是什么大问题。。。只是你输入的密码错误。。。!!
错误提示是说SQL
Server代理的密码以及Analysis
Services的密码输入错误,
对于上面的4项账户和密码我建议你使用“对所有的SQLServer服务使用相同的账户”,选择你的系统登录用户并设置你的密码。
下面的几项服务的账户和密码我安装的时候也是采用系统的账户和密码的。LZ你可以按照我的要求修改下。我以前也是遇到和你相同的问题,我就是这样解决的,你现在还好是中文版,容易看懂错误信息,我的是英文版的,藐视不太懂。。。
SQL
Server
身份验证只能在无法进行
Windows
身份验证时使用。有关使用
Windows
身份验证进行连接的信息,请参阅如何使用
Windows
身份验证进行连接。
在使用
SQL
Server
身份验证连接到
SQL
Server
时必须考虑以下几点:
必须对服务器启用
SQL
Server
混合模式身份验证。
在尝试建立连接时必须设置
UID
和PWD
连接属性。UID
和PWD
必须映射到有效的
SQL
Server
用户和密码。
注意:
包含右大括号
(})
的密码必须使用另一个右大括号进行转义。例如,如果
SQL
Server
密码为“pass}word”,则
PWD
连接属性的值必须设置为“pass}}word”。
在使用
SQL
Server
身份验证连接到
SQL
Server
时应采取以下预防措施:
保护(加密)通过网络从
Web
服务器传递到数据库的凭据。默认情况下,SQL
Server
2005
和
SQL
Server
2008
将对凭据进行加密。为了提高安全性,请将“Encrypt”连接属性设置为“on”,以便对发送至服务器的所有数据进行加密。
注意:
将“Encrypt”连接属性设置为“on”可能导致性能降低,因为数据加密可能是一项计算密集型操作。
在PHP
脚本的纯文本部分中不要包含
UID
和PWD
连接属性的值。这些值应存储在具有相应受限权限的特定应用程序目录中。
避免使用
sa
帐户。将应用程序映射到拥有所需权限的数据库用户,并使用强密码。
注意:
在建立连接时可以设置除
UID
和PWD
之外的连接属性。有关支持的连接属性的完整列表,请参阅
sqlsrv_connect。
示例
下面的示例使用
SQL
Server
身份验证连接到
SQL
Server
的本地实例。所需的
UID
和PWD
连接属性的值是从
C:\AppData
目录中特定应用程序的文本文件
uid.txt
和pwd.txt
中提取的。建立连接之后,将查询服务器以验证用户登录名。
此示例假定本地计算机上已安装了
SQL
Server
和
AdventureWorks
数据库。当从浏览器运行此示例时,所有的输出都将写入该浏览器。
?php
/*
Specify
the
server
and
connection
string
attributes.
*/
$serverName
=
"(local)";
/*
Get
UID
and
PWD
from
application-specific
files.
*/
$uid
=
file_get_contents("C:\AppData\uid.txt");
$pwd
=
file_get_contents("C:\AppData\pwd.txt");
$connectionInfo
=
array(
"UID"=$uid,
"PWD"=$pwd,
"Database"="AdventureWorks");
/*
Connect
using
SQL
Server
Authentication.
*/
$conn
=
sqlsrv_connect(
$serverName,
$connectionInfo);
if(
$conn
===
false
)
{
echo
"Unable
to
connect.";
die(
print_r(
sqlsrv_errors(),
true));
}
/*
Query
SQL
Server
for
the
login
of
the
user
accessing
the
database.
*/
$tsql
=
"SELECT
CONVERT(varchar(32),
SUSER_SNAME())";
$stmt
=
sqlsrv_query(
$conn,
$tsql);
if(
$stmt
===
false
)
{
echo
"Error
in
executing
query.";
die(
print_r(
sqlsrv_errors(),
true));
}
/*
Retrieve
and
display
the
results
of
the
query.
*/
$row
=
sqlsrv_fetch_array($stmt);
echo
"User
login:
".$row[0]."";
/*
Free
statement
and
connection
resources.
*/
sqlsrv_free_stmt(
$stmt);
sqlsrv_close(
$conn);
?
点击中间的(....使用相同的账户),然后点击用户名选第二个选项,就ok了
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流