主席
冬瓜,我就是在写个类
刚刚在想密码安全的问题
联机从书上提到过从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+
我有解过一个远程会计培训系统,就是直接取明文的
主席
一般都使用外部配置文件,加密后存入配置文件,需要时读取出来解密