介紹好用工具:reCAPTCHA (免費的 CAPTCHA 驗證服務)

我想大家都知道什麼是 CAPTCHA,且實作 CAPTCHA 機制在技術上應該也不是甚麼難事,不過市面上也已經有不少人提出破解 CAPTCHA 圖片驗證的技術了,所以若要自己實作較複雜的 CAPTCHA 驗證機制其實還是有點難度的,我今天我就跟各位介紹一個偷懶的方法,也就是我之前曾經使用過的 reCAPTCHA 線上服務。

reCAPTCHA 是一個免費、且提供線上 CAPTCHA 驗證的服務,reCAPTCHA 提供的驗證機制據稱是十分的安全,他提供的服務中除了 CAPTCHA 基本的【圖片驗證】之外,另外還提供【語音驗證】的服務,而這部分若要自行實作也是有些難度的。

reCAPTCHA 是以類似 Web Service 的方式提供服務的,若要了解 reCAPTCHA 的運作方式,可以參考下列圖片:

API diagram

  1. 使用者載入現有網頁時,也同時載入一個透過 JavaScript 嵌入的 reCAPTCHA 挑戰(challenge)介面。所謂的挑戰介面就是指要進行 CAPTCHA 驗證的區塊。
  2. 使用者從 reCAPTCHA 取得挑戰後,reCAPTCHA 就會顯示一串挑戰的文字讓使用者進行人工識別。
  3. 使用者輸入自行辨識後的文字在挑戰區塊的表單裡,使用者在將輸入的回應資訊(challenge token)連同原本的表單資訊 POST 回到 Server 端。
  4. Server 端的程式收到後,會將資訊送到 reCAPTCHA 驗證是否正確,然後再將結果回應給你 Server 端的程式。
  5. 如果驗證成功,你就可以在 Server 端進行相關作業,例如:建立使用者、將發表的文章寫入資料庫、或其他動作。若驗證失敗,你可以繼續顯示表單並請使用者重新輸入一遍。 

若要在你現有的網站上使用 reCAPTCHA 服務基本上幾乎不用寫什麼複雜的程式,通常只要幾行指令就可以輕易的將 reCAPTCHA 服務套用到現有的網站上。在 reCAPTCHA 網站的 Resources 網頁中所列出的 Programming Environment Plugins 就包含了以下程式語言:

  • PHP
  • ASP.NET ( 網站上的範例雖然是 VB.NET 但下載的壓縮檔中有包含 C# 範例喔 )
  • Classic ASP: see this forum post
  • Python
  • Perl (contributed by Andy Armstrong)
  • Ruby (contributed by McClain Looney)
  • Another Ruby library from Jason L Perry
  • Java (contributed by Soren)
  • JSP Mailhide Tag (contributed by Tamas Magyar)
  • ColdFusion (contributed by Robin Hilliard)

若要套用到一些網路上知名的應用程式,reCAPTCHA 也提供以下應用程式的外掛套件:

除此之外,網站上還有提供 reCAPTCHA API 與 MailHide API 可供任何其他程式語言自行開發外掛,可說是一個十分貼心的服務,推薦大家可以試試看。

相關連結

  

此文章由 will 發表於 2008/9/30 下午 11:59:00

永久連結 | 評論 (3) | 此文章的RSSRSS comment feed |

分類: ASP.NET | JavaScript | PHP | Web | 介紹好用工具

標籤:

收藏:

微軟將在 ASP.NET 相關產品中全面支援 jQuery

今天在 Scott Guthrie 的部落格發現一個好消息,就是微軟即將在未來幾個星期內,在現有的 Visual Studio 2008 SP1 與 ASP.NET 相關產品中全面加入對 jQuery 的支援。不只如此,未來微軟的客戶還能在微軟產品支援服務(PSS)開啟與 jQuery 相關的問題。

文中還說,微軟將不會干涉任何 jQuery 現有的狀態,會將 jQuery 原封不動並且維持原本的 MIT License 置入微軟的產品中,除此之外也會另外提供一個支援 Intellisense 與提供完整註解的版本。

我簡單節錄一些重點如下:

  • VS2008SP1 Intellisense 的版本將在未來幾周提供免費下載
  • 新版本的 ASP.NET MVC 也會將 jQuery 內含其中
  • ASP.NET AJAX 與 ASP.NET AJAX Control Toolkit 也會改用 jQuery 實做
  • ASP.NET MVC 也會開發新的 Ajax server-side helper methods
  • ASP.NET AJAX 新功能 (例如: client template support) 也會設計跟 jQuery 完美整合
  • 微軟也將貢獻對於 jQuery 的測試(tests)、錯誤修正(bug fixes)、修補套件(patches)並回報給 jQuery 團隊

相關連結

  

此文章由 will 發表於 2008/9/29 下午 02:48:55

永久連結 | 評論 (2) | 此文章的RSSRSS comment feed |

分類: ASP.NET | JavaScript | Visual Studio | Web

標籤: ,

收藏:

Windows Server 2008 的啟用方式

因為我前幾天才剛安裝好一台 Windows Server 2008,但我今天連進主機時看到一個 Windows 啟用好像有問題的通知,點開之後看到以下畫面,點下線上深入瞭解後才發現,原來 Windows Vista Enterprise, Windows Vista Business, 與 Windows Server 2008 這三種版本的 Windows 啟用的方法跟我們習慣的啟用方式不太一樣。

Windows 啟用 - Windows 無法啟用 :: 金鑰管理服務(KMS)主機不可以位在網域名稱系統(DNS)中,請您的系統管理員確認已在 DNS 中正確發行 KMS。 

原來進行 Windows 啟用有兩種方式,第一種是透過 KMS 伺服器自動啟用,第二種是透過一個 Windows Script Host 指令碼(slmgr)手動進行啟用。

因為我是用大量授權的 Windows Server 2008 安裝光碟進行安裝的,所以才會預設必須在網域內先安裝 KMS 系統才能進行啟用。若你要用第一種作法啟用,可以下載 Volume Activation 2.0 Technical Guidance 文件回去研究。

而我採用的是第二種作法比較簡單,就是在「命令提示字元」下輸入以下指令:

slmgr -ipk xxxxx-xxxxx-xxxxx-xxxxx-xxxxx
這裡的 xxxxx-xxxxx-xxxxx-xxxxx-xxxxx 指的就是你的 MAK (Multiple Activation Key) 序號,執行完後會出現以下畫面,就代表啟用成功了:

Windows Script Host - 成功安裝產品金鑰 

相關連結

  

此文章由 will 發表於 2008/9/28 上午 12:02:37

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: 系統管理

標籤:

收藏:

SQL Server 與 Oracle 的各種版本功能、特性比較表

我在工作上偶爾會需要整理各資料庫與資料庫各版本的比較表給客戶看,讓客戶瞭解而各種資料庫或資料庫各版本間的差異、價格、功能、...等。不過 SQL Server 2008 卻讓我花了好些時間才收集完相關的比較資訊,埋藏在 MSDN 裡面,且還分了好幾篇文章。我覺得納悶的是:為什麼這些比較資訊不整理放在 SQL Server 2008 產品官網中呢?!

我們有個客戶,每次跟他合作專案他都要採用 Oracle,我雖然沒有決定權,但疑問一直在心中。兩年後的今日,又有一個新案子要合作了,趁他還沒買之前我問他為什麼你們不買 SQL Server 呢?以下是對話紀錄:

  • 保哥:為什麼你們都要用 Oracle 資料庫系統?
  • 客戶:因為 SQL Server 比 Oracle 貴阿,而且還整整貴一倍呢!
  • 保哥:會嗎?應該是 SQL Server 比較便宜吧?我沒聽人說過 SQL Server 還會比較貴的?
  • 客戶:我要的功能在 Oracle 的標準版就有了,而在 SQL Server 2005 要企業版才做的到!
  • 保哥:會嗎?你要什麼功能?
  • 客戶:叢集(Cluster)啊!我們要做 HA 架構,Oracle 業務說他們的產品只要「標準版」就有了,但微軟的業務跟我說 SQL Server 要「企業版」版才支援叢集架構。
  • 保哥:SQL Server 2005 標準版就有支援叢集啦!請看 http://www.microsoft.com/taiwan/sql/prodinfo/features/compare-features.mspx
  • 客戶:真的耶!原來 SQL Server 2005 標準版就有支援叢集啦,那 SQL Server 2005 真的比較便宜耶!那我這次改買 SQL Server 2005 好了。

從上面的對話看來,如果網路上不容易查到相關資訊的話(我是指 SQL Server 2008),對客戶來說就只能靠供應商的業務講解,但這就很可能遇到上面這問題。我想可能是微軟的業務搞不清楚版本功能,才導致提供錯誤的資訊。

對我們來說,SQL Server 的開發工具是比較友善的。而對客戶來說,授權費應該也比較省。若遇到客戶並不怎麼 Care 到底要用什麼資料庫系統的時候,我通常都會直接建議採購 SQL Server,應該是雙贏的選擇。

以下是我這陣子收集的相關資料庫版本比較資訊,希望對各位有所幫助:

SQL Server 2005 各版本比較

SQL Server 2008 各版本比較

SQL Server 2008 標準版(Standard) v.s. 企業版(Enterprise) 比較

SQL Server 2008 行動版(Compact) v.s. 簡易版(Express) 比較

SQL Server 2008 Express 各版本比較

SQL Server 與「其他資料庫」的比較

Oracle Database 11g 各版本功能、特性比較

Oracle Database 10g 各版本功能、特性比較

備註:因為我對 Oracle 比較沒那麼熟悉,所以資料是少了一些,若各位有更完整詳細的比較資訊,歡迎各位提供給我,我再補上去。

  

此文章由 will 發表於 2008/9/27 下午 02:02:37

永久連結 | 評論 (3) | 此文章的RSSRSS comment feed |

分類: Oracle | SQL Server

標籤: , , ,

收藏:

將 IIS 中已安裝的 SSL 憑證移至 Apache 2.2 for Win32 安裝

這幾天為了替客戶安裝一個 VeriSign 憑證到 Windows 平台的 Apache 2.2 上面傷透腦筋,問了好多朋友都沒有人有這樣的經驗,網路上是有一大堆文章,不過所有的文章都是講如何「自己簽發 SSL 憑證」,但我得到的任務卻是要把一個已經申請下來已經安裝至 IIS 的憑證安裝到 Apache 2.2 for Win32 中,而我手邊得到的資訊十分有限,只有拿到一個 CA.cer 檔,還有一個已經安裝在 IIS 中且可匯出的 VeriSign 憑證。

首先,我上網找資訊找幾個小時,找的資料也很多,不過大多不符合我的需求,讓我很沒方向感,最後還是跟客戶要到 網際威信(HiTRUST) 的電話,直接打電話到認證客服部詢問安裝的方式,果然專家一出手、便知有沒有,他們很精確的瞭解我的問題並且指導我解決這個問題。

我打算用「最短路徑」說明如何解決這個問題,以下是我本次安裝、設定的完整紀錄:

步驟 0:確認手邊現有的資訊(只要這些就夠了)

  1. 客戶有提供給我一個 CA.cer 檔案。
  2. IIS 中已經安裝了 VeriSign 憑證,且憑證的私鑰(Private Key)是可以匯出的。
  3. 客戶有提供給我當初要申請憑證前所設定的私鑰密碼。

步驟 1:準備相關資料與檔案

  1. 下載 Apache 2.2 安裝檔並安裝完成
  2. 中繼憑證檔 ( Server Certificate Chain File )
    • 在 Apache 2.2 中預設檔名為 server-ca.crt
    • 這個檔案就是客戶提供給我的 CA.cer 檔,建議可以將他改名為 server-ca.crt,並將此檔移至 C:\Program Files\Apache Software Foundation\Apache2.2\conf 目錄下。
    • 這個檔案的內容也會在核發憑證下來後的通知信裡面出現,只要將信件中 -----BEGIN CERTIFICATE----- 到 -----END CERTIFICATE----- 為止的內容複製起來,並儲存成 server-ca.crt 檔即可。
  3. 伺服器憑證檔 ( Server Certificate File )
    • 在 Apache 2.2 中預設檔名為 server.crt
    • 「伺服器憑證檔」必須先透過 IIS 匯出二進位格式的 PKCS12 私鑰檔 (*.pfx) 轉換成 ASCII 格式的才看的到。
  4. 伺服器私鑰檔 ( Server Private Key File )
    • 在 Apache 2.2 中預設檔名為 server.key
    • 「伺服器私鑰檔 」必須先透過 IIS 匯出二進位格式的 PKCS12 私鑰檔 (*.pfx) 轉換成 ASCII 格式的才看的到。

步驟 2:從 IIS 匯出憑證(包括 伺服器憑證伺服器私鑰

  1. 開啟已經設定好 SSL 的網站並開啟內容,再切換到[目錄安全設定]頁籤,點選 [伺服器憑證] 按鈕
    開啟已經設定好 SSL 的網站,並開啟內容,再切換到「目錄安全設定」頁籤,點選 [伺服器憑證] 按鈕
  2. 選取 [匯出目前的憑證到 .pfx 檔案],並按 [下一步]
    image
  3. 輸入要儲存 .pfx 檔案的路徑與檔名
    輸入要儲存 .pfx 檔案的路徑與檔名
  4. 輸入當初申請憑證時所設定的密碼
    輸入當初申請憑證時所設定的密碼
  5. 最後會顯示匯出憑證摘要,確認後按下 [下一步] 後再按 [完成] 按鈕即可完成匯出。
    最後會顯示匯出憑證摘要,確認後按下 [下一步] 後再按 [完成] 按鈕即可完成匯出。

步驟 3:將 IIS 匯出的 PKCS12 憑證檔 ( C:\mycert.pfx ) 轉換成 Apache 所需的格式

  1. 透過 Apache 2.2 所附的 openssl.exe 工具進行檔案格式的轉換
    1. 先開啟「命令提示字元」視窗,並進入 C:\Program Files\Apache Software Foundation\Apache2.2\bin 目錄
    2. 執行以下指令:
      C:\...\Apache2.2\bin> openssl.exe pkcs12 -in c:\mycert.pfx -out c:\mycert.txt -nodes
      Enter Import Password:
      MAC verified OK
      當你輸入 openssl.exe pkcs12 -in c:\mycert.pfx -out c:\mycert.txt -nodes 指令後,會被要求再次輸入憑證密碼,若驗證正確就會建立一個 c:\mycert.txt 檔案。
    3. 這時用記事本開啟 c:\mycert.txt 檔案,裡面同時包含兩個憑證,分別是 伺服器私鑰(RSA PRIVATE KEY) 與 伺服器憑證(CERTIFICATE)。
    4. 請在 C:\Program Files\Apache Software Foundation\Apache2.2\conf 目錄下先建立兩個空檔案,檔名分別是 server.keyserver.crt
    5. 這時將 c:\mycert.txt 檔案中的兩個憑證內容分別複製到這兩個檔案內,檔案的內容應該只包括 -----BEGIN *----- 到 -----END * ----- 的內容,c:\mycert.txt 中其他的資料都不能出現在這兩個檔案中。
      1. server.key 的內容會像如下的內容
        -----BEGIN RSA PRIVATE KEY-----
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        ................
        ................
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
        -----END RSA PRIVATE KEY-----
      2. server.crt 的內容會像如下的內容
        -----BEGIN CERTIFICATE-----
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        ........
        ........
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
        -----END CERTIFICATE-----

步驟 4:修改 Apache 設定檔

  1. 編輯 C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf 檔案
    1. 取消註解 LoadModule ssl_module modules/mod_ssl.so
    2. 取消註解 Include conf/extra/httpd-ssl.conf
  2. 編輯 C:\Program Files\Apache Software Foundation\Apache2.2\conf\extra\httpd-ssl.conf 檔案
    1. 將此檔中所有 _default_ 都改成 *
    2. 取消註解 SSLCertificateChainFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/server-ca.crt"

步驟 5:重新啟動 Apache22 服務

net stop Apache22
net start Apache22

雖然手續繁雜,但我已經簡化到不能再簡單了。因為這次的經驗讓我更加瞭解 Apache SSL 的設定方式,以後應該不會再遇到問題了。

  

此文章由 will 發表於 2008/9/26 上午 09:24:47

永久連結 | 評論 (1) | 此文章的RSSRSS comment feed |

分類: IIS | Security | Web

標籤: , ,

收藏:

設定 SpamAssassin 阻擋所有從俄羅斯(Russia)來的垃圾信

這幾個月不知為何從俄羅斯(Russia)來的垃圾信這麼多,而且還每一封都神奇的穿過了 SpamAssassin 的阻擋,所以我前幾天終於靜下心把這個問題研究了一下,並且成功阻擋所有來自俄羅斯的垃圾信。

我也發現,這些從俄羅斯寄來的垃圾信十分"專業",基本上都完全符合 MIME 標準,所以對 SpamAssassin 來說基本的檢查都能夠通過,不過我納悶的是不知道為何這些信為什麼可以完整通過 SpamAssassin 所有規則的檢查?

為了要成功過濾所有從俄羅斯來的信,我還特別分析了一下垃圾信的原始內容,所以我抓了其中一封垃圾信的郵件標題(Mail Headers),如下:

Microsoft Mail Internet Headers Version 2.0
X-Virus-Scanned: Debian amavisd-new at antispam.test.com
From: "antoine cosmo" <nmtue@soyu19.tk>
To: <receiver@test.com>
Subject: =?koi8-r?B?7MDC2cUsIMTB1iDF08HN2cUgx9LR2s7ZxSDTxcvT1cHM2M7ZxSDGwQ==?=
        =?koi8-r?B?ztTB2snJLCDP1snXwcDUINrExdPY?=
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2720.3000
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2727.1300
Message-Id: <20080923021045.5206024C410@test.com>
Date: Tue, 23 Sep 2008 10:10:43 +0800 (CST)
X-OriginalArrivalTime: 23 Sep 2008 02:08:43.0597 (UTC) FILETIME=[4DF79FD0:01C91D21]

由此得知,這些從俄羅斯寄來的垃圾信所用的文字都是使用 KOI8-R 編碼,另外我也查到 windows-1251 編碼也是俄羅斯常用的編碼,反正這些國家的語言一定看不懂就是的,所以光是針對這個特性進行 SpamAssassin Rules 撰寫應該就可以過濾掉一大堆垃圾信了,這樣子我的 Outlook 應該會乾淨些!

我看了一遍 Writing Rules 文件,自己寫了一段 Rule 到 /etc/spamassassin/local.cf 檔案中,內容如下:

header   __KOI8_TO              To:raw           =~ /\?(koi8-r)|(windows-1251)\?/
header   __KOI8_FROM            From:raw         =~ /\?(koi8-r)|(windows-1251)\?/
header   __KOI8_SUBJECT         Subject:raw      =~ /\?(koi8-r)|(windows-1251)\?/
header   __KOI8_ContentType     Content-Type:raw =~ /\?(koi8-r)|(windows-1251)\?/
meta     LOCAL_WILL_DEFINEDRULE (__KOI8_TO||__KOI8_FROM||__KOI8_SUBJECT||__KOI8_ContentType)
score    LOCAL_WILL_DEFINEDRULE 14.0
describe LOCAL_WILL_DEFINEDRULE Sent by using koi8-r & windows-1251 encoding

加上之後只要重新啟動 SpamAssassin 即可:

/etc/init.d/spamassassin reload

由於我一口氣加了 14.0 分上去,所以這些信幾乎是再也不可能出現在我的 Outlook 了。

測了幾天後,垃圾信大概又少了將近 80%,真是大快人心阿。^_^

  

此文章由 will 發表於 2008/9/25 上午 09:52:47

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: Linux | 系統管理

標籤:

收藏:

如何設定 MySQL 監控所有 AP 對資料庫的查詢

大家都知道在 Microsoft SQL Server 2005 有個 SQL Server Profiler 工具,可以將所有 AP 對 DB 下的 T-SQL 指令全部紀錄下來,供開發人員查詢除錯用,我個人之前也常用這個功能協助我瞭解 LINQ to SQL 真正在 DB 中所下的 T-SQL 為何。不過在 MySQL 中似乎沒這樣的工具,但卻有另一個較簡易的解決方案:設定 my.cnf 即可。

如果你是用 Ubuntu 的話, my.cnf 的路徑在 /etc/mysql/my.cnf,其他的 Linux dist. 也可能在 /etc/my.cnf,檔案內其中有一段設定預設被註解掉了:

#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
#log            = /var/log/mysql/mysql.log

你只要將 log = /var/log/mysql/mysql.log  這段最前面的 # 拿掉,並重新啟動 mysql 即可:

/etc/init.d/mysql restart

之後所有對 MySQL 做出的查詢「全部」都會紀錄在 /var/log/mysql/mysql.log 檔案裡了。

MySQL 還有提供另一組參數,可以僅監控「查詢時間過長」的 SQL 指令,用於找出 AP 中比較耗資源的查詢,進而修正程式優化查詢。

#
# Error logging goes to syslog. This is a Debian improvement :)
#
# Here you can see queries with especially long duration
#log_slow_queries       = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
你可以設定 log_slow_queries 指令相關的 log 要儲存在哪個檔案,以及指定 long_query_time 指定「何謂長時間的查詢」,單位為「秒」。

注意:開啟 log 功能,會造成應用程式的效能大幅降低,若是在流量大的應用系統中,建議還是不要開啟這個選項。

相關連結

  

此文章由 will 發表於 2008/9/24 下午 04:16:35

永久連結 | 評論 (3) | 此文章的RSSRSS comment feed |

分類: MySQL | 系統管理

標籤:

收藏:

在 Hyper-V 的 Virtual Machine Connection 中使用的快速鍵

使用 Virtual Machine Connection 感覺就像在用遠端桌面(Remote Desktop)一樣,快速鍵也與之前的文章【分享幾個可在遠端桌面中使用的快速鍵 】差不多,只是有些少了一些,目前為止我只發現了 4 個快捷鍵而已。

以下就是我所發現到的快速鍵與對照表:

本機快速鍵遠端桌面快速鍵功能說明
-CTRL + ALT + ← (左方向鍵)

跳出 VMC 環境,將滑鼠游標還給 Host 主機。本快捷鍵可經由修改設定改變。

CTRL + ALT + DELCTRL + ALT + END

顯示 [Windows 安全性] 對話方塊

-

CTRL + ALT + BREAK

在視窗和全螢幕顯示模式間切換。

Win Key 或 CTRL + ESC

ALT + HOME

顯示 [開始] 功能表。

 

  

此文章由 will 發表於 2008/9/23 上午 09:13:00

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: 系統管理

標籤:

收藏:

如何將 Virtual PC 2007 上面的 VM 移至 Hyper-V 平台

最近剛裝了一台 Windows Server 2008 起來,打算將公司內部常用的幾個虛擬機器(Virtual Machine, VM)全部移至 Hyper-V 平台,以下是我本次轉移虛擬機器過程的筆記,Host 主機是 Windows Server 2008 + Hyper-V,Guest 主機是 Windows Server 2003 with Service Pack 2。

準備工作

  • 針對所有要轉移的 Guest 主機
    1. 將 Guest 主機的作業系統與相關軟體都升級到最新版的 Service Pack。
    2. 將 Guest 主機內的 Virtual Machine Additions 軟體移除。
    3. 將 Guest 主機確實關機,不要用 Save State 的方式關閉 VM!
    4. 壓縮 *.vhd 檔(非必要步驟),可參考:如何壓縮 VHD 虛擬硬碟的大小
    5. 將 Guest 主機的 *.vhd 檔全部複製到 Hyper-V 主機上。(原本的 *.vhd 先不要砍掉喔,以防萬一)
  • 針對要轉移的目的主機,也就是 Windows Server 2008 與 Hyper-V
    1. 執行 Windows Server 2008 的 Windows Update 就會安裝最新版的 Hyper-V 軟體了。
    2. 新增角色:Hyper-V

在 Hyper-V 新增虛擬機器

1. 新增 Virtual Machine

Hyper-V :: 執行 :: New :: Virtual Machine... 

2. 開啟後先按下一步,接者指定新的 VM 名稱,並且你可以自己指定該 VM 所在的目錄!

Hyper-V :: 執行 :: New :: Virtual Machine :: Specify Name and Location

3. 設定足夠的記憶體給 VM

Hyper-V :: 執行 :: New :: Virtual Machine :: Assign Memory

4. 選擇網路介面

Hyper-V :: 執行 :: New :: Virtual Machine :: Configure Networking

5. 指定你從原本主機複製過來的 *.vhd 檔所在目錄,你可以點選 [Browser] 選取你 VM 的第一顆硬碟,若你的 VM 有多顆硬碟可以之後再加入即可。

Hyper-V :: 執行 :: New :: Virtual Machine :: Connect Virtual Hard Disk

6.  按下 [Finish] 之後或按下 [Next] 再按 [Finish] 就新增完成了,但記住先不要啟用主機。

7. 若要外掛第2顆以上的硬碟,可以在此時新增上去。先在剛新增的 VM 項目點選滑鼠右鍵,再點選設定畫面的 IDE Controller 0,點選 [Add] 新增 Hard Disk,然後點選 [Browse] 選取你的第2顆硬碟即可。

Hyper-V :: Settings 

開機,並設定虛擬機器

1. 在 [伺服器管理員] 中雙擊剛剛新增的 Virtual Machine,並按下 Ctrl + S 開機。不過有點必須注意,如過你是用「遠端桌面」的方式連到 Windows Server 2008 進行操作,就會在點選進去後出現以下畫面,也就是你無法在使用遠端桌面的連線下,在 Guest 主機中使用滑鼠,所以建議的操作方式是直接在本機操作,或用遠端連線至 Guest 主機再操作。不過,你也有可能跟我一樣抓不到網路卡,所以只能在本機操作!

Hyper-V :: Virtual Machine Connection

2. 只要遇到新增硬體或有些未知的設備需要安裝 Driver 時,全部都先跳過。若提示需要重開機,也先不要重開,等設定完再重開即可。

3. 在 Guest 中插入 Integration Services Setup Disk,準備安裝 Microsoft Hyper-V Integration Components 到我們的 Guest 主機。這個 Microsoft Hyper-V Integration Components 等同於 Virtual PC 中的 Virtual Machine Additions 用途。

Hyper-V :: Action :: Insert Integration Services Setup Disk

4. 然後進入 Guest 主機點選剛新增的光碟機,他會提示你需要升級 HAL,點下 [確定] 即可。

Hyper-V :: 需要 HAL 升級 

5. 當虛擬機器的 HAL 升級完成後,會被要求重開機。點選 [是(Y)] 重新開機。

Hyper-V :: 當虛擬機器的 AHL 升級完成後,會被要求重開機

6. 重開機完並登入後 Hyper-V Integration Components 才會開始安裝。這裡也有件事要注意,只要遇到「尋找新增硬體精靈」都先按下 [取消] 按鈕,否則會卡住 Hyper-V Integration Components  的安裝,應該先讓 Hyper-V Integration Services 安裝完成再說。

Hyper-V :: 重開機後,Hyper-V Integration Components 才會開始安裝

7. 安裝完成後必須再重新開機一次。這時已經可以透過遠端桌面遠端操控 Guest 主機了。

Hyper-V Integration Services 完成安裝 

完成轉移

終於大功告成啦!因為網路卡才剛抓到,所以如果你的 VM 有設定過固定 IP 的話,可能必須重新設定一次。其他的部分到目前為止還沒看到有任何異狀,應該是沒問題吧。

這台 Windows Server 2008 (x64) 我裝了 8GB 的記憶體,整體的運行效能與感覺都蠻不錯的,用了新玩意還挺新鮮的。:-)

相關連結

  

此文章由 will 發表於 2008/9/22 上午 11:14:44

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: 系統管理

標籤: , ,

收藏:

開發SQL相關應用程式時要注意登入帳號的預設結構描述

上週我經手一個案子,客戶原本將網站架設在自己公司,且運作正常好一段時間了,但最近將網站與資料庫搬遷到戰國策之後卻發現有部分程式無法執行了。因為這已經是結案的案子,所以客戶原本想自行解決這個問題,但在嘗試了一整天之後才請我幫他找問題。

首先,這個網站在我的電腦與公司的測試主機都可以正常執行,但當我將資料庫連線切換到戰國策提供的 SQL Server 主機之後就會出現異常,錯誤訊息如下:

System.Data.ConstraintException: 
  無法啟用條件約束。一或多個資料列的值違反非 Null、唯一或外部索引鍵條件約束。

又是這種「萬用錯誤訊息」,這種 Exception 錯誤訊息應該是 ASP.NET 初學者最怕的吧,完全不知道該從何下手解決問題。

因為是 Typed DataSet 在取得資料時出現的問題,且程式「曾經」跑過一段時間都沒問題,是在切換到不同資料庫時才發生問題的,所以我直覺的研判程式部分應該沒問題,所以我就打算直接從資料庫著手調查原因。

經過十幾分鐘的奮戰,我發現原來是戰國策所開給我們客戶的 SQL Server 登入帳號所對應到資料庫中的使用者,被指派了一個跟帳號同名預設結構描述(Default Schema),但我查了一下我們寫的程式,在 Typed DataSet 中的 TableAdapter 中的查詢設定,並沒有特別在 T-SQL 中指令結構描述(Schema),所以我們預期所有表格都應該使用 dbo 這個預設的結構描述才對。

例如以下語法:

SELECT * FROM members WHERE enabled=1

在 SQL Server 中預設會轉成這樣子來執行:

SELECT * FROM dbo.members WHERE enabled=1

不過客戶從轉移主機之後,該資料庫裡的使用者卻被指定了與帳號同名的預設結構描述(例如:user1),而這樣的設定值導致我們的程式中的 T-SQL 被轉成以下:

SELECT * FROM user1.members WHERE enabled=1

所以才會找不到表格,或找到不同結構描述但表格名稱相同的表格而出現錯誤。

所以這告訴我兩個實務經驗:

  1. 在開發與 SQL Server 相關的應用程式時,所下的任何 T-SQL 語法都應該加上適當的「結構描述」(Schema),以免相同的問題再度發生。
  2. 資料庫在轉移或重建的時候,要特別注意資料庫使用者的相關設定是否跟原來的一樣,尤其是「預設結構描述」的部分最有可能影響應用程式的運作!

修改預設結構描述的方式如下:

修改預設結構描述的方式 

查看目前使用者的「預設結構描述」設定:

資料庫使用者 - test

最後將預設結構描述修改為 dbo 即可。

  

此文章由 will 發表於 2008/9/21 下午 03:09:11

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: ASP.NET | SQL Server

標籤: ,

收藏: