拒绝访问CREATE DATABASE LocalDB

时间:2019-05-23 18:52:46

标签: sql-server

我安装了SSMS18。我从SQL Server Express 2017 installation中选择了一个新的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.

我注意到但不确定是否相关的一件事是文件路径根本没有意义。缺少反斜杠。

我调出服务器属性并尝试添加反斜杠以解决问题。 enter image description here

但是这个错误使我震惊。 enter image description here

此后,我尝试一个冰雹玛丽,并授予每个人对Computer \ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ MSSQL14E.LOCALDB \ MSSQLServer的权限。这样可以防止在更改服务器选项中的目录时弹出错误。但这并不能解决原始问题。

enter image description here

奇怪的是,通过GUI创建数据库(如下所示)可以正常工作。但是我需要CREATE DATABASE才能工作,因为使用此功能的EntityFrameworkCore迁移收到错误。

enter image description here

只要我对“ 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”?

2 个答案:

答案 0 :(得分:0)

由于我的商店的政策,我看不到图片,但是我认为您可以通过两种方式实现目标。

在SSMS中,右键单击服务器名称并选择属性,然后转到“数据库设置”,其中有一个名为“数据库默认位置”的部分可以进行修改以满足您的要求。

第二种选择是显式指定数据文件,例如:

CREATE DATABASE [test]
  ON  PRIMARY 
( NAME = N'test', FILENAME = N'c:\mypath\test.mdf' , SIZE = 8192KB , FILEGROWTH = 65536KB )
 LOG ON 
( NAME = N'test_log', FILENAME = N'c:\mypath\test_log.ldf' , SIZE = 8192KB , FILEGROWTH = 65536KB )

答案 1 :(得分:0)

此错误是由于SQL Express 14.0.100中文件创建路径中的错误引起的。如果您受到影响,请按照以下步骤操作:

  1. 在任务管理器中关闭SSMS和所有正在运行的SQL Server实例> 包括SQL Server遥测和SQL Server Client NT在内的过程 相关任务。
  2. 导航到%LocalAppData%\ Microsoft \ Microsoft SQL Server Windows资源管理器中的本地数据库\实例\。
  3. 删除您安装的所有本地实例,例如MSSQLLocalDB。
  4. 打开您喜欢的CLI(例如命令提示符),然后使用这些sqllocaldb命令。如果它说命令无法执行,因为实例MSSQLLocalDB可以执行 不存在,请继续下一步。

    sqllocaldb stop MSSQLLocalDB

    sqllocaldb delete MSSQLLocalDB

  5. 使用最新的累积更新更新本地安装的SQL Server https://www.microsoft.com/en-us/download/confirmation.aspx?id=56128。 您可以在“更新中心”中查看更新概述 Technet上的Microsoft SQL Server: https://technet.microsoft.com/en-us/library/ff803383.aspx

  6. 成功更新后,使用sqllocaldb create命令。

    sqllocaldb create "MSSQLLocalDB"

  7. 您的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.之后收到此错误,请删除指定路径中的文件,然后重试。