起因是,自從把網站中公告系統的db從access換成mysql之後,發現,只要是在需要多人連上首頁時,首頁會slow…大約連上同時有1200人左右的時候…像是成績發佈、選課之類的時間…
觀察是mysql的service的loading變的很高…
雖然我不敢說我在sql text寫的ok,但其實主要還是太多人同時連線的關係(but…話說在使用mdb時期沒這問題…但,我覺得應該是選課系統的關係)
所以,為了減少mysql的loading,我想到了兩種方式…
a) 把單頁sql語法重寫…
b) 把首頁改靜態的html…
a的做法比較麻煩,因為,目前首頁會使用mysql來load資料有四個部份
所以a先暫時不做
- 載入公告、榮譽榜與廣告區的config,所謂的config其實只會存放這三個區會列出來的筆數,以前都是人工去修改原始檔,但因為學校大頭有時要求東又要求西,變動性高,所以才放到db。
- 其他三個部份就是所謂的公告區、榮譽榜區跟廣告區,這三區又是分別放到三個table…所以就分成三次connection來做資料取出…原則上做成一次取出應該是ok,但…其實這種跨table的寫的不好的話其實會比原來的更差。
b的做法應該是對web service的load會最輕…
當然,也不是傻傻改成手動寫html…每公告一次或更新內容一次就要把網頁打開後編寫…也太累了…
所以,我使用
- 叫asp使用winhttp做類似curl或wget的方式先把以前的首頁程式抓出來,因為以前的首頁程式本來就是寫出首頁的html的…所以直接抓就可以現用
- 再讓asp的程式把winhttp取回的首頁結果資料寫入真正要讓人去連結的首頁html…
但,很多東西不是網頁程式可以做的…因為網頁基本上的使用者就是 IUSR_<hostname>(就是網際網路guest用戶),所以你用網頁產生出來的檔案基本上會給與 IUSR有最高的安全性權限。所以就算可以用網頁程式修改,但也跑不出 IUSR的範圍。
所以,得朝向可以在server的local端執行的應用程式才行…但,不想花太多精神寫什麼dotNET、java、c的…所以,還是用batch好了…再來就是使用windows的cacls來修改權限…
CACLS是windows的修改資料匣或檔案的群組權限功能的工具,是內建的(註:windows 2003有內建,其他我不知道)…
CACLS的使用方式如下
C:\Users\fox>cacls /?
注意: Cacls 現在已經過時,請使用 Icacls。
顯示或修改檔案的存取控制清單 (ACL)
CACLS filename [/T] [/M] [/L] [/S[:SDDL]] [/E] [/C] [/G user:perm]
[/R user [...]] [/P user:perm [...]] [/D user [...]]
filename 顯示 ACL。
/T 變更目前目錄與所有子目錄中指定檔案的
ACL。
/L 處理符號連結本身而不是目標
/M 變更掛接到目錄的磁碟區 ACL
/S 顯示 DACL 的 SDDL 字串。
/S:SDDL 以 SDDL 字串中指定的項目取代 ACL
(不能搭配 /E、/G、/R、/P 或 /D 使用)。
/E 編輯 ACL 而不是取代 ACL。
/C 發生拒絕存取錯誤時仍繼續。
/G user:perm 授與指定使用者存取權限。
Perm 可以是 : R 讀取
W 寫入
C 變更 (寫入)
F 完全控制
/R user 撤銷指定使用者的存取權限 (必須與 /E 一起使用)。
/P user:perm 取代指定使用者的存取權限。
Perm 可以是 : N 無
R 讀取
W 寫入
C 變更 (寫入)
F 完全控制
/D user 拒絕指定使用者存取。
可以在命令中使用萬用字元指定一個以上的檔案。
您可以在命令中指定一個以上的使用者。
縮寫:
CI - 容器繼承。
目錄將繼承 ACE。
OI - 物件繼承。
檔案將繼承 ACE。
IO - 僅繼承。
ACE 不會套用到目前的檔案/目錄。
ID - 已繼承。
從父目錄的 ACL 繼承 ACE。
以上述方式在index.html給與 IUSR_<hostname> 僅讀取與執行的權限的指令方式如下:
cacls index.html /T /E /P IUSR_<hostname>:R註:因為用網頁程式產生出來存在server端的檔案是給與 IUSR_<hostname>有可讀可寫可修改的最高權限,所以,使用[/P]的方式來把原來的群組安全性的權限給取代掉…如果,你是想把本來只有可讀的權限再加上可寫入…那可以把[/P]改為[/G],把[:R]改為[:W]…這樣僅是在原有的『可讀』的權限再加上『可寫』…如果是使用[/P]的話,那[:R]就要改為[:C]
註2:cacls /P 這個方式是在該檔案寫入新的或取代原有的…但,這會破壞繼承…繼承的關係可以在安全性那邊看勾勾是灰的還是明顯黑白的…灰的是繼承,明顯黑白是破壞原有的關係再寫新的上去…目前我還想不到怎麼繼承父系或本層或上一層的安全性權限的方式…CACLS或ICACLS我都沒看到有直接繼承或不破壞的方式…
2 則留言:
改謝大大分享
可以試試-->/E
會保留繼承
你好
感謝你建議的方式
張貼留言