国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

SQL SERVER2005加密解密數據

2024-08-31 00:49:04
字體:
來源:轉載
供稿:網友

講述sql server 2005的數據加密功能和配置以及如何通過它實現對敏感數據的保護。

 


演示用的腳本提供給大家作為參考:

 

--------------------------------------------------------------------------------


/*[課程]使用數據庫加密保護敏感數據demo 1了解sql2005加密層次結構[過程]過程一共分為4個部分*/--==================(i)服務主密鑰=====================--1.)備份服務主密鑰到文件backup service master key to file = 'c:/dbfile/smk.bak'encryption by password = '[email protected]'--2.)生成新的服務主密鑰alter service master key regenerate;go--3.)從備份文件還原服務主密鑰restore service master key from file = 'c:/dbfile/smk.bak' decryption by password = '[email protected]'--==================(ii)數據庫主密鑰=====================--1.)為northwind數據庫創建數據庫主密鑰use northwind gocreate master key encryption by password = '[email protected]'go--2.)查看數據庫加密狀態select [name], is_master_key_encrypted_by_server     from sys.databases where name = 'northwind';go--3.)查看數據庫主密鑰的信息use northwindselect * from sys.symmetric_keysgo--4.)對數據庫主密鑰進行備份use northwindgobackup master key     to file = 'c:/dbfile/dmk.bak'    encryption by password = '[email protected][email protected]'go--5.)刪除服務主密鑰對數據庫主密鑰的保護--     創建非對稱密鑰成功,自動使用服務主密鑰解密并使用該數據庫主密鑰create asymmetric key asy_testkey1 with algorithm = rsa_1024 go--     刪除服務主密鑰對數據庫主密鑰的保護alter master key     drop encryption by service master keygo--      查看數據庫的加密狀態select [name], is_master_key_encrypted_by_server     from sys.databases where name = 'northwind';--     創建非對稱密鑰失敗,數據庫主密鑰未打開create asymmetric key asy_testkey2 with algorithm = rsa_1024 go--     打開數據庫主密鑰未open master key decryption by password = '[email protected]'select * from sys.openkeys--     創建非對稱密鑰成功create asymmetric key asy_testkey2 with algorithm = rsa_1024 go--     恢復服務主密鑰對數據庫主密鑰的保護alter master key     add encryption by service master keyclose master key--==================(iii)證書=====================--1.)讓sql2005創建自簽名的證書use northwindgocreate certificate cert_testcert1     encryption by password = '[email protected]'    with subject = 'testcert1',    start_date = '1/31/2006',    expiry_date = '1/31/2008'goselect * from sys.certificates--2.)從文件導入證書use northwindgocreate certificate cert_testcert2    from file = 'c:/dbfile/mscert.cer'goselect * from sys.certificates--3.)備份導出證書和私鑰backup certificate cert_testcert1     to file = 'c:/dbfile/testcert1.cer'     with private key         (decryption by password = '[email protected]' ,          file = 'c:/dbfile/testcert1_pvt' ,          encryption by password = 'pa$w0rd')--4.)使用證書加密、解密數據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 @cipherselect convert(varchar(200), decryptbycert(cert_id('cert_testcert1'), @cipher, n'[email protected]')) as [cleartext]--5.)刪除證書私鑰alter certificate cert_testcert1    remove private keygo--    加密成功,解密失敗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 @cipherselect convert(varchar(200), decryptbycert(cert_id('cert_testcert1'), @cipher, n'[email protected]')) as [cleartext]--==================(iv)非對稱密鑰=====================--1.)使用sn.ext生成非對成密鑰文件--     sn -k c:/dbfile/asy_test.key--2.)從文件創建非對稱密鑰use northwindgocreate asymmetric key asy_test      from file = 'c:/dbfile/asy_test.key'      encryption by password = '[email protected]'goselect * from sys.asymmetric_keys

 /*
[課程]使用數據庫加密保護敏感數據

demo 2
使用密鑰對列數據進行加密


[過程]
過程一共分為4個部分

*/


--==================(i)準備=====================
--1.)創建示例表
use northwind
if exist dbo.empsalary drop table dbo.empsalary;

create table dbo.empsalary(
    empid int,
    title nvarchar(50),
    salary varbinary(500)
)
go

--2.)創建數據庫主密鑰
create master key encryption by password = '[email protected]'
go

--3.)


--4.)創建用于加密的對稱密鑰
create symmetric key sym_salary
    with algorithm = aes_192
    encryption by password = '[email protected]';

select * from sys.symmetric_keys where [name] = 'sym_salary'


--==================(ii)加密列數據=====================

--1.)打開對稱密鑰
open symmetric key sym_salary
    decryption by password = '[email protected]'

select * from sys.openkeys        --查看打開的對稱密鑰

--2.)向表中插入數據,并對salary列的數據進行加密
insert into empsalary values (1, 'ceo', encryptbykey(key_guid('sym_salary'), '20000'))
insert into empsalary values (2, 'manager', encryptbykey(key_guid('sym_salary'), '10000'))
insert into empsalary values (3, 'db admin', encryptbykey(key_guid('sym_salary'), '5000'))

--3.)關閉打開的對稱密鑰
close symmetric key sym_salary

select * from sys.openkeys        --查看打開的對稱密鑰

--4.)查看表中存放的數據
select * from empsalary           

 

--==================(iii)解密并訪問被加密了的數據列=====================
--1.)打開對稱密鑰
open symmetric key sym_salary decryption by password = '[email protected]'

--2.)使用對稱密鑰解密并訪問被加密了的數據列
select empid, title, cast(decryptbykey(salary) as varchar(20)) as salary from empsalary

--3.)關閉對稱密鑰
close symmetric key sym_salary


--==================(iii)繞過加密數據的攻擊=====================
--1.)攻擊者使用其它數據行的加密數據替換某一行的數據
select * from empsalary
update empsalary set salary =
    (select salary from empsalary where empid = 1)
    where empid = 3

--2.)查看被攻擊后解密的數據
open symmetric key sym_salary decryption by password = '[email protected]'
select empid, title, cast(decryptbykey(salary) as varchar(20)) as salary from empsalary
close symmetric key sym_salary


--==================(iv)使用驗證器防止繞過加密數據的攻擊=====================
--1.)刪除前面添加的數據行
delete from empsalary

--2.)向表中插入數據,并對salary列的數據使用驗證器進行加密,第四個參數是加密因子
open symmetric key sym_salary decryption by password = '[email protected]'
insert into empsalary values (1, 'ceo', encryptbykey(key_guid('sym_salary'), '20000', 1, '1'))
insert into empsalary values (2, 'manager', encryptbykey(key_guid('sym_salary'), '10000', 1, '2'))
insert into empsalary values (3, 'db admin', encryptbykey(key_guid('sym_salary'), '5000', 1, '3'))
close symmetric key sym_salary

--3.)解密并訪問被加密了的數據列
open symmetric key sym_salary decryption by password = '[email protected]'
select empid, title, cast(decryptbykey(salary, 1, cast(empid as varchar(3))) as varchar(20)) as salary from empsalary
close symmetric key sym_salary


--4.)攻擊者使用相同的方法篡改數據
select * from empsalary
update empsalary set salary =
    (select salary from empsalary where empid = 1)
    where empid = 3

--5.)被篡改后的加密了的數據列變成無效
open symmetric key sym_salary decryption by password = '[email protected]'
select empid, title, cast(decryptbykey(salary, 1, cast(empid as varchar(3))) as varchar(20)) as salary from empsalary
close symmetric key sym_salary

/*
[課程]使用數據庫加密保護敏感數據

demo 3
使用證書簽署存儲過程


[過程]
過程一共分為2個部分

*/

--==================(i)示例準備=====================
--1.)創建數據庫主密鑰
use northwind
go
create master key encryption by password = '[email protected]'

--2.)創建簽署存儲過程所需要的證書
create certificate cert_products
    with subject = 'products sign',
    start_date = '2006/1/1',
    expiry_date = '2008/1/1'

--3.)創建spdeveloper登錄帳戶和用戶,該用戶創建訪問products表的存儲過程
create login [spdeveloper] with password=n'[email protected]', default_database=[northwind]
go
create user [spdeveloper] for login spdeveloper with default_schema=[spdeveloper]
go
create schema products authorization spdeveloper
go
exec sp_addrolemember @rolename = 'db_owner', @membername = 'spdeveloper'

--4.)以spdeveloper的身份創建存儲過程products.usp_products
execute as user = 'spdeveloper'
go
create procedure products.usp_products
as
    select top 5 * from dbo.products
go

revert
select user

--4.)創建普通用戶jerry
create login jerry with password=n'[email protected]', default_database=[northwind]
create user jerry for login jerry


--==================(ii)使用證書簽署存儲過程=====================
--1.)授予用戶jerry執行存儲過程的權限
grant execute on products.usp_products to jerry

--2.)以jerry的身份執行存儲過程失敗,因為擁有全鏈是斷裂的
execute as user = 'jerry'
select user
go

execute products.usp_products
go

revert

--3.)使用證書在當前數據庫創建用戶productsreader,
--     并為該用戶賦予讀取products表的權限
create user productsreader for certificate cert_products
go
grant select on products to productsreader

--4.)使用證書簽署當前存儲過程
add signature to products.usp_products by certificate cert_products

--4.)以jerry的身份重新執行存儲過程,成功,
--     因為存儲過程將以productsreader的權限上下文執行
execute as user = 'jerry'
select  user
go
execute products.usp_products


 

                  
         講師: 牛可 

          時間:  2006年8月9日 10:00--11:30
          產品: sql server
          技術等級:  200 

         歡迎大家積極參與討論

課后問題及答案

 


1.       在sql server 2005中,數據庫的主密鑰可以直接用來加密保護:(ab)


a.       證書的私鑰


b.       非對稱密鑰的私鑰


c.      非對稱密鑰的公鑰


d.      服務主密鑰


 


2.       當采用加密技術來保護數據庫中的大量敏感數據時,為了兼顧性能和數據的安全性,最佳的做法是:(c)


a.       使用證書加密所有敏感數據,并用對稱密鑰加密保護證書的私鑰


b.       使用非對稱密鑰的公鑰加密所有敏感數據,并用對稱密鑰加密保護該密鑰對的私鑰


c.      使用對稱密鑰加密所有敏感數據,并用證書加密保護該對稱密鑰


d.      使用非對稱密鑰的私鑰加密所有敏感數據,并用證書加密保護該密鑰對的公鑰


 


3.       在sql server 2005中使用證書簽署存儲過程的目的是:(d)


a.       確保只有擁有該證書對應私鑰的用戶才能執行該存儲過程


b.       加密存儲過程,防止其它人查看到存儲過程中的t-sql語句


c.      加密存儲過程執行返回的數據結果集


d.      讓該存儲過程以證書所對應的數據庫用戶的權限執行

  • 本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。
  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 新竹市| 稻城县| 沈丘县| 淮南市| 荣成市| 庄浪县| 阿克| 文登市| 文昌市| 从化市| 西林县| 栖霞市| 黎城县| 龙岩市| 辉南县| 延川县| 衢州市| 乃东县| 张家口市| 皋兰县| 神木县| 六盘水市| 军事| 彰化市| 股票| 玉门市| 犍为县| 小金县| 龙川县| 永泰县| 安达市| 威宁| 泸水县| 舒兰市| 通海县| 墨玉县| 绥滨县| 恩平市| 玛多县| 乐山市| 潍坊市|