2009年8月6日 星期四

SQL Server 2008 複寫實作

你不可不知的複寫常識
複寫用來複製資料和資料庫物件的一項強大的功能,是大型資料庫或資料庫同步維持資料一致性的功能
透過各種網路、撥接連線,將資料散佈到不同地點上,即然是複寫了顧名思義,就是將資料同步的寫到各個不同的資料庫伺服器上
當然在整個資料庫的複寫中,也有考量到效能處理及資料庫結構問題,又分為三種複寫架構:交易式、合併式、快照式。

快照式複寫:資料變更數量大,但次數不用太頻繁的同步複寫時,最適合使用快照式複寫。
在所有複寫功能中快照式在「發行者」端負擔較小,因為他不用追踨累加變更的資料,只需要將資料庫中的資料做快照即可。
例如,在整個整批交易中,每天共有三十萬筆資料,一天只需要傳回總部一次,那麼快照式複寫就可以較有效率的將資料複寫回去。
※此種複寫需要每一張表都有Identify欄位。

交易式複寫:當資料有任何改變時,會主動的傳遞到訂閱者,預設交易式複寫是唯讀存取,因此在訂閱者端有任何資料的改變
是不會傳遞回到發行者端的。不過交易式複寫是可以設定成訂閱者亦可更新資料。
這種複寫狀態會有較大的彈性並且於資料端有大量的更新或插入、刪除的動作,適合非MS SQL Server資料庫做同步的複寫方式。
※此種複寫在發行資料庫下會主動的配置交易記錄,透過交易記錄來執行複寫轉送,當使用這種複寫方式在資料尚未完全移動到散發資料庫前,記錄檔無法被截斷。
※所有交易式複寫的資料表上,必須包含主索引鍵,否則無法被利用來發送。

合併式複寫:與交易式複寫很類似,是在發行者上發佈後,訂閱者存資料時,之主動的交換最後一次同步處理所變更過的資料。
通常這種複寫是較適合在多個訂閱者可能會在不同時間之下更新相同的資料,較容易產生資料衝突,當資料產生衝突時,必須由DBA進行排解。
※此種複寫會自動建立一組GUID資料行,且支援Timestamp資料行,在訂閱者套用快照集時會重新產生timestamp,驗證timestamp是否為可用快照。

環境限制和需求
不論在那一種複寫狀況之下,建立快照集資料夾的安全問題都是需要被重視的,因此在資料庫複寫的過程中,快照夾實體目錄權限就必須考慮進來,
使用何種複寫則必須視你所貼近的環境來選用,若資料庫設計時,並無使用identify,或並無使用索引欄位,那麼於快照及交易複寫就不適用,除非改變資料庫內容。

實作注意事項
在實作時,必須先選擇何者為發行者、散發者、訂閱者…等等的角色定義。(總是要知道誰負責發資料、誰是來接受同步資料的角色吧)
多數的工作是著在發行者身上,其它的資料處理同步,就可以透過代理程式來決定運作在訂閱者發起同步令命,還是由訂閱者發起呢?
若是遠端的資料庫同步(跨WAN)則必須透過VPN達成複寫或是Web同步處理方式,畢竟複寫是必須透過網芳、或XML訊息傳遞來處理。
在實作的過程中,有一個問題產生了,因SQL是建置在WINDOWS之上,又有使用網芳傳遞,那麼如何確認每個資料庫的同步是沒有問題的呢?
因此在複寫的安全架構下,必須將SQL Server Agent的啟動帳戶設定為相同的實體本機帳號,另外網路上存取網芳亦必須開通由這幾台db可存取。

實作環境說明
目前Jason的測試環境是以兩台Windows 2008 Server作為平台安裝SQL Server 2008(分別為:WinSQLSvrA, WinSQLSvrB),並且兩台server兩網卡
一個是將兩台網卡串接在一起做為NLB的heartbeat,另一張網卡則是對外提供服務,並設定為NLB。示意圖如下:
DB NLB

建立本機使用者
分別於兩台Server上新增乙使用者,並命名為SQLReplace,並設定密碼永久有效,而密碼長度就依照各安全要求囉!
新增使用者1
接下來將兩台server服務中的SQL Server Agent(MSSQLSERVER)內容中的登入設定成為以SQLReplace帳號啟動
※完成後務必將服務重新啟動
1.找到SQL Server Agent(XXX)服務
設定服務1

2.於服務上按右鍵選擇內容。
設定服務2

3.於登入頁籤中輸入複寫共用帳號SQLReplace並登打密碼。
設定服務4設定服務5

4.並重新啟動服務,只要服務啟動沒有錯誤即可完成該設定。
設定服務6

建立複寫集目錄
預設複寫集存放目錄為C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\repldata
設定複寫存放位置權限及開啟共享,設定SQLReplace帳號可以完全控制該目錄
設定目錄權限1

設定目錄權限2

設定目錄權限3

設定複寫發行集
接下來,我們將WIN-SQLSvrA主機設定為複寫的發行者
1.展開複寫功能,並於本機發行集上按右鍵,新增發行集。
設定發行0

2.指定以Win-SQLSvrA為散發者。
設定發行2

3.必須於快照集指定為網路路徑
複寫進存放位址置放於\\Win-SQLSvrA\repldata
設定發行3

4. 設定發行複寫的資料庫Web_Jason
設定發行4

5.本例選擇以合併式複寫發行
設定發行5

6.核選所需要複寫的項目,可依照需求定義,亦可選擇發行的種類來複寫。
設定發行6

7.選擇可接受的訂閱者類型及其版本。
設定發行7

8.此時會依照所選擇的複寫類型而告知必須加入的動作及後續的作業。
設定發行8

9.依照所需的內容可以以篩選的方式將資料同時處理到所需的發行集中。
設定發行9

10.快照建立時,可選擇多久的時間建立一次快照,因為合併式是即時複寫及快照複寫兩種,
因此下面定義的快照集代理程式是指拍快照的時間,而複寫是即時複寫的,
快照完成時間會再進行一次複寫,使有誤差的資料庫完全相同。
設定發行10

11.複寫集是透過SQL Agent來執行的,因此在代理程式中,必須設定相關安全性的需求(連入帳戶、處理帳戶…等等)
設定發行11

12.若是已將SQL Server Agent重新設定以帳號啟動,則可選擇以服務帳號執行,若無則亦可指定帳號執行
連接到發行者的部份,則可直接選由模擬處理帳號即可,不指定帳號登入。
設定發行12
設定發行13

13.接下來選擇必須完成的動作(核選建立發行集)。
設定發行14

14.給發行集名稱一個唯一的名字吧!
設定發行15

15.接下來隨即進行發行集的產生及相關的設定。
設定發行16

16.複寫發行集設定成功…
設定發行17

設定複寫安全性
因Jason一時不查造成有網友實作時發生權限問題,因此在本部份針對資料庫必須設定的安全性加以說明。
隨著訂閱的方式不同,發行集的內容不同,其安全性的設定也會有所差異
在此建議大家依照所需要的環境及安全設計到下面的連結中查詢(複寫方式不同和代理程式的訂閱不同會有不同設定喲!)
http://msdn.microsoft.com/zh-tw/library/ms151868.aspx

1.於Win-SQLSvrA上將SQLReplace帳號加入到登入中,於安全性上按右鍵->新增->登入。
SQLA1

2.將Win-SQLSvrA中的SQLReplace帳號點選進來,依照預設值即可。
SQLA2

3.給予SQLReplace帳號具有Distribution及欲提供複寫的資料庫(Web_Jason)具有db_Owner的權限。
SQLA3

4.接下來請切換至Win-SQLSvrB伺服器上,並且將SQLReplace帳號加入登入中
並設定欲成為複寫目標的資料庫(Web_Jason)具有db_Owner權限。
sqlb1

sqlb2

sqlb3

訂閱複寫
接下來再以Win-SQLSvrB設定為訂閱者,連接到了Win-SQLSvrB後,於複寫中展開本機訂閱
1.於本機訂閱上按下右鍵,選擇新增訂閱。

設定訂1
設定訂2

2.新增訂閱時,必先指定發行者,因此於發行者下拉式方塊中選擇”尋找SQL Server發行者”
設定訂3


3.接下來直接連接至Win-SQLSvrA中
設定訂4

4.當連線到發行者後,可在發行者發行的發行集中看到剛剛建立起的發行集Web_Jason_Replace。
設定訂5

5.若發行者主機較強,可選擇散發者上執行代理程式,若希望降低發行者的負擔可選擇在訂閱者端執行代理。
設定訂6

6.接下來選擇要訂閱的資料庫名稱
※資料庫不需要是同名稱。
設定訂7

7.依據代理發行其連接設定
※若已設定SQL Server Agent執行身份,可不需指定連接至散發者帳號密碼。
設定訂8
設定訂9
設定訂10

8.接下來指定同步的排程可指定為連續執行
※意指,有任何變更隨即同步複寫,若選擇在有需要時執行,則是依照發行者設定的排程時間執行
若選擇定義排程,則可自我訂義排程時間。
設定訂11
設定訂12

9.衝突發生時,以何者為何優先處理順序,預設值為依照先丟遞至發行者為優先。
設定訂13

10.接下來即可建立訂閱,並完成訂閱。
設定訂14
設定訂15

啟動初始化

在設定好訂閱後,於Win-SQLSvrA啟動初始化
1.於發行集中展開後,按右鍵檢視快照集代理程式狀態。


接下來點下代理程式的啟動按鈕即可。



檢視複寫監視器
複寫監視器是一個可以看到複寫的所有狀態及動作的監視器,在任何一台DB上都可以直接檢視,只需要做下列的設定即可。
1.於複寫功能上按右鍵,點選啟動複寫監視器。


2.點選我的發行者,並於右手邊的視窗中,選擇加入發行者。



3.在加入發行者處選擇加入SQL Server發行者÷並輸入發行者的帳號及密碼,即可完成加入發行。



接下來即可在複寫監視器中看到複寫的狀態及各項複寫過程所遇到的錯誤問題。

呼~~!好長一篇,有任何問題再跟大家一起討論,先休息喘一下吧!

如有看不懂的地方,可以大家一起討論。

可參考Microsoft Technet的SQL複寫http://technet.microsoft.com/zh-tw/library/ms151198.aspx

2009年8月5日 星期三

「網頁安全工具 」研討會!!免費的喲~~~!

你是不是已經被駭客盯上了? 您一定要來! 8 / 11(二) 免費參加 「網頁安全工具 」研討會

http://www.informationsecurity.com.tw/waf2009/

轉貼至資安人,有興趣的可以去玩玩看喲!

2009年8月1日 星期六

K書筆記本-Access controls(03)

存取控制主要是達成Integrity(一致性),在上一篇中討論的存取控制類型及種類,是讓管理者思考在各個面象可有納入管理中
那麼,存取了系統代表可以存取資料嗎?這個答案很肯定的是錯的,有權限連入系統,不代表你可以看、修改、刪除資料
那麼要進入系統我們如何來進行存取控制呢?這個部份就以Identification, Authentication, Authorization, Accountability四個步驟。

Identification(識別):一般而言,使用者在進入系統前,必須由使用者以提供可識別的資訊給系統。
Authentication(驗證):由系統對使用者所提出的可識別資訊加以驗證。
Authorization(授權):使用者身份被驗證後,授予其應有的權限、身份…等。
Accountability(可規責):當使用者登入系統成功後,對於使用者的動作必須達成可規責,完整的記錄使用者行為。

那麼在上敘的四項步驟中,各別就這麼簡單,沒有其它的議題了?
當然不可能,提到識別,除了選擇系統要以何種方式做識別呢?UserID?帳號編號?還是PIN(Personal Identifiaction Number)?
還是選擇以生物認證做為實體存取控制的機制呢?這一些都是在實體端及科技端所需考量的問題!

那麼系統以何種做驗證,也就是依照識別時所選擇的內容來供驗證囉!
例如:你選擇以帳號名稱為識別,那麼密碼就是你的驗證基礎,以PIN為識別,可以用Token或是指紋做為驗證…等等
在驗證又分為三種方法:Knowledge(Something you know), Ownership( you have), Characteristics (you are / you do)。
在knowledge的部份,當然是你知道一些什麼事情囉,例如:password(密碼),問題設計…等等方式來達成。
那麼在Ownership的部份呢?!你所持有些什麼?像是Tokens, Smartcards, Memory Cards…等等。
光是一個token就又分為有Asynchronous(非同步), synchronous(同步)
在非同步基礎下,又稱為Challenge-Response,使用者在登入電腦時,必須透過手持設備將看到的Challenge & PIN輸入進行驗證
此時非同步驗證時,就可以得知,你手上所持有正確的Token,因此透過兩種不同的傳輸管道來達成驗證的目的。
那麼同步的部份呢?又分為有even-based及time-based,event-based是指,每一次按一下token都會產生一個PIN碼
這個PIN碼的有效性是在你輸入完後,下次一要再登入系統時才會重新產生。
time-based則是依照時間間隔來判斷了,當時間間隔為10分鐘,那麼在此10分鐘內,你所產生的PIN碼都會是相同的。
因此event based可說是每次輸入才變,而time based即是每間隔就改變
像在網路上常見的圖形驗證,就是屬於event based。

smart Cards是目前使用最廣也是便宜的驗證物件,分為接觸性及非接觸性
在接觸性的基礎像信用卡的磁條,沒有接觸到就讀不到
而像是RFID就屬於非接觸性的物件,在卡上含有micro process,可自動演算,可儲存資料供驗證使用
只要有讀取器,在不接觸到卡片,依然可以存取卡片上的資料。
memory cards較常見的就是磁條卡,將資料存放在磁條上,必須持卡人提供卡片供讀取才可使用。

近來爭議最大的Characteristic就是利用生物的特徵,以供做為驗證用
在此也會有一種迷思,那麼生物認證(Biometrics)到底是identification還是Authentication呢?
其實,兩者都算,如果把生物驗證拿來當作身份以供識別就是實體的identfication ;簡稱BIP
拿來當作驗證就是邏輯的Authentication ;簡稱BAL
生物認證是目前各種機制中,被認定為最佳的選擇,但是因有個資敏感性的問題,這也是一種相當難以處理的議題
一般而言,生物認證分成實體的(Physiological)及特徵的(Behavioral)
所謂的實體像是指紋(fingerprints), 虹膜(Iris), 視網膜(Retina), 面紋(facial looks), 掌型(hand geometry)…等等。
而特微的就像是聲紋(Voice inflections), 鍵擊(Keyboard strokes), 簽名特徵(Signature motions)
那麼在生物認證中,總有一個精準度的評斷吧,不然我們如何採購正確驗證設備呢?
在整個生物認證中,被拿來做為評比的重要的三個指標:
FRR(False Reject Rate),FAR(FalseAccept Rate) ,CER(Crossover Error Rate)
FRR:錯誤拒絕率,把對的驗證為錯誤的屬於Type I error
FAR:錯誤接受率,把錯誤的驗證為對的屬於Type II error
CER:交叉錯誤率,集合FRR及FAR兩個曲線的交叉點。
基本上來說FRR是安全的,安全愈過,愈容易被誤判拒絕,變成使用者的不便利,要多試幾次。而FAR則是要命的數字
一般是10萬分之1到百萬分之1為可接受範圍,因此,生物認證,最好的就是CER及FAR愈低的愈好
image

在生物認證中,即然有實體的、有特徵的,當然依照其屬性來分也分有靜態的及動態的;
靜態的是與生俱來,不容易改變的像指紋、虹膜…等等,動態的就像是擊鍵、聲紋…。
較理論的方面向分為:Consistency(各地一致)、Reliability(可信任)、Usability(使用性)、Efficiency(效率性)及Scalability(擴充性)
綜合兩種以上的驗證基礎(something you know, something you have)叫做two-factor authentication
而三種以上的驗證(something you know, something you have, something you are;do )就稱為Multi-factor又叫Storng authentication。

畢竟在安全控制中不可能只把驗證基礎只拿來做為門禁系統,那麼檔案存取呢?系統存取呢?或者是其它的存取控制所需要的管理機制
這一些只是存取控制中,供識別使用者是「正確」的使用者,當然不管是生物認證,還是其它的驗證方式,都有管理的需求
隨著科技進步愈來愈快,韓國女子用假指紋貼布順利通關美國,像是知名小說改編的電影「天使與魔鬼」中
以虹膜做為辨識的裝置,而造成劇中角色被挖掉眼睛或是砍掉手指以供辨識,都是目前所遇到的問題及挑戰。