SQL SERVER2005加密解密数据

一.数据库配置

1.为数据库创建数据库主密钥

脚本代码:

USE Northwind 
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'P@ssw0rd'
GO

  数据库名    Northwind

    密码        P@ssw0rd

 

2.对数据库主密钥进行备份

脚本代码:

      USE Northwind
GO
BACKUP MASTER KEY 
    TO FILE = 'C:/DBFile/DMK.bak'
    ENCRYPTION BY PASSWORD = 'P@ssw0rd!@'
GO

数据库名    Northwind

    出力文件    C:/DBFile/DMK.bak

 

3.让SQL2005创建自签名的证书

脚本代码:

USE Northwind
GO
CREATE CERTIFICATE cert_TestCert1 
    ENCRYPTION BY PASSWORD = 'P@ssw0rd'
    WITH SUBJECT = 'TestCert1',
    START_DATE = '1/31/2008',
    EXPIRY_DATE = '1/31/2009'
GO

    证书名      cert_TestCert1

    密码        P@ssw0rd

    有效期间    1/31/2008 ~ 1/31/2009

 

4.备份导出证书和私钥

脚本代码:

BACKUP CERTIFICATE cert_TestCert1 
    TO FILE = 'c:/DBFile/TestCert1.cer' 
    WITH PRIVATE KEY 
        (DECRYPTION BY PASSWORD = 'P@ssw0rd' , 
         FILE = 'c:/DBFile/TestCert1_pvt' , 
         ENCRYPTION BY PASSWORD = 'Pa$w0rd')

    证书出力文件       c:/DBFile/TestCert1.cer

    证书密码           P@ssw0rd

    私钥密码           Pa$w0rd

 

5.使用证书加密、解密数据(测试是否配置成功)

脚本代码:

DECLARE @cleartext varbinary(200)
DECLARE @cipher varbinary(200)
SET @cleartext = CONVERT(varbinary(200), 'Test text string')
SET @cipher = EncryptByCert(Cert_ID('cert_TestCert1'), @cleartext)
SELECT @cipher
SELECT CONVERT(varchar(200), DecryptByCert(Cert_ID('cert_TestCert1'), @cipher, N'P@ssw0rd')) AS [ClearText]

    执行结果下图所视:

    

※ 第一行为加密后的数据,第二行为解密后的数据

 

6.对称密钥做成

    脚本代码

CREATE SYMMETRIC KEY TestSymmetricKey

      WITH ALGORITHM = TRIPLE_DES

      ENCRYPTION BY CERTIFICATE cert_TestCert22

    用证书对对称密钥加密

    对称密钥名   TestSymmetricKey

    证书名       cert_TestCert22

二.对加密数据的操作(证书加密)

1.测试表的做成

脚本代码:

      USE Northwind
CREATE TABLE dbo.EmpSalary(
    EmpID int
    Title nvarchar(50),
    Salary varbinary(500)
)
GO

   注:字段Salary为要加密的字段,要加密的字段必须为varbinary类型(二进制类型)

 

2.插入数据

    SQL文:

    Insert into 

EmpSalary

values

  ( 1,'CEO',

EncryptByCert(Cert_ID('cert_TestCert1'),

CONVERT(varbinary(200), '6000'))

            )

    注:要把字符串类型的数据先转换成二进制类型后再加密

 

3.更新数据

    SQL文:

        Update

EmpSalary

Set

Salary = 

EncryptByCert(Cert_ID('cert_TestCert1'),

CONVERT(varbinary(200), '6980'))

 

4.删除数据

SQL文:

        delete from EmpSalary

注:无特殊处理

 

5.抽出数据

SQL文:

       Select 

  EmpID,

  Title,

CONVERT(varchar(200), DecryptByCert(Cert_ID('cert_TestCert22'), Salary, N'P@ssw0rd')) Salary 

from EmpSalary

where

 CONVERT(varchar(200), DecryptByCert(Cert_ID('cert_TestCert22'), Salary, N'P@ssw0rd')) = '6000'

 

三.对加密数据的操作(对称密钥加密)

1.打开和关闭对称密钥

脚本代码

   OPEN SYMMETRIC KEY TestSymmetricKey DECRYPTION BY CERTIFICATE cert_TestCert22 with PASSWORD = 'P@ssw0rd'

   CLOSE SYMMETRIC KEY TestSymmetricKey

注:在使用对称密钥前打开密钥,使用结束后关闭

 

2.抽出数据

  SQL文:

    OPEN SYMMETRIC KEY TestSymmetricKey DECRYPTION BY CERTIFICATE cert_TestCert22 with PASSWORD = 'P@ssw0rd'

Select EmpID,Title, CONVERT(varchar(200), 

DecryptByKey(Salary)) Salary from EmpSalary

    CLOSE SYMMETRIC KEY TestSymmetricKey

 

3.插入数据

  SQL文:

        OPEN SYMMETRIC KEY TestSymmetricKey DECRYPTION BY CERTIFICATE cert_TestCert22 with PASSWORD = 'P@ssw0rd'

Insert into EmpSalary values (  1 ,'CEO',

     EncryptByKey(Key_GUID('TestSymmetricKey'), '8741'))

        CLOSE SYMMETRIC KEY TestSymmetricKey


你可能感兴趣的:(SQL SERVER2005加密解密数据)