主席
冬瓜,我就是在写个类
刚刚在想密码安全的问题
联机从书上提到过从SQL Server 2005开始,SQL Server和客户端的连接是自动加密的。联机丛书上所说的SQL Server会自动加密连接就是指的这个阶段。这个阶段开始于客户端和SQL Server在TCP/IP协议栈的三次握手,止于客户端成功登陆SQL Server。从SQL Server 2005开始,这个阶段永远是加密的。
滋阴壮阳冬瓜汤
你不用太担心这种问题,一般能从内存中,把string字符串拿出来的,技术都是蛮过硬的,你防不住。
主席
这是答案
所以使用高版本的SQL SERVER还是有好处从
有好处的
滋阴壮阳冬瓜汤
tcp/ip,一次连接成功,要七次握手。主席
SQL Server中的“加密”发生在什么地方
总的来说,我把SQL Server的加密分成两个部分,一个是对数据的加密,一个是对连接的加密。对于数据的加密,主要是通过一系列的函数如EncryptbyKey,或者TDE来完成的。这部分不在这里展开了。
另外一部分是连接加密,自己分的话还能分成两个阶段。一个是建立连接时候的加密。另外一个阶段是连接建立起来之后,客户端和SQL Server在其上传输数据时候的加密。
滋阴壮阳冬瓜汤
断开连接,则要达到八次握手,才能真正的断开。
主席
建立连接时的加密
联机丛书上所说的SQL Server会自动加密连接就是指的这个阶段。这个阶段开始于客户端和SQL Server在TCP/IP协议栈的三次握手,止于客户端成功登陆SQL Server。从SQL Server 2005开始,这个阶段永远是加密的。
那么SQL Server是使用什么密钥来对连接加密的呢?默认情况下SQL Server会自动生成一个证书并使用这个证书来对连接做SSL加密。
大家可能会在SQL Server的Error log的开头部分看到这么一段话:
A self-generated certificate was successfully loaded for encryption
这段话就表明了SQL Server在启动的时候自动加载了自动生成的证书并且使用这个证书来加密。
这是微软的官方资料
滋阴壮阳冬瓜汤
是的,道高一尺,魔高一丈,单靠微软,母猪也能上树呀
主席
我们可以做一个实验来验证它。将SA的密码设置为Password,然后我们在远端机器上使用SQL Server Management Studio并使用SA账户去连接SQL Server。同时我们使用微软的Network Monitor工具来抓取SQL Server和客户端之间的网络包。使用SA账户来做这个实验是因为,SA账户是一个SQL 验证账户,而SQL验证账户的密码都是由客户端通过网络直接提交给SQL Sever来做验证的。这也是为什么说SQL验证不如Windows验证安全的原因。通过实验:
1. 我们可以看到有SSL的数据包交换,因此你判定SQL Server已经使用了SSL来加密了。
开启心的追求
进销存的字段都有哪些,我只有进货的单子
主席
2. 检查所有网络包的内容,我们是找不到Password的,也就是说网络上传输的不再是明文而是加密过的内容。
需要注意的一点是,SQL Server自动生成的证书是一种自签名的证书,而通过自签名证书实现的SSL并不能提供很强的安全性。他对中间人攻击(man-in-the-middle attack)不具有抵抗能力。因此我们建议在生产环境中,应该手动给SQL Server配置证书,而不是让它使用自动生成的证书。
滋阴壮阳冬瓜汤
sql sever从来就不是以强大的防保功能自称,这等宣传,看看可以,反正也够用了。
滋阴壮阳冬瓜汤
数据库一般都有适用范围的。中小型的,sql server是不错的选择。mysql是网络首选。
桌面型的,sqlie是首选 ,firebird次选,最后access。
超大型的,科学用的数据库,很少是用商业数据库。因为数据量大大超出商业数据库的容量了。
主席
也就是说,SQL SERVER2005以前的版本中,通过 Debug.Print cn.ConnectionString 是可以取得密文的
科学用的,应该自己专门定义一个数据库的
滋阴壮阳冬瓜汤
谁有这本事,在你的程序中写入这一句代码,那他逆天了。主席
cn.ConnectionString 里面不能读出密码,这就好办多了
我是要做个Dll,要留出端口给外部调用
本来考虑只能从外部传入CN对象进去的,不然密码会泄露。现在Debug.Print cn.ConnectionString 不能取得密文,我就可以直接让dll输出CN对象供外部调用
滋阴壮阳冬瓜汤
你不要太费这种心思。
str="Provider=SQLOLEDB.1;User ID=sa;Initial Catalog=ReportServer;Data Source=127.0.0.1,1433;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=陈友福-PC;Use Encryption for Data=False;Tag with column collation when possible=False;"
只要在代码中,是明文的字符串,它是可能被扫出来的。
除非,你这个字符串本身自己加密了,
主席
没有密码
当然不会是明文在代码中的
另外有config的配置文件,用AES256加密的
滋阴壮阳冬瓜汤
人家攻击的不是你的代码,而是数据库的端口,你端口总要暴露出来吧
主席
内部的人怕是没那水平,外部就用VPN了
想想还是从外部穿进去算了,虽然没有密码,用户名和IP地址的也都有了
滋阴壮阳冬瓜汤
反正这种是一门极高深的学问了,你只能按你所学的来做就好了。至于其它的,先放一边,这门学问太深了。
滋阴壮阳冬瓜汤
事实上,也很少有人会废心思,想去扫内存中的字符串,这本身就是挺难的一件事了32505003
数据库呢
哪里有教程
最好是B/s模式的数据库
比如做个学生成绩管理系统
Q+
我有解过一个远程会计培训系统,就是直接取明文的
主席
一般都使用外部配置文件,加密后存入配置文件,需要时读取出来解密