資料庫SQL 資料加密 示例操作

2021-05-09 18:10:13 字數 3709 閱讀 4638

-- 示例一, 使用證書加密資料.

-- 建立測試資料表

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...