SQLServer中数据加密方法
对SQLServer中的数据进行加密,有三种方法,
1、 在程序语言中先对数据进行加密后再把加密后的数据保存在SQLServer数据库中;
2、 利用SQLServer未公开的加密密码函数,在SQL代码中调用加密密码函数对数据进行加密后保存;
3、 编写扩展存储过程的外部DLL文件实现加密,然后由SQL代码调用加密功能实现数据加密。
第一种方法就不再描述,利用第二种方法加密数据代码示例:
create table #temptable(iorder int, pswd varbinary(1024) )
go
insert into #temptable values(1, pwdencrypt('yang'))
insert into #temptable values(2, pwdencrypt('lian'))
insert into #temptable values(3, pwdencrypt('shan'))
go
select * from #temptable
go
-- 比较数据是否相等
select * from #temptable
where pwdcompare('lian', pswd)=1
go
drop table #temptable
go
上面的语句中,用到了二个函数:pwdencrypt和pwdcompare,这是二个SQLServer未公开的函数,pwdencrypt实现对输入数据进行加密后返回二进制形式的加密内容,而pwdcompare用于检查明文是否与加密的二进制数据内容相等,没有解密函数。这二个函数主要是用于SQLServer内部自己调用。优点是调用方便,缺点是这二个函数没有公开,就意味着可能改变,并且不兼容原来的,在使用上存在风险。
第三种方法,利用SQL Server中的一个扩展存储过程,名叫sp_addextendedproc,向 Microsoft SQL Server 注册新扩展存储过程的名称。语法为:sp_addextendedproc [@functname=] 'procedure' , [@dllname=] 'dll'。它的功能是把已经写好在外部DLL文件中的函数引入到SQLServer中,提供给其它SQL代码调用。其用法示例为:
USE master
GO
EXEC sp_addextendedproc 'xp_hello', 'c:/xp_hello.dll'
上面的语句表示把外部DLL文件 c:/xp_hello.dll 中的函数 xp_hello 引入到SQLServer中,在执行完上面的语句后,主库中就多了一个名为 xp_hello的扩展存储过程,我们在其它脚本中就可以调用此扩展存储过程了。有一点限定的是,sp_addextendedproc只能在master中执行,如果在其它库中调用xp_hello,需要加上master限定库名。
SQLServer中数据加密方法的更多相关文章
- Ms SQLServer中的Union和Union All的使用方法和区别
Ms SQLServer中的Union和Union All的使用方法和区别 SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 ...
- sqlserver中set IDENTITY_INSERT on 和 off 的设置方法
sqlserver中set IDENTITY_INSERT on 和 off 的设置方法: 执行插入数据库插入数据时报了以下错误,我明明没有给主键set值但还是报错 解决方法如下: qlserver ...
- sqlserver 中数据导入到mysql中的方法以及注意事项
数据导入从sql server 到mysql (将数据以文本格式从sqlserver中导出,注意编码格式,再将文本文件导入mysql中): 1.若从slqserver中导出的表中不包含中文采用: bc ...
- (转)笔记320 SQLSERVER中的加密函数 2013-7-11
1 --SQLSERVER中的加密函数 2013-7-11 2 ENCRYPTBYASYMKEY() --非对称密钥 3 ENCRYPTBYCERT() --证书加密 4 ENCRYPTBYKEY() ...
- 我是如何在SQLServer中处理每天四亿三千万记录的
首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...
- C#批量插入数据到Sqlserver中的四种方式
我的新书ASP.NET MVC企业级实战预计明年2月份出版,感谢大家关注! 本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的 ...
- SQLSERVER中的假脱机spool
SQLSERVER中的假脱机spool 我发现网上对于假脱机的解释都非常零散,究竟假脱机是什么? 这几天在家里研究了一下,收集了很多网上的资料 假脱机是中文的翻译,而英文的名字叫做 spool 在徐老 ...
- 【转】我是如何在SQLServer中处理每天四亿三千万记录的
原文转自:http://blog.jobbole.com/80395/ 首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文 ...
- 解决“动软代码生成器在SqlServer中会将唯一索引识别为主键"的Bug
动软代码生成器在SqlServer中,生成的代码会将唯一索引错误地识别为主键, 反编译源代码后,发现其中的SQL条件有误,现修复此Bug. 修复方法:将附件中的”Maticsoft.DbObjects ...
随机推荐
- 介绍一个开源的 C++ 开发框架 openFrameworks 。
作为一个图形图像方向的研究生,我经常都在和 OpenGL .OpenCV 等多种 C++ 库打交道.这些库遵循着不同的规则和用法:另外,为了让自己的程序具有更多的交互能力,编写界面也是一个家常便饭的工 ...
- HDU 1969 Pie(二分,注意精度)
Pie Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- webdriver定位页面元素时使用set_page_load_time()和JavaScript停止页面加载
webdriver定位页面元素时使用set_page_load_time()和JavaScript停止页面加载 原文:https://my.oschina.net/u/2344787/blog/400 ...
- jeesite快速开发平台(七)----代码生成原理
转自:https://blog.csdn.net/u011781521/article/details/79322942
- Spring cloud 两种服务调用方式(Rest + Ribbon) 和 Fegin方式
1:Rest + Ribbon @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } @Auto ...
- 想取得刚才nextval()的值时,放心大胆的用currval()吧,currval()的返回值并不会因为nextval()的并发访问而混乱
以前写sql的时候总是担心current()得到的值并不会绝对等于我上一次nextval()取得的值;因为可能其他线程并发访问nextval(). 先说结论吧:当你拿到一个数据库连接,先nextval ...
- 从LinqPad入门Linq
为什么要学习Linq? 在我们日常开发中,经常需要从数据库中执行各式各样的查询来获取需要的数据.但是如果需要对查询获得的数据进行二次筛选呢?linq就提供了对于可枚举类型(实现IEnumerable接 ...
- 在coursera上有哪些值得推荐的课程
来自知乎 https://www.zhihu.com/question/22436320/answer/224996328
- shutdown和close的区别
[shutdown和close的区别] 当所有的数据操作结束以后,你可以调用close()函数来释放该socket,从而停止在该socket上的任何数据操作:close(sockfd); 你也可以调用 ...
- Why Go's Declaration Syntax is better than C++?
[Why Go's Declaration Syntax is better than C++?] Newcomers to Go wonder why the declaration syntax ...