我从另一个人那里得到了这个错误,我已经没有想法了。我可以毫无问题地访问这个数据库,数据库处于 MULTI_USER 模式,收到错误的人是用户等。
数据库是 READ_ONLY 并且有问题的用户以前使用过这个数据库并且只有数据库读取权限,所以没有设置被篡改的机会。
昨天,我添加了一些函数,不得不设置为 SINGLE_USER 和 READ_WRITE,但我已经三重检查了 db 是否已设置回 MULTI_USER。我无法确定这是巧合还是因果关系。无论哪种方式,我都处于死胡同。
这是错误报告:
The database [dbName] is not accessible. (Object Explorer)
----------------------------------------
Program Location:
at Microsoft.SqlServer.Management.UI.VSIntegration.ObjectExplorer.DatabaseNavigableItem.get_CanGetChildren()
at Microsoft.SqlServer.Management.UI.VSIntegration.ObjectExplorer.NavigableItem.RequestChildren(IGetChildrenRequest Request)
at Microsoft.SqlServer.Management.UI.VSIntegration.ObjectExplorer.ExplorerHierarchyNode.BuildChildren(WaitHandle quitEvent)
Run Code Online (Sandbox Code Playgroud)
有这种错误的经验吗?
Bre*_*zar 10
通常这是由于用户的默认数据库设置为他们没有权限的数据库,或者它处于脱机状态。
例如,假设我在 Sales 数据库中为您设置了一个登录名,然后我在 SSMS 中右键单击您的登录名并将您的默认数据库更改为 master - 但您在 Master 中没有任何权限。当您尝试连接时,即使您想要 Sales 数据库,默认情况下也会进入 Master,并收到此错误。
如果有人剥夺了您在 Sales 中的权限并且没有将您的默认数据库更改为其他内容,也会发生这种情况。
这就是我喜欢将所有用户的默认数据库设置为 TempDB 的原因。用户数据库可以来来去去,但 TempDB 永远存在。另外,如果有人不小心创建了一个对象,至少它在一个一次性数据库中,而不是像 Master 或 Sales 这样的东西。