我收到多个错误LocalDB
(启动错误,无法从 SQL Server Management Studio 创建数据库,以及尝试恢复备份时的多个 问题),并且我发现的所有修复都没有任何帮助。在我看来,所有错误的根源都在于权限设置不正确。
现在,一个简单的 DDL 表创建脚本可以在 SQL Server Management Studio 中正常工作,并在我的用户帐户文件夹的根目录中创建数据库(如此处所述)。然而,Instances 文件夹(D:\Users\[My name]\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances
尽管在安装带有高级服务的 SQL Server Express 时,我在另一个位置指定了 DATA 文件夹 - 仅存储标准 SQL Server Express.mdf
文件,但不存储LocalDB
实例)在权限方面似乎存在问题(与帐户相反root) 因此,为了让我的数据库文件位于我的项目中的某个位置,我想将 Instances 文件夹移动到另一个位置。这可能吗?我什至没有找到相应的注册表项。
我正在使用 SQL Server Express 2012 以及相同版本的 SSMS(已安装最新更新)。
数据库设置页面给我带来了一个错误,无法编辑也无法在那里看到任何配置。我让 Windows Update 再次检查更新,并且有一些未安装的 SQL Server Express 更新(尽管我确定我之前选择了要安装的所有内容),所以我安装了它们。这使我可以进入设置页面。
我尝试将 LocalDB 实例的根文件夹设置到其他位置,但我尝试的每个文件夹都收到拒绝访问错误,即
更改设置“Microsoft.SqlServer.Management.Smo.ObjectKeyBase”失败。(Microsoft.SqlServer.Smo)
- - - - - - - - - - - - - - - 附加信息:
执行 Transact-SQL 语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo)
RegCreateKeyEx() 返回错误 5,“访问被拒绝。” (Microsoft SQL Server,错误:22002)
即使文件夹为每个人设置了完全控制,我也会得到这个!更有趣的是唯一有效的文件夹,一个被设置为默认的文件夹(用户帐户的根目录)没有应用任何特殊权限——只有我的用户拥有的那些(就像我尝试设置的任何其他文件夹一样)。实际上,这意味着我所有的 LocalDB 数据库文件都保存到我帐户的根文件夹中。
我使用 Process Monitor 来跟踪注册表访问,并发现它在尝试写入时被拒绝访问:
我通过打开注册表编辑器并让每个人都可以完全访问
HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\MSSQLServer
. 然后我更改了默认位置,并在完成后删除了“所有人”访问权限。这产生了以下以前没有的额外键: