1. 程式人生 > >SQL Server 安全篇——降低外圍威脅(1)——網路配置

SQL Server 安全篇——降低外圍威脅(1)——網路配置

    前面大篇幅介紹了SQL Server及作業系統的安全,現在是時候介紹一下外圍主要是網路層面的安全。這部分主要包括網路功能、服務和端點。因為絕大部分的攻擊都來自於網路,所以網路層的安全控制某種意義上可以說是最外層的防禦。本文先介紹一下網路方面的配置。

網路配置

    在介紹之前先要了解一下基礎知識,包括埠和協議。這對後續防火牆的管理很有必要。

埠和協議

協議

    在網路環境下,網路中的伺服器互動時,彼此之間需要了解傳輸的資訊是什麼內容。這個工作由網路協議(protocol)來完成,SQL Server可以偵聽三種不同的協議:Shared memory(共享記憶體)、named pipes(命名管道)和TCP/IP。

    Shared Memory:僅用於在同一臺伺服器內的應用程式和資料庫引擎例項互動。由於正式環境都不建議把客戶端和資料庫安裝在同一個環境下,所以這種協議極少使用。通常僅用來排查網路連線的故障。

    Named Pipes:主要用於區域網環境。在廣域網中雖然可用但是效能會大打折扣。

    TCP/IP:除非有理由不使用,否則都應該配置SQL Server使用TCP/IP協議。因為不管從安全性還是支援的廣泛程度來說,都是其他協議無法比擬的。

    埠分為兩大類:動態和靜態。埠是在作業系統中的一個互動端點,配合網路協議傳輸資訊。SQL Server使用TCP埠和UDP埠,客戶端可以通過埠與例項建立連線。

    靜態埠:埠號總是固定的,即使伺服器重啟。很多軟體都預佔了一些埠,如SQL Server(1433)、MySQL(3306)。

    動態埠:每次服務重啟時重新生成(當然有機率會使用重啟前的埠號,不過幾率估計非常低)。

    介紹完這些非常基礎的內容之後,下面從操作中再深入介紹。

配置網路協議

    正如很多SQL Server資料上都會提到,對SQL Server的管理,除非不能滿足需求,否則都應該使用SQL Server配置管理器來管理。通常情況下我們會使用下面圖中所示的部分來管理協議:

    注意如果是多例項的環境中,應該分清楚你要控制的是哪個例項。同時提醒一下,對這裡的網路協議修改,需要重啟資料庫引擎服務才能生效,這個在配置完畢之後就會彈出提醒框。


    圖上可以看到,預設情況下Named Pipes是禁用的,而其他兩個是啟用狀態。雙擊Shared Memory可以發現它並沒有可配置的內容。


    雙擊命名管道可以看到當前的管道名。


    下面重點介紹一下TCP/IP:對話方塊分為兩頁,第一頁是【協議】,包含三個部分,【保持活動狀態】(Keep Alive)、【已啟用】(Enabled)和【全部偵聽】(Listen All)


  • 保持活動狀態:下面就有解釋。
  • 全部偵聽:標識SQLServer例項是否要偵聽所有可用IP地址或者已配置的IP地址子集。

    第二頁是【IP地址】,可以配置例項偵聽的埠。如果使用靜態埠(建議操作),則“TCP動態埠”處應該留空。如果【協議】頁的“全部偵聽”設為【否】,則此處的每個IP地址都要手動配置埠。如果設為【是】,只需要配置IPALL部分即可。


    從SQL Server角度,可供配置的網路方面內容主要就是上面這些,下面來演示一下防火牆方面的配置。

SQL Server所需的防火牆配置

    防火牆是什麼這裡就不多說了。它的核心功能就是“放行”跟“阻止”。為了使得外部應用能夠與SQL Server通訊,需要配置防火牆放行合理的請求。在大型企業環境中,防火牆可能有好幾層,如企業外部、企業內部、一套應用(含應用程式與資料庫伺服器)中等等。同時防火牆也有軟硬之分,有專用的硬體防火牆,但是對於DBA來說,通常不需要關注過多。這裡主要指資料庫伺服器本身的防火牆。

    下面首先來看看SQLServer跟客戶端的互動流程。

客戶端與SQLServer互動

    如圖所示,當使用TCP/IP協議時,客戶端可以通過連線字串中的例項已偵聽的特定埠或例項名並使用SQL Browser服務解析例項名的方式直接與命名例項互動。如果使用的是預設例項,可以不用SQL Browser服務直接連線。


    當客戶端使用命名管道與例項通訊時,通訊總使用445埠。這個埠通常用於檔案和印表機共享。如果不計劃使用命名管道,那麼最好禁用檔案和印表機共享並在防火牆中阻止445埠降低攻擊風險。

SQL Server所需埠

    上面說了很多關於埠的問題,那麼下面來詳細介紹一下SQL Server所需的埠:

    為了讓SQL Server穩定執行,下面的埠不要隨意佔用,但是預設1433埠在很多時候應該修改,以防攻擊者攻擊,這些埠號在防火牆中通過放行和阻止來控制外部與SQL Server的互動。

功能/元件所需埠
預設例項TCP 1433,可以由DBA修改
命名例項動態埠,可由DBA修改
預設例項上的DAC(專用管理員連結)TCP 1434
命名例項上的DAC動態埠
SQL Server Browser 服務UDP 1434
HTTP端點上的例項TCP 80,可由IIS管理員修改
HTTPS端點上的例項TCP 443,可由IIS管理員修改

Service Broker

沒有預設值,通常使用4022.
資料庫映象沒有預設值,通常使用7022,如果多例項伺服器,那麼埠號通常以加一的形式累加
AlwaysOn可用性組沒有預設值,但是通常使用映象的埠號。
複製(Replication)中連線例項的部分使用例項的埠號
複製中連結Web sync部分TPC 80,可由DBA或IIS管理員修改
複製FTPTCP 21,可由DBA修改
複製-檔案共享UDP 137-138,TCP 139,如果需要NetBIOS則TCP 445也需要
T-SQL debuggerTCP 135
SSASTCP 2382,可由DBA修改
SQL Server Browser 服務(與命名例項的SSAS搭配)TCP 2382
HTTP上的SSASTCP 80,可由IIS管理員修改
HTTP上的SSAS PivotTableTCP 80,可由IIS管理員修改
通過HTTP的SSRS Web ServiceTCP 80,可由IIS管理員修改
通過HTTPS的SSRS Web ServiceTCP 443,可以由IIS管理員修改
SSIS執行時(runtime)TCP 135
WMITCP 135
MSDTCTCP 135
IPSecUDP 500和UDP 5000
其他略

相關推薦

SQL Server 安全——降低外圍威脅1——網路配置

    前面大篇幅介紹了SQL Server及作業系統的安全,現在是時候介紹一下外圍主要是網路層面的安全。這部分主要包括網路功能、服務和端點。因為絕大部分的攻擊都來自於網路,所以網路層的安全控制某種意義上可以說是最外層的防禦。本文先介紹一下網路方面的配置。網路配置    在介

SQL Server 安全——資料層面安全性1——架構

在安全性主體層級之下,SQL Server 為保護資料提供了一組豐富的功能。本章將介紹架構、所有權連結和繼承。本文集中介紹架構(Schema)。 正文: 如果學過程式語言特別是JAVA、C

SQL Server 安全——服務賬號安全性3——服務賬號的威脅與對策

在安全領域中,“攻”“防”一直在持續著,並且很不幸,攻擊者永遠處於主動地位,一切防禦方案都是基於已經發生的攻擊來制定的,但是深入理解原理,不僅可以快速應對攻擊,也能從中推測出一些可能的衍生攻擊方案並作出提前防禦。 本文將集中在服務帳號上的攻擊介紹。曾經看過一部外國電影,名字早忘了,但是有一句話一直記在腦海裡(

SQL Server 安全——資料層面安全性3——模擬Impersonation

模擬是指在不同安全主體的上下文下執行T-SQL語句或程式碼模組的做法。用來最小化許可權授予和授予許可權的使用者數,但是不影響執行時提升到所需的許可權。實際上,在會話或模組的執行期間,模擬起

SQL Server 安全——資料層面安全性2——所有權連結( Ownership Chaining)

Ownership Chaining SQL Server 2016提供了一種叫行級安全性(row-level security,RLS)的功能,但是這種功能是比較有限制的,標準的方式是使用檢視或儲存過程來限制資料返回。並且通過對檢視或儲存過程的授權,可以使得使用

SQL SERVER 經典語句大全必學1——基礎

一、基礎 1、說明:建立資料庫CREATE DATABASE database-name2、說明:刪除資料庫drop database dbname3、說明:備份sql server--- 建立 備份資料的device USE master EXEC sp_addumpdevice

SQL Server中的高可用性1----高可用性概覽

    自從SQL Server 2005以來,微軟已經提供了多種高可用性技術來減少宕機時間和增加對業務資料的保護,而隨著SQL Server 2008,SQL Server 2008 R2,SQL Server 2012的不斷髮布,SQL Server中已經存在了滿足不同場景的多種高可用性技術。    

SQL Server 安全——SQL Server 稽核1——概覽

在中提到過,安全分為主動安全和被動安全,前面關於賬號許可權的算主動安全,那麼被動安全指的是記錄使用者活動以避免不可抵賴性威脅。這個很重要,因為如果攻擊是由特權使用者發起,那麼基本上是很難阻止。

SQL Server 安全——SQL Server 安全模型3——資料庫級別安全性

在資料庫層面,以授權到安全主體來實現安全性。 相對於伺服器級別,資料庫級別稱為資料庫使用者和資料庫角色。 使用者: 通常情況下,資料庫使用者是從例項層面建立的登入名來實現。相同例項下,一

SQL Server 安全——安全元資料5——元資料自身安全性

    隨著元資料的使用頻率越來越高,安全性也越來越凸顯,因為從元資料中可以得到很多不應該隨意暴露的系統資訊。所以,絕大部分的元資料並不能隨意被檢視,通常都需要授權。    比如當一個使用者A被授權查詢B表,那麼這個使用者A就自動獲得了在sys.tables和sys.obje

SQL Server 安全——安全元資料3——稽核元資料

稽核除了應對使用者行為之外,還能進行“稽核稽核”以避免別人對自己的懷疑。比如一個惡意的 DBA關閉了稽核, 然後執行的是一個危險的行為, 則該操作本身將不會被稽核, 但 由於DBA已經關閉了審計,

SQL Server 安全——SQL Server加密1——加密概念

    加密是一種使用金鑰和證書的演算法來混淆資料的過程。如果沒有金鑰和證書,即使得到了資料,也無法得知資料的本來面貌,資料就沒有價值了。但是由於加解密本身就是一種非常耗資源(特別是CPU跟I/O )的計算操作,同時加密後的資料本質上會增大,所以也往往會帶來效能的下降。所以一

SQL SERVER 經典語句大全必學4——資料開發-經典

四、資料開發 1.按姓氏筆畫排序:Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as //從少到多 2.資料庫加密:select encrypt('原始密碼') select pwd

SQL SERVER 經典語句大全必學2——提升

二、提升 1、說明:複製表(只複製結構,源表名:a 新表名:b) (Access可用)法一:select * into b from a where 1<>1(僅用於SQlServer)法二:select top 0 * into b from a2、說明:拷貝表(拷貝

SQL Server 資料庫部分常用語句小結

9. 查詢備份還原資料庫的進度。 select command ,percent_complete ,est_time_to_go=convert(varchar,(estimated_completion_time/3600000))+' hour, ' +convert(varchar,(estimat

SQL Server 全文索引的硬傷轉載

本文關鍵字:SQL Server全文索引、CONTAINS、FREETEXT、CONTAINSTABLE、FREETEXTTABLE等謂詞。 想象這樣一個場景:在DataBase_name.dbo.Table_name中有一個名為Title(標題)和Contents(內容)的欄位,現在需要查詢在Ti

sql server中quotename()函式的用法轉載

操作sql server尤其是寫儲存過程時,要用到各種各樣的函式,今天就總結一個quotename()的用法。1.語法: quotename('character_string'[,'quote_character']) []裡面的內容說明可以省略,預設情況下,說明用'[]'引用。 

MS SQL SERVER匯出表結構到Excel

今天準備整理下手裡面幾個資料庫,形成一個表結構文件,方便以後維護使用。 網上找到一個指令碼還不錯,小小的修改就滿足了我的要求,執行完SQL指令碼。 在結果就能看到資料庫所有表的結構,這個時候只要全選,然後右擊出來屬性框,選擇將結果另存為,這個時候您只要選擇匯出CSV,然後

深入解析SQL Server並行執行原理及實踐

在成熟領先的企業級資料庫系統中,並行查詢可以說是一大利器,在某些場景下它可以顯著地提升查詢的相應時間,提升使用者體驗。如SQL Server、Oracle等, MySQL目前還未實現,而PostgreSQL在2015實現了並行掃描,相信他們也在朝著更健壯的企業級資料庫邁進。RDBMS中並行執行的實現

SQL Server資料庫新手入門學習總結

3.查詢 簡單查詢,使用TOP子句 查詢結果排序order by 帶條件的查詢where,使用算術表示式,使用邏輯表示式,使用between關鍵字,使用in關鍵字, 模糊查詢like 在查詢中使用聚合函式:sum(x),avg(x),min(x),max(x),count(x),count() 使用分組查詢g