2009年8月13日 星期四

K書筆記本-Cryptography(01)

密碼學…天啊…這種看了會讓人真接趴倒在馬路上的東西怎麼k的下去,如果你即將面臨失業(老闆經營不善)
我想,你應該很有精神k的下去(就跟偶一樣啦!!!),密碼學是整個資訊安全的A.I.C.中一看就知道非C莫屬
但是…把密碼演算更重要的是維持訊息的完整性,而非只有保持訊息的機密性而以。

那密碼學在資安領域中又扮演什麼角色呢??各位還記得嗎??機密性所維持的是『避免有意或無意的洩露資訊』
那麼密碼學有那些基本目標呢?
1.確保敏感資訊的機密性(加密演算法)
2.確保資訊的完整性(digest)
3.確認通訊驗證(SSL, CA)
4.提供支援不可否認性的有效性(digital signature)
5.提供安全存取控制的基礎
6.對選擇昂貴的或是費時的調整(花錢或Free)

在密碼學這個領域中呢,有三個很關鍵的用詞,這三個用詞常常在我們的生活中出現,但是…大家統稱叫加密或密碼學
但是在老外的眼中可有著大大的不同~~!
Cryptography(密碼學;密碼使用法):針對文字密碼學為基礎的演算,是用來保護資訊傳遞的方法。
Cryptanalysis(密碼分析):密碼分析主要是用來分析密碼學的強度,不論是讀取、變更訊息的完整或是驗證密碼、演算法弱點問題。
※也可稱為破密分析(是我國國人最弱的技術)
Cryptology(密碼術):指研究密碼學或是密碼分析。

另外,在整個密碼的產出或是使用的過程中也有特定的關鍵用詞:
Plaintext/Cleartext(明文;明碼):也就是最原始的訊息內容。
Ciphertext/Cryptogram(密文;密碼):經過演算過後的訊息內容。
Encipher/Encrypt/Encode(加密;編碼):指的是將明文演算成為密文的過程。
Decipher/Decrypt/Decode(解密;解碼):指的是將密文演算回復明文的過程。

還有一些必須要再提出來的關鍵用詞:
Cryptographic Algorithm(密碼演算法):指著是數學方法的密碼演算操作。
Cryptosystem(密碼系統):是指裝置或處理使用在加密或解密操作的系統。
Cryptovariable;key(密碼變數;金鑰;):用於密碼演算中左右演算的可變因素。
key space(金鑰可用量):指的是key可用的總數,供選擇使用來做為密碼系統。

要把密碼學說的簡單一點程序就像下面的流程:


明 密碼系統 密

-> (演算法) ->
文 文

密碼學中很多文字其實都是有著相同意思,但是其深層的意涵又有著不同的用法和作法
因密碼學這個領域其廣度及深度是相當的廣大,要把整個密碼學一口氣說完,實在是難呀!!!

接下來再跟大家一起討論同步加密、非同步加密、訊息完整性控制、金鑰管理、
密碼學的使用、破密分析最後是資訊隱藏技術。

2009年8月12日 星期三

K書筆記本-Access controls(07)

要測試存取控制有沒有做好最好的方法就是進行測試,但是在測試的階段最怕的,就是造成正在運作的系統因測試而掛點,
一般用來測試存取控制有沒有最好的就是Penetration Testing(滲透測試),不論選用何種的測試攻擊均是為了找出系統的弱點,
找出根本原因再加以修補,避免在發生事情之前先找到弱點的存在。

所謂的滲透測試指的就是請有技術能力的人來做入侵的行為,這種執行入侵的人一般稱為道德駭客(Ethical hack),
透過界定要測試的範圍(包含測試的區域、工具、測試內容…)來執行測試,必須要指定測試的方法及測試的程序,
來確保系統不會因測試的過程影響其可用性,最後在找到弱點時經過授權時才能進行更進一步可能危害系統的步驟。

在界定測試範圍時可以有程式的安全、阻斷服務的可能性、透過遠端撥接入侵、或是找到未授權的無線網路、社交工程及大眾電信系統等等
每一項都是測試入侵的路徑,當然,在進行測試的時侯,亦可依照整個入侵的層度及所獲得的資訊做入侵。

基本上滲透測試分為外部滲透及內部滲透,若是希望可以找出真正的弱點,當然最好的就是外部滲透,若是要找出未有效管理的系統,
則可透過內部滲透找到問題的原因,在外部滲透的部份又可分為Zero-knowledge(又稱為黑箱測試)、
Partial-knowledge(依照了解的內容層度可分為灰箱或白箱),而在內部測試則可分為Full-Knowledge(又稱為白箱測試)、
Targeted(鎖定特定攻擊)、Blind(僅有少部份的資訊,且資訊安全人員是在不知情的狀況下進行測試,
可以測試出安全人員的反應及回報機制)及Double-blind(與blind不同處則是在入侵的過程中,是受到安全人員的監視之下攻擊。)

基本上來說,滲透測試與實際入侵無異,只是與入侵不同的是找到弱點後呈報,非利用,
測試步驟共分為四大步驟:Discovery(找出資訊;host scan)、Enumeration(列舉攻擊主機;Port scan)、Vulnerability Mapping(弱點對映;test)、Exploiting(達成攻擊)。
每一個步驟當發現任何弱點會問題時,若要再進一步的測試,則必需重新取得授權後才可以執行測試 。

當找弱點的過程中一定會遇到一些突發狀況,應該要予以避免,例如:應用程式發生失敗、系統crash掉…等等,若在已知的問題下,應該予以避免
萬一要測試的弱點不知道會有任何的問題產生,則必須在取得授權後才可以再進行更進一步的測試,若有利益問題則必須要求切核切結書,以釐清責任問題
當然整個測試的過程應要達成文件化,像已找到的弱點和可能存在的問題(保有need to know原則),保存IDS/IPS的Log(有攻擊軌跡),並且避免被未經授權的人存取log
最後針對整個滲透結果提出建議及執行教育訓練,以加強人員各項技能。

存取控制是整個安全管控的核心,任何一件事情、物件都必須有人管理,有人負責,以避免可能因為人的問題而威脅到企業本身的權益,並降低各項安全問題的發生。
這個才是做資安的王道呀!

K書筆記本-Access controls(06)

存取控制是透過使用者的存取過程必須被管理,那麼,有沒有更加有效的管理方式呢?
當然有,再利害的駭客,你給他的輸入界面只能輸入0~9、enter和backspace的鍵盤(Physically constrained user interfaces)
他還能有辦法在鍵盤上輸入數字以外的攻擊手法嗎???

資安首重於人,管人就必須有效的管理使用者行為,其中限制使用者的操作界面是最常見的做法
例如透過Menu,依照使用者所登入的權限不同,僅開放給予使用的選單及資源,那麼減少了與敏感、機密資料接觸的機會
自然要發生未經授權的存取資料也不容易發生。
資料庫的部份透過db views的功能(又稱為VBAC;View based access control)這種限制方式是當使用者必須存取資料庫
僅給使用者看一些與工作內容有關聯的動態資料時可以提供least privilege的限制,僅給最少可以使用的資源來完成他的工作。
如果再不行,還有加密這一條路,當使用者要存取讀取的資料時,所有的資訊均被指定的使用者將資料加密了
那麼,使用者將無法存取較機密的資料。

講到了存取控制難免有因為架構劃分為集中式及分散式架構,在集中式架構中不乏有3A(Authentication, Authorization, Accounting)架構的各項存取控制技術
像是RADIUS(使用UDP傳遞,僅支援同步驗證), TACACS+(由Cisco發展,為確保遠端存取控制系統,且支援多重驗證,使用者可以自行更變密碼,
以TCP傳遞做為基礎), Diameter(使用UDP支援PPP…等連線方式,支援手持設備,由SUN開發),分散式則不適合各地分公司的方式,且無法提供一次性認證
因此,在本項架構中,為使維護便利,多數均採用集中式管理,但必須做好職務輪調及職責分工。

為了避免有違反完整性的問題產生,多數會採用IDS(Intrusion Detection Systems)來做為偵查、IPS(Intrusion Prevention Systems)做為系統保護
導入IDS的效益是可永確保入侵管理控制,避免風險被擴大,偵測其它安全機器可能有未防護或違反的事項,更準確的掌握問題避免攻擊者的入侵,
更可產生文件供企業去分析威脅,確保取得的證據以供爾後法庭上對已攻擊成功的證據。

當然IDS目前的形態很多,但若要拿來細分又分為三類,在此提醒各位,IDS是入侵偵測系統,重點是在於存取控制中的七大類型的偵測,而非預防
其中IDS又分為有Network-based IDS(NIDS)、Host-based IDS(HIDS)及Application-bassed IDS
NIDS是分析及監視網路封包內容,但所謂的NIDS僅能分析到網路第三層的封包,因此對於第七層的攻擊,則無法分析出來,而且對於已加密的封包也是束手無策。
HIDS是分析單一台電腦它並不是建構在HIDS之上的IDS,是一種另外類型的IDS,他可以偵測到主機上是否安全的傳遞資料,
包含已加密的資料亦可被檢查的出來是否包含有害的資訊,並且找出帶有惡意程式呼叫的指令。
AIDS不是愛滋病,是指HIDS的一種子分類,它是可以應用在在定應用程式使用的傳遞log的分析,
他能偵測已授權使用者,是否正在利用可用的資料或應用程式做惡意的行為,進而監看使用者使用程式的入侵行為,
它亦可以掌握加密的資訊,並而找出終端的所在位址,是一種能偵測木馬或是軟體惡意的篡改。

IPS則是兩項分類Host based IPS(HIPS)及Network based IPS(NIPS),HIPS與HIDS最大的差別就在於IPS是執行保護已知的攻擊行為,
NIPS則又叫做在線式的IDS或者是閘道式IDS,也有人稱它是防火牆,但它與防火牆最大的不同在於,防火牆是採用ACLs做為資源應用的規則,
而IPS則可依照兩種分類技術來達成保護的作用:Content-based, rate-based。
Content-based利用所分析出來的協定特徵,去比對偵測到的封包是否包含惡意內容。
Rate-based不像Content-based,主要是觀注在傳輸流上不正常的封包傳遞的內容,監視傳送的過程中去統計違規的內容值,
當在短時間之內傳遞了大量的有害資訊,則會被終止連線,但…此比率則必須視所定義的門檻值多高而定,低一點的,即使連慢速度的攻擊也會被偵查到
但是有可能造成誤判。

以上不管是IPS/IDS都是經過分析來找出有問題的封包,然而分析引擎就決定了它的效率及能力,Analysis engine methods共分為:Pattern (Signature) Based、
Anomaly based、Heuristic Scanning,其中Pattern based又分為pattern matching及stateful matching,Pattern matching是利用掃描封包的內容去偵測,
如果有連續的封包有特定的內容,與特徵內容相同的攻擊則可認定為有害的內容。Stateful Matching則是檢視連結的封包中,找出跨多個封包中在傳的資料流中
有更多符合的特徵資料庫中的惡意資訊,因此pattern是針對已知的攻擊。
Anomaly Based是由Statistical(統計)、traffic(傳遞)、protocol(協定)所組成,經由統計非正常的傳遞動作來找出未知的攻擊行為,
而傳遞則可識別任何一種不可接受的訊號,以偵測出未知的攻擊及詐欺。協定則是透過標準的協定規範去識別出攻擊者有違反的資訊,
本項則無使用特徵性的特點。
最後,配合上Heuristic scanning(啟發式掃描),適用以上各種偵測及防設,更勝於上列的幾種分析引擎,以上的觀念應用於防毒軟體上,
亦是現在的各廠商極力的研發防堵未發現的病毒類型也可以在第一時間即時的攔截到。最後IDS/IPS是為了保護網路的安全及防護,不論是異常的內容、回應的機制,甚至警報的類型都是需要被7X24的管理,有好的監控才有好的安全環境。

存取控制還必須保證些什麼呢?稽核軌跡及評估的工具,在資安中最重要的一個Life cycle就是PDCA,如果沒有做稽核,那麼資安只是為了做而做,
透過更多的評估工具及稽核去找出被入侵的記錄及相關所需的證據,更重要的是關於安全的Clipping level(門檻值),
仔細的稽核各項防護的資訊及各項變更是否有留下變更的記錄。

K書筆記本-Access controls(05)

識別管理是為了讓系統驗證並授權使用者使用系統,但存取資料呢?!存取資料是否也有存取控制
說到這個就睡了一大半了,因為…它確實很無趣,不就只是放權限嘛!那有這麼難
其實,整個放權限的過程中依照放權限的規則不同,有不同的存取控制

講到存取控制,大家最常見的就是DAC, MAC, RBAC, non-DAC…等等的資料存取控制
MAC(Mandatory Access Control; 強制存取控制):MAC源自已Orange Book(TCSEC)是一個以敏感等級做為區隔標示的存取架構,存取的過程受到規則(Rules)的限制,適用於介定組織公開及保護機密的資料,最典型的存取控制模型就是Bell-LaPaDdula,資料的owner確保 ”need to know”原則,依照人員所在的機密等級給予權限。
但在強制存取控制的模式下,並非所有的文件都是機密不可洩露,最大的恩素在於時間(time based isolation),基於time base access control之下,它確保了實體的資料安全,依照其機密分類等級及其設置的保密時間,並結合Role based access control,使在保持有機密的時間內只有特定的角色可以存取。(例如:軍方的機密文件只有陸軍參謀可以存取,那麼在機密的保護時間內,任何一個擔任陸軍參謀的人,都可以存取這份文件)

DAC(Discretionary Access Control;自主存取控制):源自於Orange Book(TCSEC)是一種自主可以選擇取存資料的模式,由最小管存取基礎來設定資料可被存取的廣度,包含need to know,是由資料的所有者自已決定要把資料給予誰來存取,因此onwer或是委托管理者都可決定授權給誰來存取。
在CISSP CBK中訂義了下列存取控制屬於DAC…若是對該部份有疑問者可以大家一起提出來討論。
ACLs(Access Control Lists;存取控制清單):ACLs確保了較簡單的模式來列出使用清單的存取object。ACLs可以決定使用者或群組去存可以或不可以存取受到保護的物件,最常見的像是防火牆,正向表列+負向表列,這種觀念即是來自已ACLs。
Assess Control Matrix;存取控制陣列:以ACLs為基礎,這種存取控制以subject為列,object為欄,交織出的權限表,去檢視那個subject有權存取object。
Rule Based Access Control;規則基礎存取控制:列出規則的管理存取模式,由系統的owner去建立或驗證使用者的身份及權限(讀、寫、執行…)。
RBAC(Role Based Access Control;角色基礎存取控制):這個控存取控制列在DAC恐怕有不少人會有意見,但在CBK所上述的,MAC是以Rule為基礎的存取控制,但RBAC確是屬於以Role為基礎的存取控制,一定有人會問,那rule呢,怎麼會是DAC,其實Jason查了很久,也跟恩師討論過,結論是RuleBAC是由system owner做存取控制,但MAC是由規則為基礎(像制定policy來規範),因此被歸類為DAC,而RBAC則是以Job function來給予存取的權限,隨著工作角色不同,經由初始化程序來做管理role的同時去附予其角色應有的權限,適用於企業組織中的存取控制方式。
Capability Tables;能力表:延伸來自於access control Matrix之中,是屬於以存取能力為基礎的系統,存取object時隨著附予的能力不同,則有不同的權限。

Non-DAC(非自主式存取控制):自主與強制不是已經很明確的告訴我們要嘛就是我自已管,要嘛就是別人管,那怎麼會出現一個Non-DAC呢?
其實Non-DAC不等於MAC,Non-DAC也有其特質,最常見的就是用來做為作業系統的保護,例如像木馬程式,最常使用的手法就是依照使用者的權限,可以去做變更保護的模式去存取未被控制的資料,Non-DAC是透過Security administrator做控制,由SecAdmin去確保敏感/機密檔案做寫入保護去確保其完整性及可辨視性,只給有授權的使用者確保基機密性,也觀注在確保的系統安全,由於安全管控是交由SecAdmin來全權負責,當然透過這一層的管理一定是比DAC安全多了,也與MAC有所差異。

安全的存取是企業中追求的目標,但落實安全存取,就必須知道存取控制中所包含的內容,以上所述的內容中,不論是以角色為基礎、存取清單…等等,都在我們的身邊可以找到其縱影,包含連小孩子誰可以玩什麼玩具,小孩們自有的規則,也不難看出誰比較強勢,大家也可以想想,自已所使用的網芳分享出去的資料是不是安全的被存取呢?以上供大家參考。

2009年8月11日 星期二

K書筆記本-Access controls(04)

識別管理一直是被認定為確保一致性的前置步驟,但在現在的社會中也如同上一個章節中所討論到的有著相當多的挑戰
如何正確的識別出使用者是『對的』使用者,一直以來就是被受注目的,Jason之前在做一個專案時
客戶即有要求,要做識別管理,當時來找Jason的場商也有現在最夯的靜脈認證(掌靜脈、指靜脈…等等)
都是為了確認『對的』人,但是確認的過程中也遇到不少的挑戰,只要有控制就要管理

識別管理過程中,最常遇到的問題共有三類(主要的類型、識別資料的類型、識別生命週期)
主要的類型(types of principals):主要又分為內部(包括有雇員、勞動約定者)及外部(顧客、合作伙伴、供應商),隨著類型的不同,有不同的系統、資料必須加以管理規範。
識別資料的類型(types of identity data):雖然是不同類型的資料供主要的識別管理,其中包含有個人(姓名、連絡資訊…)、法律上(有法定關係介於企業及主要類型的資料)、存取控制的資訊(ID, passworde, PKI, Tokens, biometrics…)。

做識別管理要訂義這麼多東西,那麼有什麼好處呢??不然幹嘛做它呢?!
精簡人力(headcount reduction):每個安全管理者以往花了35%以上的時間在處理使用者帳號密碼問題,舉凡忘了密碼、密碼強度不足…等等,集中式管理後,把此部份的問題所消耗掉的金錢、人力都節省了。
提升生產力(Productivity increase):當管理人力被節省了,當然就有更多的時間做更多,以後end users能自已rest自已的密碼,不用再麻煩管理員人,更多的使用者藉由SSO達成系統的使用彈性,識別管理系統確實擴大了人力效益,也提升了生產力。
風險管理(risk management):往往紙上作業的驗證是不能被用於稽核,但這個問題現在可以被控制了,更延伸的使用好的密碼、好的驗證及安全的系統,當組織在一般支援在多重資料處理中心時,必須將資料快速的複寫,集中使用者資料庫更可導入BCP中。

當然,要做識別管理,有那些科技可以support
目錄(directories):目錄是使用於集中化管理的技術,可用來儲存各種資料及需要可用的的資訊,兼俱有可用性及延展性,且是屬於標準協定,像是LDAP(light-weight directory access protocol)或是X.500.
網站存取管理(Web access management;WAM):使用WAM可以用來管理使用者識別、驗證、授權資料,WAM掌握了簽入處理,Web應用程式使用了plug-in結合了前台web,使用者授權後可以操作其應用程式來管理前台資料,進而去完成存取管理及導入SSO的應用。
密碼管理(password management):很遺憾的,使用者們所使用來登入系統的ID及密碼,不止好猜,還一組用久久,甚至連密碼都沒有換過,導入了密碼管理系統,除了可以訂義密碼的有效性、複雜性、不可逆…等等,加強了使用者使用ID、PASSWORD的強度。
帳戶管理(account management):帳戶管理是應用於各系統中的帳號,例如像網路系統的維護、ERP應用程式、資料庫伺服器…等等,有帳戶應用的系統之中,系統只被內部管理者進行管理,一個集中式帳戶管理的概念必須自動的同步散發各個系統之中,,不論是變更、移除、甚至是系統資源的存取都是建構在這個基礎之上,例如人力資源系統或是管理目錄…等等。
簡介更新(profile update):使用者視別包含有個人資訊,所有的變更應該設計的更簡單,更容易去管理,重點在於自動的參照系統的內容,管理目錄或是系統者的登入,例如像是CRM系統,WAM等等…更容易的讓使用者自行的去管理變更非過於隱私的個人資訊。
單一簽入(SSO):導入單一簽入,end users只需要記憶一組帳號密碼或是一組可供識別的資料,而其管理也只需要針對一項內容管理,大大的減少了管理的成本,但…若SSO系統遇到DoS,那麼…每一個系統的可用性就會受到損害。 目前有Kerberos及SESAME,Kerboeros大家不漠生,是由麻省理工所開發出來的SSO,而SESAME(Security European System for Applications in a Multi-Vendor Environment)則是由歐盟所開發,主要也針對Kerberos的弱點做補強。
安全領域(Security Domains):存取控制結構使用分割的位址空間,去區隔每一個subjects、各個敏感等級的objects及每個存取控制subjects權限等級,想到security domain就必須關聯到每個分割、獨立開的保護個別的資源。

PS. NO1.什麼是SSO?
整個識別管理中,不斷的提到SSO,似乎SSO是最好的解決方案了嗎?那SSO的處理流程又為何呢?有沒有其它的問題呢?
整個SSO大致上分為四個流程:
1.使用者輸入ID、PASSWORD
2.使用者輸入的ID及PASSWORD傳輸到驗證伺服器中去驗證
3.驗證伺服器確立了識別的資料
4.驗證伺服器授權存取所需的資源。

PS. NO2. 什麼是Kerberos?
Kerberos是由麻省理工學院所研發的SSO技術,它的組成有KDC(Key Distribution Center; 又分為AS(Authentication Server;驗證伺服器)、TGS(Ticket Granting Server;票據授權伺服器))及SS(SS;伺服器)TGT(Ticket Granting Ticket;票據授權票據)
其處理流程如下圖:
Kerberos



PS. NO3.Kerberos有什麼問題存在呢?
1.Kerberos有單點失效(Single point of failure)的問題當驗證伺服器發生問題時,那麼所有的驗證機制都將會失效。可用HA架構來補救。
2.Kerberos必須通訊的時鐘同步,因為票據有一定的有效期,因此如果時鐘不同步那麼認證會失敗,而預設值是不得誤差十分鐘。可用NTP來防止。
3.因為SSO是一組帳密通五關,因此…若有管理者的密碼被洩露,則會造成默大的損失。可以用職責分工來補救。

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