Share via


SQL 問題與解答登入觸發程序、資料檔案重組及其他主題

編輯:Nancy Michell

設定服務帳戶

提示:更安全的密碼

SQL Server 2000 引擎針對每個 SQL Server 登入密碼都保存兩個複本。一個版本是使用者提供的實際密碼,第二個則是字母全部大寫的密碼。

這套做法有利於不區分大小寫來驗證密碼,因為使用者可以使用混合大小寫或全部大寫來登入,並獲得伺服器的存取權。不過,這種方便性隱藏著陷阱。全部以大寫來儲存密碼很容易受到以暴力破解猜測密碼的攻擊,因為它減少了可能的密碼數目。

SQL Server 2005 只存放密碼的原始版本。使用者輸入的密碼必須與存放在伺服器上的密碼相符。如果密碼不符,登入便會失敗,而使用者的存取會遭拒。如果忘了密碼字元的確切大小寫,就必須重設密碼。

假設使用者的登入名稱為 SQLCOMMUNITY,您可使用下列命令重設他的 SQL Server 密碼:

Use Master;
ALTER LOGIN SQLCOMMUNITY WITH PASSWORD = 'k3t9h4s8wJF7t';

這個命令會將 SQLCOMMUNITY SQL Server 登入的密碼重設為 "k3t9h4s8wJF7t"。

問:我在 SQL Server™ 2000 中,曾經使用 [系統管理工具] 中的 [服務] 小程式來設定 SQL Server Engine and Agent 的服務帳戶。我聽說現在在 SQL Server 2005 中應該使用 [組態管理員] 工具。為什麼不能繼續使用 Windows 工具呢?

答:SQL Server 2005 的建置比過去版本更安全。在許多情況下,使用者都只是設定內部帳戶,像是 LocalSystem,來執行 SQL Server。但是這些帳戶在 Windows® 下往往提供比所需還高或更低的權限與授權。您應該建立一個不具提高權限的 Windows 帳戶來執行 SQL Server 2005 Engine and Agent 服務。如果您透過組態管理員來選取這些帳戶,它們在 SQL Server 和作業系統內便會自動授與適當的權限與授權。您若使用 Windows 工具來管理 SQL Server 服務,可能就無法授與適當的權利,或者可能授與過多權利。

如需詳細資料,請參閱提示「變更服務帳戶」。

誰登入了我的伺服器?

問:我想要知道有誰在什麼時候登入過我的伺服器。我還想要限制一些特定的使用者只能在特定期間內登入,我還想知道如何引發追蹤來追查使用者活動。我的要求有可能辦到嗎?

答:可以,您可以利用 SQL Server 2005 達成所有這些動作,但必須安裝 Service Pack 2。

SQL Server 2005 可讓您建立登入觸發程序來引發 T-SQL 或預存程序以回應 LOGON 事件。您可以使用登入觸發程序透過追蹤登入活動、將登入限制到 SQL Server,或是限制特定登入的工作階段數目來稽核和控制使用者。要注意的是,事件是在登入已成功經過驗證之後,使用者工作階段實際建立之前才會引發。因此,所有源自觸發程序內的 PRINT 陳述式裡面的訊息 (例如訊息或錯誤) 都會傳送至 SQL Server 錯誤記錄檔。如果某登入的驗證剛好失敗,就不會引發 Logon 觸發程序。

下面的範例說明如何建立登入觸發程序,並在使用者登入時馬上傳送訊息到 SQL Server 錯誤記錄檔:

ALTER TRIGGER Ops_Login
ON ALL SERVER
AFTER LOGIN
AS
PRINT SUSER_SNAME() + ' has just logged in to ' + LTRIM(@@ServerName) + ' SQL Server at '+LTRIM(getdate())
GO

若要查看設定在伺服器層級的所有觸發程序,請使用下列查詢:

SELECT * FROM sys.server_triggers;

重組最佳作法

問:修正 SQL Server 中資料檔案重組的最佳方法為何?如果我們使用 Windows 中的重組工具,它們會把 SQL 資料檔案當作完整的檔案,而不會進行細部的重組。

答:您可以備份資料庫,然後將它還原。如果連續的檔案間存有空間,應該會連續地寫入資料庫。也就是說,要停機嘗試重組實體檔案通常是不太值得。基本上,外部分散程度一般都不太嚴重。定期重新編製資料索引來盡可能減少內部分散還比較有效。這不但可充分發揮預先讀取的效率,還能達成可緩衝的最大資料量。

有效的磁碟 I/O 有幾個最重要的因素,確保磁碟對齊而且 RAID 組態正確無誤,調整磁碟陣列以適當處理 I/O 負載,以及維持 Log、Data、TempDB 和備份檔案的適當配置。只要避免使用自動成長和自動壓縮作為調整資料檔案大小的主要方法,就可以減少建立的磁碟區層級檔案片段數量。例如,執行 10 次 500MB 自動成長,每次大概會新增 10 個新的實體檔案片段。相較之下,5GB 的單次手動成長就只會增加一個。

提示:變更服務帳戶

您知道當以 Windows NT® 帳戶來設定 SQL Server 服務登入帳戶時,SQL Server 會將 Windows 使用者權限與授權設定在好幾個不同的檔案、資料夾和登錄機碼上嗎?您也可以從 [系統管理工具] 的 [服務] 主控台設定 SQL Server 服務帳戶。不過,當您透過 [服務] 進行這個動作時,並不會設定權限與授權,因此可能會因為前述的 SQL Server 和 Windows 項目上缺乏適當的安全性設定而碰到嚴重的問題。

所以,強烈建議您使用 SQL Server 組態管理員,而不要使用 [服務] 主控台來變更 SQL Server 或 SQL Server Agent 服務帳戶。然而,若是您已使用 [服務] 主控台對帳戶進行變更,還是可以修正這個問題。

步驟 1: 在下列登錄機碼及其子機碼上套用完整權限:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<MSSQL.x>

步驟 2: 在此 NTFS 資料夾上為 MSSQLServer 服務和 SQLServerAgent 服務 (本機 Windows NT 帳戶或網域 Windows NT 帳戶) 的啟動帳戶設定完整控制權:

Drive:\Program Files\Microsoft SQL Server\<MSSQL.1>\MSSQL

但是強烈建議您不要手動進行這個動作,而是使用 SQL Server 組態管理員對 SQL Server/Agent 服務帳戶進行變更。

**感謝下列 Microsoft IT 專家提供其技術專業知識:**Cary Gottesman、Saleem Hakani、Trayce Jordan、Peter Kalbach、Al Noel、Uttam Parui、Amber Sitko 和 Buck Woody。

© 2008 Microsoft Corporation and CMP Media, LLC. 保留所有權利;未經允許,嚴禁部分或全部複製.