-- 示例一, 使用證書加密資料.
-- 建立測試資料表
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
Android 資料庫加密 SQL加密
android資料儲存之sqlite的介紹及使用 以及contentprovider程式間資料共享 android探索之contentprovider熟悉而又陌生的元件 我們清晰的知道sqlite資料庫預設存放位置 data data pakage database目錄下,對於已經root的手機來說...
資料庫操作sql
一 資料庫的建立 1 建立乙個名稱為mydb1的資料庫 create database mydb1 2 建立乙個使用utf8字符集的mydb2資料庫。create database mydb2 character set utf8 3 建立乙個使用utf8字符集,並帶比較規則的mydb3資料庫。cr...
nodejs操作oracle資料庫示例
首先用sqlplus或其它工具在oracle資料庫裡建立表my users,用來此次測試 create table my users id integer,firstname nvarchar2 20 lastname nvarchar2 20 tablespace system nodejs讀寫o...