T-Sql(八)字段索引和数据加密
t-sql的基本用法講到第八章也差不多了,最后就講下字段索引和數(shù)據(jù)加密,這兩個(gè)內(nèi)容對(duì)編程人員可能用的地方不是太多,還是那句老話“防患于未然”。
下面我就簡(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):
1.大大加快數(shù)據(jù)的檢索速度; 2.創(chuàng)建唯一性索引,保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性; 3.加速表和表之間的連接; 4.在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),可以顯著減少查詢中分組和排序的時(shí)間。缺點(diǎn):
1.索引需要占物理空間。 2.當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時(shí)候,索引也要?jiǎng)討B(tài)的維護(hù),降低了數(shù)據(jù)的維護(hù)速度。 這里我將下t-sql中索引的用法,示例代碼: 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 ) 啟動(dòng)和禁用索引示例代碼: 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ù)加密方式:證書加密(certificate),密鑰加密(symmetric)。
大家只要熟悉t-sql的語(yǔ)法,知道怎么創(chuàng)建證書和密鑰,怎么加密數(shù)據(jù),怎么解密數(shù)據(jù)就行了。
1,證書加密
首先我們創(chuàng)建一個(gè)證書:
1 create certificate WageCert --創(chuàng)建證書 2 with subject='To Encrypt Wage', --證書主題 3 expiry_date='2014/1/1'; --證書過(guò)期時(shí)間expiry_date表示的是證書的過(guò)期時(shí)間,超過(guò)這個(gè)時(shí)間,創(chuàng)建的證書也就失效了,這點(diǎn)注意下。
創(chuàng)建好證書,下一步就是使用證書加密數(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ù)據(jù)示例代碼:
1 select EmpID,CONVERT(varchar(30),DECRYPTBYcert(Cert_id('WageCert'),Wage)) as Wage 2 from dbo.employee --使用證書解密數(shù)據(jù)2,密鑰加密
密鑰加密我們結(jié)合剛才的證書加密進(jìn)行講解。
首先創(chuàng)建一個(gè)證書和使用證書的密鑰,示例代碼:
1 create certificate AdminPwdCert --創(chuàng)建證書 2 with subject='To Encrypt Admin Password', --證書主題 3 expiry_date='2014/1/1'; --證書過(guò)期時(shí)間 4 5 create symmetric key PwdKey --創(chuàng)建對(duì)稱密鑰 6 with algorithm=aes_256 --使用aes_256加密算法 7 encryption by certificate AdminPwdCert --使用證書加密使用密鑰加密和使用證書加密不同的是,使用密鑰加密的時(shí)候要打開(kāi)密鑰,然后加密數(shù)據(jù),最后再關(guān)閉密鑰。
示例代碼:
1 open symmetric key PwdKey --打開(kāi)對(duì)稱密鑰 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ì)稱密鑰t-sql中索引和數(shù)據(jù)加密就到著,這也可能是t-sql系列中最后一篇,以后有新內(nèi)容的話會(huì)補(bǔ)充。
接下來(lái)打算再做一些有關(guān)編程的學(xué)習(xí)筆記整理,希望大家多多關(guān)注。。。
?
總結(jié)
以上是生活随笔為你收集整理的T-Sql(八)字段索引和数据加密的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 火影忍者祈愿绘马可以买吗
- 下一篇: 使用windows的小技巧