Sql Server简单加密与解密 【转】

前言:

在SQL Server 2005和SQL Server 2008之前。如果希望加密敏感数据,如财务信息、工资或身份证号,必须借助外部应用程序或算法。SQL Server 2005引入内建数据加密的能力,使用证书、密钥和系统函数的组合来完成。

与数字证书类似。SQL Server 证书包括公钥和私钥这一对密钥,它们都用来加密和解密数据。SQL Server也拥有创建非对称密钥和对称密钥对象的能力。非对称密钥(asymmetric key)与证书相似,公钥用来加密数据库,私钥用来解密数据。非对称密钥和证书都提供了强大的加密强度。但在完成复杂的加密|解密过程中具有更多的性能开销。更适合对大量数据进行加密,且具有较低性能开销的解决方案是对称密钥(symmetric key),它是对相同数据进行加密和解密的一个密钥。

SQL Server允许将这些加密能力放到加密层次结构中。当安装了SQL Server后,在数据库master中创建名为服务主密钥的服务器级别证书,并将其默绑定到SQL Server服务账号登录名。服务主密钥用来加密所有其他数据库证书和创建在SQL Server实例中的密钥。另外,你也可以在用户数据库中创建数据库主密钥(Database Master Key),它可以用来加密数据库证书和密钥。

在SQL Server 2008中,微软引入了透明数据加密(TDE),它对整个数据库进行加密,而不需要修改任何访问它的应用程序。数据、日志文件和相关的数据库备份都是加密的。假如数据库被偷,如果没有数据库加密密钥(DEK)是不能访问数据的。

一、通过通行短语(PassPhrase)加密

对于不涉及证书及密钥的应急的数据加密,可以直接基于用户提供的密码来加密和解密数据。通行短语(PassPhrase)是允许存在空格的密码。这个PassPhrase不会存储在数据库中,因而也就意味着不会被使用存储的系统数据“破解”。同时,可以使用空格创建一个长的、易于记忆的句子来加密和解密敏感数据。

我们需要了解的一对函数是

ENCRYPTBYPASSPHRASE(http://technet.microsoft.com/zh-cn/library/ms190357.aspx

DECRYPTBYPASSPHRASE(http://technet.microsoft.com/zh-cn/library/ms188910.aspx

这一对函数必须使用相同的参数。

我们看一个示例:

--------加密函数-----------
CREATE FUNCTION dbo.EncryptByPassPhrasePwd(@password nvarchar(50))
RETURNS varbinary(max)
AS  
BEGIN 
    declare @pwd varbinary(max)

SELECT @pwd = EncryptByPassPhrase(
 ‘1234567‘,            
 @password)
    return @pwd
END
---------解密函数----------
CREATE  FUNCTION dbo.DecryptByPassPhrasePwd(@password varbinary(max))
RETURNS nvarchar(max)
AS  
BEGIN 
    declare @pwd nvarchar(max)

SELECT @pwd =CAST( DecryptByPassPhrase(‘1234567‘,@password)  as nvarchar(max))
    return @pwd
END

注意:123456 是用于生成对称密钥的通行短语

select dbo.EncryptByPassPhrasePwd(‘test11‘) as result
select dbo.DecryptByPassPhrasePwd(0x010000004779C35F96DACC0EC6A8C518E186D203B1A336EE5B8A51B4271B54F56F516ECE) as result

至尊箭神:http://www.zhizunjianshen.com/

时间: 2024-11-06 15:06:00

Sql Server简单加密与解密 【转】的相关文章

解密SQL SERVER 2005加密存储过程,函数

在SQL SERVER 2005中必须用专用管理连接才可以查看过程过程中用到的表 EG:sqlcmd -A 1>use test 2>go 1>sp_decrypt 'p_testa' 2>go Text----------------------Create procedure P_testa with encryption as select * from test create PROCEDURE [dbo].[sp_decrypt] (@procedure sysname

sql server 简单常规表用法

sql server 2008 1.  sql server 设置自增列 create table ex (sno  int identity not null, sname char(15) null) 从0开始默认自增+1 若要设置初始值 identity(m,n) m为起始位置,n为增量 2.向表中添加列 3.向表中插入数据 sno行直接插入数据时报错 没有往sno中插入数据后,插入语句能执行,并且sno自动+1 4.删除数据库表中的记录 5. 我一直在找当增量+1的时候能不能改变其初始值

C# 连接 SQL Server 简单教程

1.新建C#控制台应用程序 2.转到服务器资源管理器,在数据连接处右击添加连接(Pic1),输入服务器名和数据库名称(有时候服务器名有下拉框中不会出现,可以到SQL Server Management Studio中复制进去,Pic2黑色条状处就是),点出测试连接,如果失败,需要查看服务是否启动 3.在程序中写入以下代码即可运行 using System; using System.Collections.Generic; using System.Linq; using System.Text

小试SQL SERVER 2014 加密备份

? ? ? ? 数据库加密: http://blog.csdn.net/u012992506/article/details/25283035 ? create master key encryption by password='[email protected]' ? backup master key to file='d:\smk.bak' encryption by password='[email protected]' ? ? ? open master key decryptio

sql server简单查询

一.插入多行数据: 1.insert into ... select   从一个表中取出数据插入另一个已存在的表 2.select into   从一个表中取出数据插入一个新表中 3.insert into ()   union   select 常量列表 二.简单查询  1. 查询所有行和列 SELECT  *  FROM 表名  2.查询部分列 SELECT  列列表   FROM 表名  3.查询部分行  SELECT  列列表   FROM 表名 WHERE 列 运算符 值  4.列加别

sql server 简单程序设计1

@  局部变量 @@  全局变量 1.求10的阶层 2.case then ..... . . end 的应用

SQL Server 简单事务学习

select * from bank insert into bank values(10000) insert into bank values(20000) --打开一个事务 begin tran --定义临时变量 declare @num int = 0; update bank set balance=balance-15000 where Id=1 set @num = @num + @@error; --上一条语句出错次数 update bank set balance=balanc

sql server 简单语句整合

1.去重distinct , group by select distinct userid,username from 表名 select userid,username from 表名 group by userid,username 2.去空格 replace  ltrim rtrim Replace(name,' ','') select ltrim(' test ') --去除左边的空格 select rtrim(' test ') --去除右边的空格 select ltrim(rtr

sql server 简单程序设计2

1.case then ..... . . end 的应用