問題
我們公司的(DBA)和web開發人員遇到用SQL Server Management Studio連接到SQL 實例(SQL instances)和用Windows集成身份驗證(Windows Integrated Authentication)連接到其它SQL工具時出現的問題。 我們的公司很大,在Active Directory中擁有遠遠超過70000的用戶和組。當我們查看SQL Server中的NT事件日志時,我們看到MSSQL和Kerberos兩個錯誤。到底是什麼造成了這些錯誤呢?
專家解答
當一個用戶在Active Directory組中有很多成員,通常超過100個(這個數目包含明確的成員以及來自其它組的繼承成員)時,這種情況會發生。盡管沒有注冊表項的默認值,但是MaxTokenSize的默認值為12000(十進制)。在絕大多數的組織機構裡,這個大小是足夠有余的。然而,在大型機構裡,用戶的tokens大於默認值。由於Kerberos不能接受損壞的tokens,身份驗證會失敗。如果你遇到這個問題,你將會看到兩個錯誤信息,而這兩個錯誤信息說明默認的MaxTokenSize是不足夠的:
圖一
NT error log entry from the MSSQL service
圖二
Microsoft有一個名為TokenSZ的工具,它可以用於確定用戶的MaxTokenSize。有一些轉換可以用於這個工具,但計算最大token大小的一般語法是:
Sample TokenSZ Syntax
E:\>tokensz/compute_tokensize/user:Administrator/domain:CULLENSOLUTIONS.com /password:OU812
Results of executing TOKENSZ
圖三