我正在开发一个 ASP.NET MVC3 Web 应用程序,它连接到 SQL Server 2008 R2 数据库。
一切都运行正常,直到我开始收到此错误:
The database myDb is not accessible. (ObjectExplorer)
当我尝试在 SQL Server Management Studio 中浏览数据库时也会出现此问题。似乎我不知何故失去了访问数据库的权限?我可以正常浏览其他数据库。
我正在使用混合模式身份验证(到目前为止,Windows 身份验证一直运行良好)。如果我以 身份登录,则会sa
收到相同的错误。
如果我无法访问数据库,如何将所需的权限返回给我的用户帐户?
首先,什么样的事情可能导致这种情况的发生?
我最近所做的唯一更改与数据库完全无关,我正在努力弄清楚是什么导致了这种情况。
更新 好吧,重启电脑后,一切又开始正常工作了 :/ 我没有做任何更改,还没有读过这里的回复。很奇怪!
答案1
过去我发现这是由于数据库所有者不受控制,就像它被从 SQL 实例中删除一样。
从查询窗口尝试此操作:
use <database with issue>;
exec sp_changedbowner 'sa';
然后它应该允许您在 SSMS 资源管理器中浏览数据库。
如果您没有使用混合模式身份验证,那么请使用域帐户替换“sa”,最好是作为具有 SA 权限的服务帐户。
答案2
更新好吧,重启电脑后,一切又开始正常工作了 :/ 我没有做任何更改,还没有读过这里的回复。很奇怪!
答案3
看起来像是一个非常普通的错误消息。尝试从 Windows 身份验证用户运行以下命令,看看是否能得到任何结果。
EXEC sp_change_users_login 'report'
如果是,则运行如下。
EXEC sp_change_users_login 'auto_fix', 'username_from_above'
如果这没有帮助,我们将尝试挖掘其他东西。
答案4
可接受的答案是重启后一切开始正常工作,但是为什么呢?
在我尝试使用 SSDT(Visual Studio 插件)更新数据库后,脚本失败并出现错误,然后我就遇到了这种情况。然后我甚至无法从 SSMS(Management Studio)访问数据库。我的数据库条目旁边显示“(单个用户)”,这是问题的线索。
该脚本将数据库设置为 SINGLE_USER 模式,然后突然终止,然后将其重新设置为 MULTI_USER。此后,数据库认为 SSDT 用户仍处于活动状态,并且不允许任何其他连接。重新启动清除了该连接(循环 SQL Server 服务可能也会清除该连接),这样我就可以重新连接。
从那里,我可以使用 DB 属性(选项->状态->限制访问)将数据库重新置于 MULTI_USER 模式,但是我从不同的源分支运行 SSDT 并运行至完成,从而重置了模式。