============= #副標=特別報導 #特大標=程式開發安全15問 • 網頁開發篇 • 資料庫篇 #大標=網頁開發篇 #作者=文/王寧疆 ================ #中標=第一問:在網站專案的Web.config設定檔中加入以下的設定,代表什麼意義? ============= ... ================ #中標=第二問:在ASP.NET網站的web.config設定檔中加入以下的設定,其中的「protection="All"」,代表什麼意義? ============= ================ 以下就是使用EventLog類別的WriteEntry方法寫入資訊到Windows事件日誌的做法: ==<反黑>=========== Dim el As New EventLog '建立EventLog類別的物件 el.Source = "WindowsApplication1" '填入應用程式名稱當做EventLog'類別的物件的Source屬性的內容值 el.Log = "Application" '指定要寫入資訊到名稱為[應用程式]的事件日誌 el.WriteEntry("重要資訊!", EventLogEntryType.Information) '寫入種類為Information的資訊到事件日誌 ================ 要利用EventLogTraceListener類別,搭配Debug或Trace類別執行寫入資訊到Windows事件日誌,程式必須先建立EventLogTraceListener類別的物件,並將建立好的EventLogTraceListener類別的物件加入到Trace類別的Listeners集合,做法如下: ==<反黑>=========== Dim et As New EventLogTraceListener("Application") '建立EventLogTraceListener類別的物件 Trace.Listeners.Add(et) '將建立好的EventLogTraceListener類別的'物件加入到Trace類別的Listeners集合 Trace.WriteLine("追蹤資訊!") '呼叫Trace類別的WriteLine方法寫入資訊到'指定的Windows事件日誌 ================ 以下的範例就可以將程式的狀態或是重要資訊寫入到純文字檔案: ==<反黑>=========== Dim tt As New TextWriterTraceListener("Test.Log") '建立TextWriterTraceListener類別的物件, '並指定要寫入資訊到名稱為Test.Log的純文字檔案 Trace.Listeners.Add(tt) '將建立好的TextWriterTraceListener類別的'物件加入到Trace類別的Listeners集合 Trace.WriteLine("追蹤資訊!") '呼叫Trace類別的WriteLine方法寫入資訊'到指定的純文字檔案 Trace.Flush() '呼叫Trace類別的Flush方法,將存在於'緩衝區中的內容寫入到指定的純文字檔案 ================ ===============<分隔線>========================================= #大標=資料庫篇 #作者=圖文/楊志強 #內文= ==<反黑>=========== --檢查交易記錄檔,確認交易記錄檔使用狀況 DBCC SQLPERF(LOGSPACE) GO ================ ==<反黑>=========== --清除交易記錄檔的內容,兩種方式都可以 BACKUP LOG [AUDIT] WITH NO_LOG BACKUP LOG [AUDIT] WITH TRUNCATE_ONLY ================ ==<反黑>=========== --壓縮交易記錄檔的大小到指定SIZE,例如以下為50MB DBCC SHRINKFILE(AUDIT_log,50) ================ ==<反黑>=========== --從系統檢視察看資料庫狀態 SELECT name,status FROM master.sys.sysdatabases WHERE name='AdventureWorks' --結果 name status -------------------------------- ----------- AdventureWorks 1073807368 (1 個資料列受到影響) ================ ============= --錯誤訊息 檔案啟動錯誤。實體檔案名稱 "C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_log.LDF" 可能不正確 --圖形畫面檢視如圖8 ================ ==<反黑>=========== --使用DBCC LOGINFO檢視預設的交易記錄檔資訊 USE AdventureWorks GO DBCC LOGINFO() GO --結果,圖10說明僅有檔案編號2的第一個虛擬記錄檔有使用 --判斷依據就是STATUS=2 --根據檔案編號所加總的FileSize就是該實體記錄檔的大小(bytes) ================ ==<反黑>=========== --使用DBCC SQLPERF搭配 資料表變數,查詢所有資料庫的交易記錄檔 SET NOCOUNT ON --以下是宣告資料表變數 DECLARE @t TABLE(dbname sysname, logSize float, logused float, status int) --將執行結果輸入到資料表變數 INSERT INTO @t EXECUTE('dbcc sqlperf(logspace)') --從資料表變數中查詢出結果,並根據條件排序 SELECT top 3 * FROM @t ORDER BY logsize desc SET NOCOUNT OFF --結果 DBCC 的執行已經完成。如果 DBCC 印出錯誤訊息,請聯絡您的系統管理員。 dbname logSize logused status ------------------- ----------------- --------------------- -------- SalesDB 6753.8046875 92.2599182128906 0 ReportServerTempDB 2680.6171875 99.0300216674805 0 PhoneDB 2377.9921875 90.7092208862305 0 ================ ==<反黑>=========== --查詢所有資料庫的空間的簡易程式碼 --宣告資料庫名稱變數 declare @name sysname --宣告簡易的資料指標變數 declare cur CURSOR FOR select name from sys.databases OPEN cur FETCH NEXT FROM cur INTO @name WHILE(@@FETCH_STATUS=0) BEGIN --利用動態TSQL執行sp_spaceused找出資料庫空間 execute(' use '+@name + ' exec sp_spaceused @updateusage = N''TRUE'' ') FETCH NEXT FROM cur INTO @name END CLOSE cur DEALLOCATE cur ================