SQLServer 错误 916 服务器主体 “%.*ls” 无法在当前安全上下文下访问数据库 “%.*ls”。

详细信息

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

说明

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

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

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

用户操作

警告

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

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

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

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

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

    ALTER DATABASE AdventureWorks SET TRUSTWORTHY ON;
    

你可能感兴趣的