﻿# 解決 SQL Server 2008『無法設定主體 ‘sa’ 的憑證』的問題

我一般來說都是用 Windows 驗證連接資料庫，不過前幾天想把我本機的 SQL Server 2008 的 sa 帳戶啟用時卻發生『無法設定主體 ‘sa’ 的憑證』的錯誤 (如下圖)，這個奇特的錯誤只會發生在使用 SQL Server 2008 的 SQL Server Management Studio (SSMS) 工具時，連用 SQL Server 2008 SSMS 設定設定 SQL Server 2005 也會出現一樣的問題。

![無法設定主體 ‘sa’ 的憑證](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/3a273acead38adcb1488-image.png "無法設定主體 ‘sa’ 的憑證")

解決方法也令人匪夷所思，只要切換到 \[**一般**\] 頁籤，並勾選 \[**對應到認證(M)**\] 即可更新完成，所有針對 sa 帳戶的操作如改密碼、改狀態、…等等都需要勾選這個勾選項目才行：

![image](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/f399bb70c1e17c0b24d2-image.png "image")

我透過點選 \[指令碼\] 按鈕 ( 參見 [查詢透過 Management Studio 的 GUI 所執行的 T-SQL 指令](/post/2008/06/05/Find-out-T-SQL-commands-generated-by-SQL-Server-Management-Studio) ) 取得指令碼發現，透過 GUI 的操作的些微差異的確會影響 T-SQL 的指令，如果會使用 T-SQL 指令操作或管理資料庫的人應該不會有這些困擾。

1\. 如果**沒有**勾選 \[**對應到認證(M)**\] 時產生的指令碼如下：

```
USE [master]GOALTER LOGIN [sa] WITH DEFAULT_DATABASE=[master],     DEFAULT_LANGUAGE=[繁體中文], CHECK_EXPIRATION=OFF,     CHECK_POLICY=ON, NO CREDENTIALGOALTER LOGIN [sa] ENABLEGO
```

2\. 如果**有**勾選 \[**對應到認證(M)**\] 時產生的指令碼如下：

```
ALTER LOGIN [sa] ENABLEGO
```

**相關連結**

-   [當您嘗試使用 SQL Server Management Studio 中修改 SQL Server 系統管理員帳戶的屬性時，在 SQL Server 2008 中收到例外狀況](https://web.archive.org/web/20150306043122/http://support.microsoft.com:80/kb/956177)
-   [You receive an exception in SQL Server 2008 when you try to modify the properties of the SQL Server Administrator account by using SQL Server Management Studio](https://web.archive.org/web/20130621004629/http://support.microsoft.com/kb/956177/en-us)
-   [Cannot set a credential for principal 'sa'. (SQL Server 2005/2008)](https://web.archive.org/web/20160501064205/http://www.techurbia.com:80/2009/03/cannot-set-a-credential-for-principal-sa-sql-server-20052008.html)
