2012年3月23日 星期五

如何設定防毒軟體排除SQL Server的相關設定

        防毒軟體其實一直以來扮演著非常重要的角色,但是相對的有時候與許多不同的應用程式的合作上,反而會造成 "些微" 的相互影響,由其是資料庫的部份,所以在這篇我們就來介紹如何進行SQL Server與防毒軟體間的設定,在之前的文章中,我曾經介紹過,在Windows 2008R2上可以安裝的防毒軟體 [Windows Server 2008 R2與防毒軟體],本篇我來介紹另一套軟體,名稱為 [Microsoft Forefront Endpoint Protection (FEP) 2010 ],我也以此軟體來進行設定。

檔案下載: Forefront Endpoint Protection 2010 Evaluation
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=7022

在使用前我們先透過 [Virus Bulletin] 的網站確認一下目前此軟體的表現,我選擇了幾個目前市面上比較常見的防毒軟體進行比較,結果如下,看起來其實也是有不錯的表現。


接下來我們來看一下此防毒軟體的資源使用率,在捉圖前,我先進行掃毒的動作,然後直接進行捉圖,從工作管理員中可以看到記憶體的使用量與CPU並不高,所以個人認為表現不錯。

CPU使用率約在3%以下,記憶體約使用5M左右。


1、Forefront Endpoint Protection 2010 下載安裝

1-1 目前下載的語系中並沒有繁體中文,你可以先下載英文版,但是請大家不用緊張,因為下載後會自動變成中文的語系,我猜應該是跟你的作業系統語系有相關,所以自動切換的。

1-2 後面的步驟,請接續一步一步的裝下去吧。






1-3 安裝完成後,會嘗試的透過網路進行更新。



1-4 更新完新後,建議可以先進行系統掃描。


2、防毒軟體與SQL Server的設定。

2-1 開啟 Fontfront 的主控台,選擇 [設定] -> [已排除的檔案類型],請將下列的副檔名輸入。
  • mdf
  • ldf
  • ndf
  • trn
  • trc
PS:此處我與KB不太相同是我沒有將bak的副檔名也輸入,這個可以看你的情況,因為在我的環境中有時候bak的檔案也滿多的,所以我也希望可以掃描。


 2-2 選擇 [設定] -> [已排除的檔案與位置],請將下列的檔案路徑加入。
  • C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA
  • C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\OLAP\DATA
  • C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\OLAP\Temp
  • C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\OLAP\Backup
  • C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\OLAP\OLAP\Log
PS:檔案路徑的部份,建議可以將你備份的存放位置也加入。

2-3 選擇 [設定] -> [已排除的程序],請將下列的程序加入。
  • C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\OLAP\bin\MSMDSrv.exe
  • C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\Reporting Services\ReportServer\Bin\ReportingServicesService.exe
  • C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\\MSSQL\Binn\SQLServr.exe


參考連結:
is your Anti-Virus Strangling SQL Server?
http://blogs.msdn.com/b/boduff/archive/2009/07/27/is-your-anti-virus-strangling-sql-server.aspx
How to choose antivirus software to run on computers that are running SQL Server http://support.microsoft.com/kb/309422/en-us
Forefront Endpoint Protection 2010 Evaluation
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=7022
Virus Bulletin:VB100 Results
http://www.virusbtn.com/vb100/archive/compare?tab=onDemand&id=52&id2=15&id3=10&id4=84&id5=93&id6=3

關鍵字:SQL ServerAnti-VirusantivirusMicrosoft Forefront Endpoint Protection

2012年3月19日 星期一

如何啟用SQL Server的SSL加密

        資料庫中通常包含了許多的重要資料,由於個人資料保護法的通過後,資料的保護更是重要,雖然資料庫大部份是放置在防火牆之後,較少被外部的人直接進行資料的存取,藉以減少資料竊取的可能性,但是在防火牆內仍有可能被透過封包監控的方式,進行資料的捉取,造成資料的外洩,所以這時候如果真的想對資料進一步的保護時,可以透過啟用SSL的方式藉以保護資料,當然啟用前還是要考慮資料傳輸上的負載,因為SSL會將原本的資料編碼,所以在傳輸時會造成資料量變大,而加密時 Key 的長度越長資料傳輸量就會更多,所以本篇,我們就來介紹如何設定SQL Server啟用SSL的方式。

1、產生測試用的SSL憑證(如果已有憑證時,可跳過此步驟):
在設定前我們需要先行申請一張SSL憑證,而此憑證通常是由第三方所發送出的,由於大家也往往會卡在這個地方,所以在測試上,我們可以先行產生一張測試用的SSL憑證,我們可以透過Windows SDK 內建的一個程式 (makecert.exe) 產生SSL的憑證。

1-1 MakeCert檔案下載
由於我有安裝Visual Studio 2010與 .NET Framework,所以檔案是放置在我的下列目錄中。
檔案路徑:C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\makecert.exe

MakeCert 下載位置:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa386968(v=vs.85).aspx 

1-2 產生憑證
接下來我們來透過 MakeCert.exe 的程式來產生一個測試用的SSL憑證,由於SQL Server對於SSL的憑證有一些特別的要求,所以設定前請依照下列的方式進行。

請開啟一個 DOS 視窗,切換目錄到此檔案的路徑後,輸入下列的指令,完成後此憑證即會自動匯入 [憑證 – 目前的使用者] -> [個人] -> [憑證]之中。
makecert -r -pe -n "CN=SQL2012-RTM.caryhsu.com" -b 03/16/2012 -e 03/15/2016 -eku 1.3.6.1.5.5.7.3.1 -ss my -sr currentuser -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12

PS:
  • 上述的指令,請記錄修改日期的部份與CN後面的名稱,SQL2012-RTM是我的電腦名稱,而caryhsu.com是我的domain name。
  • 如果目前的帳號並非你的SQL Server啟動帳號時,請依照下列的動作將憑證先行匯出,然後再匯入到[憑證 (本機電腦)] -> [個人] -> [憑證]之中即可(請記得此步驟需要連同私密金鑰也一起匯出)。
  • 憑證的要求條件,請參考連結 [Encrypting Connections to SQL Server]。


  • 2、設定SQL SERVER端的通訊協定。

    2-1 請點選 [開始] -> [所有程式] -> [Microsoft SQL Server 2012] -> [組態工具] -> [SQL Server Configuration Manager] -> [SQL Server 網路組態] -> [MSSQLSERVER的通訊設定] -> [內容]

    2-2 切換到 [憑證] 之後,你可以在憑證的清單中看到剛剛產生憑證,此時選擇此憑證即可。

    2-3 切換到 [旗標],此時請將強制加密設定為 [是],然後選擇 [確定]。
    PS:此處的加密主要是強制性對所有的 SQL Server 連線進行加密,如果此部份選擇為 [否] 的時,則決定於client是否啟用加密模式進行連線。

    2-4 設定完成後,你必須重新啟動SQL Server Service。


    3、驗證與測試SQL Server SSL的啟用是否正常。

    3-1 重新啟動後,請確認SQL Server Error Log是否有下列的資訊。
    The certificate [Cert Hash(sha1) “431786DB0D1CC78DEEEB3A4B5F0C31A541DE1C951”] was successfully loaded for encryption.
    PS:中間的亂碼主要是此張憑證的憑證指紋,如下表所示。



    3-2 測試連線是否有啟用SSL。
    在目前為止我們並沒有設定Client連線的部份,那是否SSL已有啟用,但由於我們在 2-3 中已有設定 [強制加密] ,所以Client端可以不需要進行設定,因為Server會強制對所有的連線進行加密。

    由於要觀察Server與Client端的通訊模式,所以我們在此透過網路封包捉取的方式進行監測,如果如下:


    PS:封包捉取的軟體非常多,在此我是透過官方提供的 Microsoft Network Monitor 進行,下載網址如下:
    Microsoft Network Monitor 3.4
    http://www.microsoft.com/download/en/details.aspx?id=4865



    參考連結:
    Enabling Certificate for SSL on a SQL Server 2005 Clustered Installation
    http://blogs.msdn.com/b/jorgepc/archive/2008/02/19/enabling-certificates-for-ssl-connection-on-sql-server-2005-clustered-installation.aspx
    SQL Server fails to start with error 17182 "TDSSNIClient initialization failed with error 0xd, status code 0x38" when server is configured to use SSL
    http://support.microsoft.com/kb/2023869
    如何啟用 SQL Server 的執行個體的 SSL 加密,使用 Microsoft 管理主控台
    http://support.microsoft.com/kb/316898
    Encrypting Connections to SQL Server
    http://msdn.microsoft.com/en-us/library/ms189067.aspx
    憑證建立工具 (Makecert.exe)
    http://msdn.microsoft.com/zh-tw/library/bfsktky3(v=vs.80).aspx
    How-to use MakeCert for trusted root certification authority and SSL certificate issuance
    http://blogs.technet.com/b/jhoward/archive/2005/02/02/365323.aspx
    如何:啟用 Database Engine 的加密連接 (SQL Server 組態管理員)
    http://technet.microsoft.com/zh-tw/library/ms191192.aspx
    How to enable SSL encryption for SQL Server 2000 if you have a valid Certificate Server
    http://support.microsoft.com/kb/276553/en-us


    關鍵字:SQL ServerSSLCertificateEncryptionSecure Sockets LayerMakeCert

    2012年3月13日 星期二

    SQL Server 分散式架構 - 點對點交易式複寫 + NLB

            在我之前的文章中 [SQL Server 負載平衡架構介紹(Load Balancing)],介紹了多種不同的負載平衡的方式,但其實在多種架構中,我個人比較喜歡的是透過複寫機制(Replication)來進行,複寫類型主要有下列三種,大家可以點選下列的說明進行參考,在這就不特別介紹。SQL Server的Load Balancing也是最多人問的一塊,所以在這邊介紹,而且之前的經驗上覺得得在專案的初期大家往往沒有一個好的架構開始進行,往往等到系統後期或上線後才進行調整,結果造成相當大的成本浪費,如設定的重新配置與程式碼的改寫,所以希望透過本章節可以讓大家多認識一個不錯的架構,再請大家多多參考。

    複寫類型:

  • 快照式複寫考量
  • 交易式複寫考量
  • 合併式複寫考量

  • 在複寫的架構下,個人認為最佳的方式是可以多台同時進行讀寫,而且資料交換的時間又短(適交易量而定,但這是所有複寫類型中資料交換最快的一種),如下圖左邊的部份,但導入前需特別注意前端應用程式設計的部份,以免造成資料的衝突,最常見的是當資料表主鍵設計時,常常只利用流水號來進行,但是這樣的方式並不適合,容易造成資料寫入時的問題,尤其是當你表格為 Master/Detail 時,更容易有問題。在不改變架構的情況下,其實可以參考右邊的架構,也就是一台負責寫入,其他台的電腦負責讀取,這種情況下需要調整的程式就會非常的少,但是卻可以達到很大的效益,而且當你的交易越多或有效能上的問題時,就可以一直串連並分散交易,達到擴充的功能。

    在左邊的架構中前端的主機可以對A與B之間一台進行寫入的動作,之後資料庫端就會自動進行資料的同步,在本章中我們將介紹SQL Server 2005之後交易式複寫中擴充的一個新功能,點對點交易式複寫 (Peer-to-Peer Transactional Replication),讓A電腦與B電腦同時可以有讀寫的功能,另外透過NLB接收前端的需求,然後再平衡的分配給後端資料庫,進行達到 SQL Server - Load Balancing 的架構。




    配備說明:
    第一台
    電腦名稱:WIN-2008R2-1
    OS:Windows 2008R2 Enterprise
    DB:Windows 2008R2 Enterprise
    說明:第一個節點。

    第二台
    電腦名稱:WIN-2008R2-2
    OS:Windows 2008R2 Enterprise
    DB:Windows 2008R2 Enterprise
    說明:第二個節點

    設定流程:

    NLB (Network Load Balancing) 設定:
    關於NLB的設定,在請大家參考我之前的著作 [網路負載平衡 - Reporting Service 與 NLB 的結合],其中有介紹到NLB的部份,我就不在此特別說明,謝謝。

    點對點式複寫功能 (Peer-to-Peer Replication) 設定:
    1、設定第一台的發行集。
    1-1. 登入第一台電腦,並開啟SQL Server Management Studio
    1-2. 點選 [複寫] -> [本機發行集] -> [新增發行集]



    1-3. 選擇你要進行複寫的資料庫。

    1-4. 請選擇 [交易式發行集]。

    1-5. 選擇要進行複寫的資料表,可以全部選取。
    PS:這部份如果有效能上的考量時,你可以選擇特定的資料表進行複寫即可,由其在合併式複寫上,越多的表格更由於造成資料複寫上的延遲。

    1-6. 如果有需要特別設定篩選的資料時,請在此設定或請選擇下一步直接跳過即可。

    1-7. 由於我是透過手動同步各個節點的資料庫,所以在此處不設勾選。

    1-8. 設定複寫代理程式安全性,請記得最好使用網域帳號進行。

    1-9. 請勾選 [建立發行集],如果你想保留此次的設定,你可以勾選產生指令碼,日後直接套用即可。

    1-10. 請輸入發行集的名稱。


    1-11. 請再點選 [複寫] -> [本機發行集] -> [發行集名稱] -> [屬性]。

    1-12. 請將 [訂閱選項] -> [點對點複寫] -> [允許點對點訂閱] 設定成 [True],然後選確定。


    2、設定第二台主機的散發
    2-1. 登入第二台
    2-2. 點選 [複寫] -> [設定散發]


    2-3. 選擇第一項,也就是本身為散發者。

    2-4. 請設定第二台主機上的一個指定目錄進行分享,而且讓第一台也可以進行存取與寫入。

    2-5.  此步驟請依照預設值即可,如有需要再自行修改。

    2-6. 設定發行者與散發資料庫,並選擇下一步。

    2-7. 請勾選 [設定散發],如果你想保留此次的設定,你可以勾選產生指令碼,日後直接套用即可



    2-8 設定完成後,請將你設定複寫的資料庫進行完整備份,然後還原到第二台上,藉以確保第一台與第二台上的資料與Schema都相同。

    3、設定點對點式複寫功能 (Peer-to-Peer Replication)
    3-1. 登入第一台
    3-2. 選擇 [複寫] -> [本機發行集] -> [發生集名稱] -> [設定點對點拓撲]


    3-3. 選擇發行集。

    3-4. 在空白處點選滑鼠右鍵 -> [加入新的對等節點]。

    3-5. 登入你要加入的節點主機。


    3-6. 選擇加入的節點中的資料庫,請注意此處的識別碼必須都不相同。

    3-7. 加入後你就可以看而有一條雙箭頭的線將兩個節點連結。

    3-8. 設定記錄讀取器代理程式的安全性,這個部份也是請使用網域帳號進行設定。

    3-9. 如果每一個節點的安全性設定皆相同時,可以勾選下方的選項即可。

    3-10 跟上一個步驟相同。

    3-11. 由於在2-8的時候已經手動的初使化每一個資料庫了,所以請選擇第一個選項。



    3-12 最後在二台的 [本機發行集] 上你就可以都有相同的發行集名稱。


    關於複寫的進作情況,你可以透過 [複寫監視器] 進行確認,當然這個架構在使用上,需特別注意衝突的問題,通常都是前端程式設計的不小心所造成,而你可以從複寫監視器或SQL Server Error Logs中看出,但此架構並不會自動進行衝突的排除,所以必須手動排除,所以在系統上線前請多多測試與前端程式的部份,以免日後的衝突發生,造成資料的不正確。


    參考連結:
    SQL Server 的分散式資料複寫技術
    http://technet.microsoft.com/zh-tw/library/dd125513.aspx
    SQL Server Replication
    http://msdn.microsoft.com/en-us/library/ms151198.aspx
    Managing SQL Server 2005 Peer-to-Peer Replication
    http://technet.microsoft.com/en-us/magazine/2006.07.insidemsft.aspx
    Peer-to-Peer Transactional Replication
    http://technet.microsoft.com/en-us/library/ms151196.aspx
    How to: Configure Peer-to-Peer Transactional Replication (SQL Server Management Studio)
    http://technet.microsoft.com/en-us/library/ms152536.aspx
    使用複寫監視器監視複寫
    http://msdn.microsoft.com/zh-tw/library/ms151780.aspx


    關鍵字:Peer-to-Peer ReplicationNLBNetwork Load BalancingDistribution ArchitecturePeer-to-Peer Transactional Replication