数据库SQL 数据加密 示例操作
2009-10-29 07:44
323 查看
-- 示例一, 使用证书加密数据.
-- 建立测试数据表
CREATE TABLE tb(ID int IDENTITY (1,1),data varbinary (8000));
GO
--创建主密钥
create master key encryption by password='!@#$%^654321'
-- 建立证书一, 该证书使用数据库主密钥来加密
CREATE CERTIFICATE Cert_Demo1
WITH
SUBJECT = N'cert1 encryption by database master key' ,
START_DATE = '2009-9-01' ,
EXPIRY_DATE = '2009-12-31'
GO
-- 建立证书二, 该证书使用密码来加密
CREATE CERTIFICATE Cert_Demo2
ENCRYPTION BY PASSWORD = 'liangCK.123'
WITH
SUBJECT = N'cert1 encrption by password' ,
START_DATE = '2009-01-01' ,
EXPIRY_DATE = '2009-12-31'
GO
-- 此时, 两个证书已经建立完, 现在可以用这两个证书来对数据加密
-- 在对表tb 做INSERT 时, 使用ENCRYPTBYCERT 加密
INSERT tb(data)
SELECT ENCRYPTBYCERT ( CERT_ID ( N'Cert_Demo1' ), N' 这是证书1 加密的内容-liangCK' ); -- 使用证书1 加密
INSERT tb(data)
SELECT ENCRYPTBYCERT ( CERT_ID ( N'Cert_Demo2' ), N' 这是证书2 加密的内容-liangCK' ); -- 使用证书2 加密
--ok. 现在已经对数据加密保证了. 现在我们SELECT 看看
SELECT * FROM tb ;
-- 现在对内容进行解密显示.
-- 解密时, 使用DECRYPTBYCERT
SELECT [证书1 解密] = CONVERT ( NVARCHAR (50), DECRYPTBYCERT ( CERT_ID ( N'Cert_Demo1' ),data)),
-- 使用证书2 解密时, 要指定DECRYPTBYCERT 的第三个参数,
-- 因为在创建时, 指定了ENCRYPTION BY PASSWORD.
-- 所以这里要通过这个密码来解密. 否则解密失败
[证书2 解密] = CONVERT ( NVARCHAR (50), DECRYPTBYCERT ( CERT_ID ( N'Cert_Demo2' ),data, N'liangCK.123' ))
FROM tb ;
-- 我们可以看到, 因为第2 条记录是证书2 加密的. 所以使用证书1 将无法解密. 所以返回NULL
/*
证书1 解密 证书2 解密
-------------------------------------------------- --------------------------------------------------
这是证书1 加密的内容-liangCK NULL
NULL 这是证书2 加密的内容-liangCK
(2 行受影响)
*/
GO
-- 删除测试证书与数据表
DROP CERTIFICATE Cert_Demo1;
DROP CERTIFICATE Cert_Demo2;
DROP TABLE tb;
GO
-- 示例二, 使用对称密钥加密数据,
-- 对称密钥又使用证书来加密.
-- 创建测试数据表tb
CREATE TABLE tb(ID int IDENTITY (1,1),data varbinary (8000));
GO
-- 建立证书, 该证书用于加密对称密钥.
CREATE CERTIFICATE Cert_Demo
ENCRYPTION BY PASSWORD = N'liangCK.123'
WITH
SUBJECT = N'cert encryption by password' ,
START_DATE = '2009-01-01' ,
EXPIRY_DATE = '2009-12-31'
GO
-- 建立对称密钥
CREATE SYMMETRIC KEY Sym_Demo
WITH
ALGORITHM=DES -- 使用DES 加密算法
ENCRYPTION BY CERTIFICATE Cert_Demo -- 使用Cert_Demo 证书加密
GO
-- 要使用Sym_Demo 对称密钥. 必需使用OPEN SYMMETRIC KEY 来打开它
OPEN SYMMETRIC KEY Sym_Demo
DECRYPTION BY CERTIFICATE Cert_Demo
WITH PASSWORD = N'liangCK.123'
-- 插入加密数据
INSERT tb(data)
SELECT ENCRYPTBYKEY ( KEY_GUID ( N'Sym_Demo' ), N' 这是加密的数据, 能显示出来吗?' )
-- 关闭密钥
CLOSE SYMMETRIC KEY Sym_Demo
-- 插入完加密数据, 现在使用SELECT 来查询一下数据
SELECT * FROM tb
GO
-- 现在来解密此数据
-- 同样, 还是要先打开对称密钥
OPEN SYMMETRIC KEY Sym_Demo
DECRYPTION BY CERTIFICATE Cert_Demo
WITH PASSWORD = N'liangCK.123'
SELECT CONVERT ( NVARCHAR (50), DECRYPTBYKEY (data)) -- 这里可见, 数据已经解密出来了.
FROM tb
CLOSE SYMMETRIC KEY Sym_Demo
GO
-- 删除测试
DROP SYMMETRIC KEY Sym_Demo
DROP CERTIFICATE Cert_Demo
DROP TABLE tb
-- 示例三, 还有一种方法加密数据更简单
-- 就是使用EncryptByPassPhrase
-- 建立测试数据表tb
CREATE TABLE tb(ID int IDENTITY (1,1),data varbinary (8000));
GO
INSERT tb(data)
SELECT EncryptByPassPhrase ( N' 这是密码, 用来加密的' , N' 这是要加密的内容' );
-- 解密
SELECT CONVERT ( NVARCHAR (50), DECRYPTBYPASSPHRASE ( N' 这是密码, 用来加密的' ,data))
FROM tb
GO
DROP TABLE tb
相关文章推荐
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作-------sql方式
- SQL不同服务器数据库之间的数据操作整理(完整版)
- 对表数据进行(置顶,上移,下移,置底操作)---数据库sql
- SQL不同服务器数据库之间的数据操作整理(完整版)
- vc++学生选课系统开发 sql 操作数据库添加数据 管理员对学生信息的添加
- SQL语句操作数据与一些函数使用的丰富数据库
- SQL不同服务器数据库之间的数据操作整理(完整版)
- 使用PL/SQL Developer工具来实现创建表空间、创建数据库、备份数据库、数据导出等操作
- 数据库-T-SQL 语句-创建表,删除表,CRUD操作的添加数据,修改数据,删除数据
- 利用Sql实现将指定表数据导入到另一个数据库示例
- sql 数据库批量操作数据-开始事件
- SQL不同服务器数据库之间的数据操作
- SQL不同服务器数据库之间的数据操作整理
- SQL Server Reporting Service 报错:报表服务器无法解密用于访问报表服务器数据库中的敏感数据或加密数据的对称密钥,必须还原备份密钥或删除所有加密的内容。
- 数据库与表的操作之SQL Server 2012中的数据类型
- Java学习篇之SQL语句(操作数据库和数据表)
- 6.(Mysql数据管理相关)连接MYSQL,修改密码,增加新用户,数据库相关命令,表操作相关命令,数据相关命令,数据库sql导入和导出,备份数据库,查看不到mysql数据库的解决办法
- SQL不同服务器数据库之间的数据操作整理(完整版)
- sql 2005数据库加密 示例