您不應該停用 SQL Server 中 msdb 資料庫中的來賓使用者

本文說明當您在 SQL Server 中停用 msdb 資料庫中的來賓使用者時,可能發生的各種問題。

原始產品版本:SQL Server
原始 KB 編號: 2539091

在 msdb 資料庫中停用來賓使用者時的徵兆

為了讓某些Microsoft SQL Server 功能能夠運作,必須在 msdb 資料庫中啟用來賓使用者。 本文說明您在 msdb 資料庫中停用來賓使用者時可能會遇到的一些問題。 本文也提供如何解決這些問題的相關信息。

在 msdb 資料庫中停用來賓使用者時,當使用者展開 Management Studio 中的 [資料庫] 節點或伺服器應用程式嘗試連線到 SQL Server 時,您可能會收到錯誤 MSSQLSERVER_916 。 發生此問題時,您可能會在環境中遇到下列一或多個徵兆。

注意

視案例而定,錯誤的文字可能會稍有不同。 不過,根本原因基本上是相同的。 原因在 msdb 資料庫中的許可權不足。 當 物件總管 嘗試顯示每個資料庫的原則式管理狀態時,就會發生這些徵兆。 物件總管 會使用目前登入的許可權來查詢 msdb 資料庫以取得這項資訊,這會導致錯誤。

徵兆 1

在 SQL Server 2012 和更新版本中,當不是 SQL Server 中 Sysadmin 固定伺服器角色成員的使用者,且未在 msdb 中授與適當許可權的使用者嘗試展開資料庫節點或該節點下的任何資料夾時,他們會收到類似下列的錯誤訊息:

無法顯示要求的對話框。 其他資訊:無法顯示要求的對話方塊。 (SqlMgmt)執行 Transact-SQL 語句或批次時發生例外狀況。 (Microsoft.SqlServer.ConnectionInfo)

伺服器主體 <使用者名稱> 無法存取目前安全性內容下的資料庫 msdb。 (Microsoft SQL Server,錯誤:916)

徵兆 2

在 SQL Server 2008 和 SQL Server 2008 R2 環境中,當不是 SQL Server 中 Sysadmin 固定伺服器角色成員的使用者,而未在 msdb 中授與適當許可權的使用者嘗試展開資料庫節點或該節點下的任何資料夾時,他們會收到類似下列的錯誤訊息:

無法擷取此要求的資料。 (Microsoft.SqlServer.Manager.Sdk.Sfc)
其他資訊:
執行 Transact-SQL 陳述式或批次時發生例外狀況。
(Microsoft.SqlServer.ConnectionInfo)
伺服器主體 <Servername> 無法存取目前安全性內容下的資料庫 「msdb」。 (Microsoft SQL Server,錯誤:916)

注意

展開 [資料庫] 節點只是其中一個活動,需要來賓帳戶的連線許可權至 msdb 資料庫。 任何至少需要存取 msdb 資料庫的活動都可能發生類似的錯誤。

如何判斷問題

若要判斷客體使用者是否在 msdb 資料庫中正確設定,請以系統管理員固定伺服器角色的成員身分執行下列查詢:

USE msdb;

SELECT prins.name AS grantee_name, perms.*

FROM sys.database_permissions AS perms

JOIN sys.database_principals AS prins

ON perms.grantee_principal_id = prins.principal_id

WHERE prins.name = 'guest' AND perms.permission_name = 'CONNECT';

GO

如果您收到類似下列的結果集,則來賓使用者具有必要的許可權。

grantee_name class class_desc major_id minor_id grantee_principal_id grantor_principal_id type permission_name state state_desc
客體 0 DATABASE 0 0 2 1 CO CONNECT G GRANT

如果您收到空的結果集,或如果 state_desc 在此提及的結果集中顯示 DENY,則會在 msdb 資料庫中停用來賓使用者。 當您連線到資料庫時,可能會收到錯誤 916。

如何解決問題

若要解決此問題,請在 SQL Server Management Studio 中,以系統管理員固定伺服器角色的成員身分執行下列查詢:

USE msdb;

GRANT connect TO guest;

GO

參考資料