自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

簡(jiǎn)單說(shuō)說(shuō)SQL Server上的加密術(shù)

數(shù)據(jù)庫(kù) SQL Server
SQL Server上內(nèi)置了加密術(shù)用來(lái)保護(hù)各種類型的敏感數(shù)據(jù)。在很多時(shí)候,這個(gè)加密術(shù)對(duì)于你來(lái)說(shuō)是完全透明的;當(dāng)數(shù)據(jù)被存儲(chǔ)時(shí)候被加密,它們被使用的時(shí)候就會(huì)自動(dòng)加密。在其他的情況下,你可以選擇數(shù)據(jù)是否要被加密。

SQL Server上內(nèi)置了加密術(shù)用來(lái)保護(hù)各種類型的敏感數(shù)據(jù)。在很多時(shí)候,這個(gè)加密術(shù)對(duì)于你來(lái)說(shuō)是完全透明的;當(dāng)數(shù)據(jù)被存儲(chǔ)時(shí)候被加密,它們被使用的時(shí)候就會(huì)自動(dòng)加密。在其他的情況下,你可以選擇數(shù)據(jù)是否要被加密。SQL Server可以加密下列這些組件:

  1. ·密碼
  2. ·存儲(chǔ)過(guò)程,視圖,觸發(fā)器,用戶自定義函數(shù),默認(rèn)值,和規(guī)則。
  3. ·在服務(wù)器和用戶之間傳輸?shù)臄?shù)據(jù)

密碼加密術(shù)

SQL Server自動(dòng)將你分配給登陸和應(yīng)用角色的密碼加密。盡管當(dāng)你可以從主數(shù)據(jù)庫(kù)中直接察看系統(tǒng)表格而不需要密碼。你不能給對(duì)這種情況作出任何修改,事實(shí)上,你根本不能破壞它。

定義加密術(shù)

在有些時(shí)候,如果對(duì)對(duì)象進(jìn)行加密是防止將一些信息分享給他人。例如,一個(gè)存儲(chǔ)進(jìn)程可能包含所有者的商業(yè)信息,但是這個(gè)信息不能和讓其他的人看到,即使他們公開的系統(tǒng)表格并可以看到對(duì)象的定義。這就是為什么SQL Server允許你在創(chuàng)建一個(gè)對(duì)象的時(shí)候進(jìn)行加密。為了加密一個(gè)存儲(chǔ)進(jìn)程,使用下面形式的CREAT PROCEDURE 語(yǔ)句:

  1. CREATE PROCEDURE procedurename [;number] 
  2. [@parameter datatype 
  3. [VARYING][ = defaultvalue][OUTPUT]] 
  4. [, …] 
  5. [WITH RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION] 

我們關(guān)心的僅僅是可選的WITH參數(shù)。你可以詳細(xì)說(shuō)明ARECOMPILE或者ENCRYPTION,或者你可以同時(shí)說(shuō)明它們。ENCRYPTION關(guān)鍵字保護(hù)SQL Server它不被公開在進(jìn)程中。結(jié)果,如果ENCRYPTION在激活的時(shí)候系統(tǒng)存儲(chǔ)進(jìn)程sp_helptext就會(huì)被忽視,這個(gè)存儲(chǔ)進(jìn)程將被存儲(chǔ)在用戶創(chuàng)建進(jìn)程的文本中。如果你不想要加密,你可以使用ALTER PROCEDURE,忽略WITH ENCRYPTION子句來(lái)重新創(chuàng)建一個(gè)進(jìn)程。

為了能夠使用加密術(shù)。用戶和服務(wù)器都應(yīng)該使用TCP/IP NetworkLibraries用來(lái)連接。運(yùn)行適當(dāng)?shù)腘etwork Utility和檢查Force protocol encryption,看下表,用戶和服務(wù)器之間的連接將不會(huì)被加密。

加密也不能完全自由。當(dāng)連接確定后,要繼續(xù)其他的構(gòu)造,并且用戶和服務(wù)器必須運(yùn)行代碼來(lái)解釋加密和解釋的包裹。這里將需要一些開銷并且當(dāng)在編譯碼的時(shí)候會(huì)使進(jìn)程慢下來(lái)。如果網(wǎng)絡(luò)包裹在你控制范圍之外,使用這種做法是非常好的。

加密術(shù)中缺少什么?

你可以注意到在這個(gè)列表中缺少一些被加密的東西:你表格中的數(shù)據(jù)。在你存儲(chǔ)數(shù)據(jù)之前,SQL Server不會(huì)提供任何內(nèi)置的工具來(lái)加密你的數(shù)據(jù)。如果你需要保護(hù)存儲(chǔ)在SQL Server上的數(shù)據(jù),我們給你兩條建議:第一,你可以利用GRANT 和DENY關(guān)鍵字來(lái)控制你想哪個(gè)用戶可以在SQL Server中讀取的數(shù)據(jù)。

第二.如果你真的想對(duì)數(shù)據(jù)加密,不要設(shè)法加密碼。你可以利用被測(cè)試過(guò)的商業(yè)產(chǎn)品的算法。

SQL 注入攻擊

SQL 注入攻擊是一個(gè)常規(guī)性的攻擊,它可以允許一些不法用戶檢索你的數(shù)據(jù),改變服務(wù)器的設(shè)置,或者在你不小心的時(shí)候黑掉你的服務(wù)器。SQL 注入攻擊不是SQL Server問(wèn)題,而是不適當(dāng)?shù)某绦?。如果你想要運(yùn)行這些程序的話,你必須明白這冒著一定的風(fēng)險(xiǎn)。

測(cè)點(diǎn)定位弱點(diǎn)

SQL 注入的脆弱點(diǎn)發(fā)生在程序開發(fā)員構(gòu)造一個(gè)WHERE 子句伴隨著用戶的輸入的時(shí)候。比如,一個(gè)簡(jiǎn)單的ASP程序允許用戶輸入一個(gè)顧客的ID然后檢索公司的全部人員的名字,如果顧客ID如果作為ASP頁(yè)面的請(qǐng)求串的一部分返回,那么開發(fā)員可以編寫下面的代碼獲得數(shù)據(jù):

  1. strConn = "Provider=SQLOLEDB;Data Source=(local);" & _ 
  2. "Database=Northwind;Integrated Security=SSPI" 
  3. Set cnn = Server.CreateObject("ADODB.Connection"
  4. cnn.Open strConn 
  5. strQuery = "SELECT ContactName FROM Customers " & _ 
  6. WHERE CustomerID = '" & Request.Form("CustID") & "'
  7. Set rstResults = cnn.Execute(strQuery) 
  8. Response.Write(rstResults.Fields("ContactName").Value) 

現(xiàn)在你知道什么地方有問(wèn)題了吧?如果用戶知道一個(gè)用戶的ID,他可以通過(guò)檢索來(lái)獲得全部的相應(yīng)的名字?,F(xiàn)在明白了?

獲得額外的數(shù)據(jù)

當(dāng)然,對(duì)于一個(gè)攻擊程序,盡管它不知道任何顧客的ID,甚至不用去猜,它也可以獲得數(shù)據(jù)。為了完成這個(gè)工作,它將下面的文本輸入到應(yīng)用程序調(diào)用顧客ID的textbox中:

  1. customer ID: 
  2. 'UNION ALL SELECT ContactName FROM Customers 
  3. WHERE CustomerID <>' 

如果你輸入了這個(gè)代碼,你將會(huì)看到返回一個(gè)詢問(wèn)語(yǔ)句:

  1. SELECT ContactName FROM Customers 
  2. WHERE CustomerID = '' 
  3. UNION ALL SELECT ContactName FROM Customers 
  4. WHERE CustomerID <>'' 

通過(guò)獲得空和非空顧客的ID并集,這個(gè)查詢語(yǔ)句會(huì)返回?cái)?shù)據(jù)庫(kù)中所有的相關(guān)姓名。事實(shí)上,這個(gè)UNION技術(shù)可以被用來(lái)獲得你數(shù)據(jù)庫(kù)中大多數(shù)信息,看看這個(gè)CustomerID的值:

  1. 'UNION ALL SELECT FirstName + ' ' + LastName FROM 
  2. Employees WHERE LastName <>' 

它將SQL語(yǔ)句變成:

  1. SELECT ContactName FROM Customers 
  2. WHERE CustomerID = '' 
  3. UNION ALL SELECT FirstName + ' ' + LastName FROM 
  4. Employees WHERE LastName <>'' 

看,那就是攻擊程序從你的數(shù)據(jù)庫(kù)獲得的第一個(gè)雇員的名字。

更多的攻擊程序

如果SQL注入僅僅只有數(shù)據(jù)暴光這個(gè)弱點(diǎn)就已經(jīng)夠糟糕的了,但是,實(shí)際上一個(gè)良好的攻擊程序可以通過(guò)這個(gè)弱點(diǎn)獲取你數(shù)據(jù)庫(kù)中所有的資料??聪旅孢@個(gè)例子:

  1. ';DROP TABLE Customers;-- 

SQL語(yǔ)句變成:

  1. SELECT ContactName FROM Customers 
  2. WHERE CustomerID = '' 
  3. DROP TABLE Customers;-- ' 

這個(gè)分號(hào)使語(yǔ)句和SQL Server隔離,所以,這里實(shí)際上是兩個(gè)語(yǔ)句。第一個(gè)語(yǔ)句不存在的名字,第二個(gè)則撤消的整個(gè)Customers表。兩個(gè)—SQL Server注釋符,它可以使子句不發(fā)生語(yǔ)法錯(cuò)誤。

使用這個(gè)技術(shù)的變異,一個(gè)攻擊程序可以在任何SQL語(yǔ)句或者存儲(chǔ)過(guò)程上運(yùn)行。通過(guò)使用xp_cmdshell擴(kuò)展存儲(chǔ)過(guò)程,一個(gè)攻擊程序同樣可以在操作系統(tǒng)命令下運(yùn)行,顯然,這是一個(gè)嚴(yán)重的漏洞。

保護(hù)自己的數(shù)據(jù)庫(kù)

現(xiàn)在,你知道如何防范SQL注入攻擊了嗎?首先,你不能在用戶輸入中構(gòu)造WHERE子句,你應(yīng)該利用參數(shù)來(lái)使用存儲(chǔ)進(jìn)程。在最初的ASP頁(yè)面下,重新寫的部分將和剛才我們?cè)诒碇兴吹降臇|西相似。即使你認(rèn)為在你的應(yīng)用程序中沒(méi)有脆弱點(diǎn),你應(yīng)該遵守最小特權(quán)原則。使用我們建議的其他安全技術(shù)允許你的用戶僅僅訪問(wèn)他們能夠訪問(wèn)的。在你沒(méi)有發(fā)現(xiàn)你數(shù)據(jù)庫(kù)脆弱點(diǎn)的時(shí)候,只有這樣,不會(huì)使你的數(shù)據(jù)庫(kù)崩潰。

最后的建議

這就是全部的SQL Server安全系列。也許你現(xiàn)在不是一個(gè)全面的專家,但是你已經(jīng)了解了很多反面。下一步就是你要保護(hù)你SQL Server數(shù)據(jù),記住你在這里所學(xué)到的知識(shí),并利用到你的數(shù)據(jù)庫(kù)中保證你的數(shù)據(jù)不被那些黑客攻擊。

原文鏈接:http://fire.skyasp.net/news/?108.html

責(zé)任編輯:艾婧 來(lái)源: csssky的博客
相關(guān)推薦

2011-05-30 10:46:40

PHP

2011-05-31 14:06:10

Oracle分區(qū)

2009-12-24 16:21:04

Fedora core

2011-07-20 09:19:47

SQL Server

2019-06-18 16:31:34

CPUGPU內(nèi)存

2011-09-13 09:35:37

SQL Server集群

2010-07-15 12:38:14

SQL Server存

2011-07-14 09:37:53

SQL Server

2011-08-15 15:56:31

SQL Server

2010-06-13 15:10:19

Linux 查看進(jìn)程

2010-06-18 17:13:07

Linux anacr

2010-09-17 14:54:29

常用網(wǎng)絡(luò)協(xié)議

2010-07-21 15:22:07

2022-02-09 10:07:03

LinuxSQL Server

2009-12-28 17:12:38

Fedora Foru

2010-06-18 10:11:16

Linux Accep

2010-06-30 17:56:06

2015-08-19 14:22:01

SQL Server參數(shù)

2010-07-14 15:32:28

SQL Server

2010-11-09 10:00:37

SQL Server簡(jiǎn)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)