MSSQLSERVER_916

适用于:SQL Server

详细信息

属性
产品名称 SQL Server
事件 ID 916
事件来源 MSSQLSERVER
组件 SQLEngine
符号名称 NOTUSER
消息正文 服务器主体“%.*ls”无法访问当前安全上下文中的数据库“%.*ls”。

说明

该登录名没有足够的权限,无法连接到命名的数据库。 可以连接到此 SQL Server 实例但数据库中没有特定权限的登录名接收来宾用户的权限。 这是一项安全举措,为了防止一个数据库中的用户连接到他们没有权限的其他数据库。 当 guest 用户没有 CONNECT 权限而无法连接到命名数据库并且未设置可信属性时,会出现此错误消息。 当 guest 用户没有 CONNECT 权限而无法连接到命名数据库时,会出现此错误消息。

当拒绝或撤销对 msdb 数据库的 CONNECT 权限时,当对象资源管理器尝试显示每个数据库的基于策略的管理状态时,SQL Server Management Studio 可能会收到此错误。 对象资源管理器使用当前登录名的权限查询 msdb 数据库以获取此信息,这会导致错误。 还会出现以下错误信息:

无法为此请求检索数据。 (Microsoft.SqlServer.Management.Sdk.Sfc)

用户操作

警告

在采取此安全措施前,请确保您明确理解用户是在不同的数据库中验证身份的。 下面的方法可能会允许在一个数据库中具有权限的用户连接到其他数据库,这可能会向恶意用户公开数据。 启用包含的数据库后,以下步骤可以允许一个数据库中的数据库所有者授予对 SQL Server 实例上其他数据库的访问权限。

可以按以下方式之一连接到数据库:

  • 向特定登录名授予针对命名数据库的访问权限。 下面的示例向登录名 Adventure-Works\Larry 授予针对 msdb 数据库的访问权限。

    USE msdb ;
    
    GO
    
    GRANT CONNECT TO [Adventure-Works\Larry] ;
    
  • 向 guest 用户授予针对在错误消息中指定的数据库的 CONNECT 权限。 以下示例授予用户 CONNECTmsdb 数据库的 guest 权限。

    USE msdb ;
    
    GO
    
    GRANT CONNECT TO guest ;
    
  • 在验证了用户身份的数据库上启用 TRUSTWORTHY 属性。

    ALTER DATABASE AdventureWorks SET TRUSTWORTHY ON;