sql-server - 访问被拒绝 CREATE DATABASE LocalDB
问题描述
我安装了 SSMS 18。我从SQL Server Express 2017 安装中选择了一个新的 LocalDB 实例,因为它尚未包含在 SSMS 18 安装中。
安装后,当我尝试使用下面的 SQL 创建数据库时。
CREATE DATABASE Test
我收到以下错误:
Msg 5123, Level 16, State 1, Line 1
CREATE FILE encountered operating system error 5(Access is denied.) while attempting to open or create the physical file 'C:\Users\brechtTest.mdf'.
Msg 1802, Level 16, State 4, Line 1
CREATE DATABASE failed. Some file names listed could not be created. Check related errors.
我注意到但不确定是否相关的一件事是文件路径根本没有意义。缺少反斜杠。
之后,我尝试了一个冰雹玛丽并授予每个人对 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14E.LOCALDB\MSSQLServer 的权限。这可以防止在更改服务器选项中的目录时弹出错误。但它并没有解决原来的问题。
奇怪的是,通过 GUI(如下所示)创建数据库没有问题。但是我需要 CREATE DATABASE 才能工作,因为我收到了使用此功能的 EntityFrameworkCore 迁移的错误。
一旦我允许自己对“C:\Users”拥有所有权限,我就可以使用 CREATE DATABASE 创建数据库,因为使用的文件路径是“C:\Users\brechtTest.mdf”。但是那个文件路径没有意义。
我尝试过的一些事情:
- 重新安装 LocalDB。
- 以管理员身份运行 SSMS。
- 将 SQL Server 服务配置为使用本地用户。
- 编辑 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14E.LOCALDB\MSSQLServer 键以包含反斜杠。
我怎样才能让它正常工作,即如何调整默认路径以包含反斜杠,以便“C:\Users\brechtTest.mdf”变为“C:\Users\brecht\Test.mdf”?
解决方案
此错误是由于 SQL Express 14.0.100 中的文件创建路径中的错误造成的。如果您受到影响,请按照以下步骤操作:
- 在任务管理器 > 进程(包括 SQL Server 遥测和 SQL Server 客户端 NT 相关任务)中关闭 SSMS 和任何正在运行的 SQL Server 实例。
- 在 Windows 资源管理器中导航到 %LocalAppData%\Microsoft\Microsoft SQL Server Local DB\Instances\。
- 删除您安装的任何本地实例,例如 MSSQLLocalDB。
打开您最喜欢的 CLI(如命令提示符)并使用这些 sqllocaldb 命令。如果它说由于实例 MSSQLLocalDB 不存在而无法执行命令,请继续执行下一步。
sqllocaldb stop MSSQLLocalDB
sqllocaldb delete MSSQLLocalDB
使用最新的累积更新 https://www.microsoft.com/en-us/download/confirmation.aspx?id=56128更新本地安装的 SQL Server 。您可以在 Technet 上的 Microsoft SQL Server 更新中心查看更新概述: https ://technet.microsoft.com/en-us/library/ff803383.aspx 。
成功更新后,使用 sqllocaldb create 命令。
sqllocaldb create "MSSQLLocalDB"
您的 CLI 应提示它已创建版本为 14.0.300 或更高版本的 localdb:
LocalDB instance "MSSQLLocalDB" created with version 14.0.3223.3.
如果您成功更新了本地数据库实例,但在 : 之后收到此错误SqlException: 'Cannot create file 'C:\Users\%USERNAME%\Database.mdf' because it already exists.
,请删除指定路径中的文件并重试。
推荐阅读
- shopware - Shopware 6 - 电子邮件变量/运输时间
- swagger - 在 AEM 项目构建期间使用 swagger
- google-api - 新配额多久生效
- javascript - 如果请求是同源但不遵循标头指南,是否会触发预检请求?
- java - Java中原始类型的子类型
- sql - 跨多个表查找和更新记录
- android - Android 从 APi 的动态 url 获取数据
- c++ - 向/从文件写入和读取 boost dynamic_bitset
- javascript - 递归函数如何在javascript中工作
- python - 如何将多文件 python 项目共享为一个文件