t-sql的基本用法講到第八章也差不多了,最后就講下字段索引和數(shù)據(jù)加密,這兩個(gè)內(nèi)容對(duì)編程人員可能用的地方不是太多,還是那句老話(huà)“防患于未然”。
下面我就簡(jiǎn)單的說(shuō)下字段索引和數(shù)據(jù)加密的內(nèi)容,只是簡(jiǎn)單概述,對(duì)初學(xué)者起到拋磚引玉的作用,大牛們請(qǐng)飄過(guò)?。。?
一,字段索引
索引是什么,使用索引可快速訪問(wèn) 數(shù)據(jù)庫(kù) 表中的特定信息。索引是對(duì)數(shù)據(jù)庫(kù)表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),例如 employee 表的姓名(name)列。如果要按姓查找特定職員,與必須搜索表中的所有行相比,索引會(huì)幫助您更快地獲得該信息。
下面是百度百科對(duì)索引概述的優(yōu)缺點(diǎn);
優(yōu)點(diǎn):
缺點(diǎn):
1
create
index
IX_ID_NAME
--
創(chuàng)建索引
2
on
worker(w_id,w_name)
--
在ID NAME 兩個(gè)字段上創(chuàng)建非聚集索引
3
4
drop
index
worker.IX_ID_NAME
--
刪除索引
5
select
*
from
sys.indexes
where
name
=
'
IX_ID_NAME
'
--
查看索引
創(chuàng)建唯一非聚集索引語(yǔ)法:
1
create
unique
nonclustered
index
index_Production_Product
--
創(chuàng)建唯一的非聚集索引
2
on
Production.Product(ProductID,Name)
3
where
Color
is
not
null
;
? 我們?cè)趧?chuàng)建表的時(shí)候也可以指定主鍵為唯一非聚集索引。
示例代碼:
1
create
table
Index_Table_Student
2
(
3
id
int
identity
primary
key
nonclustered
,
--
指定該主鍵為非聚集索引
4
name
nvarchar
(
50
)
5
)
1
alter
index
all
--
禁用所有的索引
2
on
Production.Product
3
disable
4
5
alter
index
all
--
啟用所有的索引
6
on
Production.Product
7
rebuild
二,數(shù)據(jù)加密( certificate , symmetric )
編程的時(shí)候我們有時(shí)候會(huì)接觸到數(shù)據(jù)加密,但那個(gè)數(shù)據(jù)加密是表現(xiàn)在程序上的,數(shù)據(jù)庫(kù)的數(shù)據(jù)加密我們平時(shí)會(huì)用的很少,除非一些敏感,機(jī)密的數(shù)據(jù)要使用數(shù)據(jù)加密,還有一種情況是防止數(shù)據(jù)庫(kù)數(shù)據(jù)泄露。
下面主要講t-sql中的兩種數(shù)據(jù)加密方式:證書(shū)加密(certificate),密鑰加密(symmetric)。
大家只要熟悉t-sql的語(yǔ)法,知道怎么創(chuàng)建證書(shū)和密鑰,怎么加密數(shù)據(jù),怎么解密數(shù)據(jù)就行了。
1,證書(shū)加密
首先我們創(chuàng)建一個(gè)證書(shū):
1
create
certificate WageCert
--
創(chuàng)建證書(shū)
2
with
subject
=
'
To Encrypt Wage
'
,
--
證書(shū)主題
3
expiry_date
=
'
2014/1/1
'
;
--
證書(shū)過(guò)期時(shí)間
expiry_date表示的是證書(shū)的過(guò)期時(shí)間,超過(guò)這個(gè)時(shí)間,創(chuàng)建的證書(shū)也就失效了,這點(diǎn)注意下。
創(chuàng)建好證書(shū),下一步就是使用證書(shū)加密數(shù)據(jù)了,我們先創(chuàng)建一張員工表,然后插入數(shù)據(jù)對(duì)工資字段進(jìn)行機(jī)密。
示例代碼:
1
create
table
employee
2
(
3
EmpID
int
primary
key
,
4
Wage
varbinary
(
500
)
not
null
--
工資字段,加密后為二進(jìn)制數(shù)據(jù)
5
)
6
insert
into
dbo.employee
7
values
(
1
,encryptbyCert(Cert_id(
'
WageCert
'
),
'
5000
'
))
--
使用證書(shū)加密
? 使用證書(shū)解密數(shù)據(jù)示例代碼:
1
select
EmpID,
CONVERT
(
varchar
(
30
),DECRYPTBYcert(Cert_id(
'
WageCert
'
),Wage))
as
Wage
2
from
dbo.employee
--
使用證書(shū)解密數(shù)據(jù)
2,密鑰加密
密鑰加密我們結(jié)合剛才的證書(shū)加密進(jìn)行講解。
首先創(chuàng)建一個(gè)證書(shū)和使用證書(shū)的密鑰,示例代碼:
1
create
certificate AdminPwdCert
--
創(chuàng)建證書(shū)
2
with
subject
=
'
To Encrypt Admin Password
'
,
--
證書(shū)主題
3
expiry_date
=
'
2014/1/1
'
;
--
證書(shū)過(guò)期時(shí)間
4
5
create
symmetric
key
PwdKey
--
創(chuàng)建對(duì)稱(chēng)密鑰
6
with
algorithm
=
aes_256
--
使用aes_256加密算法
7
encryption
by
certificate AdminPwdCert
--
使用證書(shū)加密
使用密鑰加密和使用證書(shū)加密不同的是,使用密鑰加密的時(shí)候要打開(kāi)密鑰,然后加密數(shù)據(jù),最后再關(guān)閉密鑰。
示例代碼:
1
open
symmetric
key
PwdKey
--
打開(kāi)對(duì)稱(chēng)密鑰
2
decryption
by
certificate AdminPwdCert
3
4
insert
into
dbo.Wrokers(WrokerID,Name,Sex,Monery)
--
插入加密數(shù)據(jù)
5
values
(
103
,
'
張三
'
,
'
男
'
,encryptbykey(key_guid(
'
PwdKey
'
),
'
1234
'
))
6
7
select
WrokerID,Name,Sex,
convert
(
varchar
(
100
),DECRYPTBYKEY(Monery))
as
Monery
--
解密數(shù)據(jù)
8
from
dbo.Wrokers
9
10
close
symmetric
key
PwdKey
--
關(guān)閉對(duì)稱(chēng)密鑰
t-sql中索引和數(shù)據(jù)加密就到著,這也可能是t-sql系列中最后一篇,以后有新內(nèi)容的話(huà)會(huì)補(bǔ)充。
接下來(lái)打算再做一些有關(guān)編程的學(xué)習(xí)筆記整理,希望大家多多關(guān)注。。。
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

