公司啟動了新的資安規定,取消了DHCP,要求所有Client PC一律使用固定IP,且依公司所配發的名稱為電腦命名。 辦公室桌上的XPC SB81P是2003年底買的,跟著我流浪過三家公司,OS也一直沿用至今,沒再重灌過。這下被要求改名,沒法預先攤出需要更動的設定有哪些,只有先更名,再用打地鼠的方式,等問題自己冒出來,遇到一個解一個。 IP跟機器名稱改好重開機後,第一步就是試試機器上的各個功能是否正常。為了減少衝擊,我特別在lmhosts及host兩個檔案裡,將新的IP Mapping回我的舊電腦名稱,這樣本機的程式即使Sql Connection String或UNC指的還是舊Machine Name,可以完全不用更動,繼續運作。 不過,當我用IE開啟本機的WSS個人Portal時,第一關來了,IIS Web起不來,所有的Web處於停止狀態,要去啟動時,出現了” The format of the specified network name is invalid “的錯誤訊息,然後系統事件簿中出現了 HTTP Error Event 15005 Unable to bind to the underlying transport for 10.0.15.91:80. The IP Listen-Only list may contain a reference to an interface which may not exist on this machine. The data field contains the error number. W3SVC Error Event 1004 Cannot register the URL prefix 'http://*:80/' for site '1'. The site has been deactivated. The data field contains the error number. 幸好,這兩個訊息非常明確,Google了一下就找到答案。這才想去前陣子為了Try SubVersion,裝了Apache HTTPD,所以指定了HKEY_LOCAL_MACHINE\Service\CurrentControlSet\Services\HTTP\Parameters\ListenOnlyList,讓出一個IP的80 Port給Apache用。ListenOnlyList的IP還是舊的,造成了Web無法啟動。修改Registry,再net stop http /y, net start w3svc一下,Web就可以啟動了。(注意要重啟HTTP,光IISRESET是沒有用的!) Web Server OK了,此時第二關出現了。連上本機WSS時,出現大大的Server Application Unavailable訊息。幸好,Event Log中可以找到明確的錯誤: W3SVC Warning Event 1057 The identity of application pool 'WSSPool' is invalid, so the World Wide Web Publishing Service can not create a worker process to serve the application pool. Therefore, the application pool has been disabled. W3SVC Error Event 1059 A failure was encountered while launching the process serving application pool 'WSSPool'. The application pool has been disabled. 原來是IIS Application Pools中開了一個WSS專用的App Pool,其中指定了MachineName\WSSAccount作為執行身份,現在電腦名稱改了,它沒跟著自動更新,就只有出錯的份了。改了Identity,WSS就OK了,SQL Connection的部分完全不需要改,看來是lmhosts發生功效! 晚上回到家,用VPN連回公司,第三關來了! 要用Terminal Service連上XPC時,卻發現無法連通,用ping、net use驗證了一下,機器活著,RPC是通的,看來是Windows 2003的內建防火牆作祟。之前設定過只有特定IP網段才能連上Terminal Service,這下IP改了,鎖定的網段卻沒調整,當然不通。不過,只有RPC可通,要如何解決這個問題呢? 雖然是睡一覺明天上班就可以解決的小事,但利用有限功能取得主機操作權的挑戰,實在太有駭客攻門的味道了,讓我的駭客基因蠢蠢欲動,頓時精神百倍!! 不過由於RPC可通,我又有Administrators權限,事實上並非難事。Google了一下,前後試了幾個方法: 1.netsh可以修改firewall設定,但我測試的結果似乎只能修改本機firewall,連結遠端主機時,無法使用firewall這個Command。 2.如果遠端不可用netsh firewall,那麼telnet進去再執行總行了吧? 開啟”電腦管理”的MMC,再連至XPC(因為RPC可通),啟動了Telnet Server,卻發現Port 23被防火牆擋下來,第二波攻勢無功而返。 3.再Google了一下,發現了一個好工具-sc.exe,可以控制遠端機器上的Service,利用sc \\MachineName stop SharedAccess,就可停用防火牆。Bingo! Terminal Service可用了。參考資料 這三隻地鼠應該只是先鋒部隊,後面幾週應該還有得打,就等遇到再說吧!
同事小熊子有個3.5" IDE HD外接盒,同時提供了USB 2.0及SATA介面,前幾天他分別採用兩種連接方式連上PC,測了一下速度,並跟我分享了測試結果。結果當然是SATA以44.2 MB/s狂勝USB的17.2 MB/s。速度不敵在預期之內,但由這種測試結果,我才發現到另一個事實: USB 2.0吃CPU也吃得挺凶的,CPU耗用率超過25%! 只是USB插頭幾乎每台PC都用,SATA介面的普及率還不算高,而且不像USB一樣會在機殼前後提供插頭,必須要設法自己牽線,方便性差多了。但是由這個數據來看,如果是長期、重度使用時,還是值得花點功夫去爭取較有效率的連線方式。
今天被一個詭異的SQL查詢結果搞到昏頭,查兩個TABLE SELECT * FROM A WHERE ID=’123’à 有資料 SELECT * FROM B WHERE ID=’123’à沒資料 由以上結果,推測 SELECT * FROM A WHERE ID NOT IN (SELECT ID FROM B) 該至少有一筆資料才對吧? 答案是不一定!! 若Table B中有部分資料的ID欄位為NULL,則第三個NOT IN查詢的結果將會是空值。 NULL被用來比較時,其結果是很特別的。例如: 以下有五個測試 SELECT 'YES' WHERE 1=null SELECT 'YES' WHERE 1<>null SELECT 'YES' WHERE null=null SELECT 'YES' WHERE null<>null SELECT 'YES' WHERE null is null 以上五個查詢條件,只有最後一項會為true,這解釋了NOT IN失效的原因。