为什么我的数据库连接到 SQL Express 时是只读的,但连接到 SQL Web 时却不是?

为什么我的数据库连接到 SQL Express 时是只读的,但连接到 SQL Web 时却不是?

我有一对 .mdf/.ldf,最初是在 2008 R2 Standard 中创建的,大小远低于 10GB,并带有 ACL:

d:\db snapshot\DB_NAME.mdf
    SERVERNAME\SQLServerMSSQLUser$ACCOUNT$MSSQLSERVER:F
    OWNER RIGHTS:F
    BUILTIN\Administrators:F

d:\db snapshot\DB_NAME_log.ldf
    SERVERNAME\SQLServerMSSQLUser$ACCOUNT$MSSQLSERVER:F
    OWNER RIGHTS:F
    BUILTIN\Administrators:F

当我将数据库附加到 SQL Express 2008 R2 实例时,它显示为只读。当一模一样使用 SQL Web 2008 R2 设置 acls 和用户帐户以及 SQLCMD 语句,它变为可写的。我查看了 MSDN 的比较页面但我什么也没发现。这到底是怎么回事?谢谢!

答案1

如果 SQL Server Web 以 身份运行,LocalSystem而 SQL Server Express 以 身份运行NetworkService,那么 SQL Server Express 对数据库文件没有写权限是完全正确的,因为NetworkService帐户没有管理权限(尽管根据您发布的 ACL,它甚至不应该有权限……但也许是从其他地方继承的)。

尝试授予该帐户对这些文件的完全控制权限NetworkService,然后问题就应该得到解决。

答案2

我最好的猜测是,这与 SQL Server 服务正在执行的帐户的权限有关。看起来其他人也见过这种情况发行于之前,如果服务帐户可以读取您附加的文件但不能写入文件,则数据库将处于只读状态。

答案3


这解决了我的附加数据库只读问题,即使在数据库本身及其上方的根文件夹上重新授予权限后也是如此!在您变得更加秃顶之前,请尝试一下。


这最初是由 clonezilla 引起的。我将硬盘从 SSD(操作系统在上面)换成了 3 TB 的超大硬盘。我宁愿选择速度慢但空间大的硬盘。克隆后,我重命名了服务器(Homer... duh),并将我的网站复制粘贴到较新的硬盘上,这样做破坏了我所有的 D 盘权限。我的 D 盘数据库都不能没有 READ ONLY NAG!这让我很困惑,因为 D 盘根目录子文件夹的所有权限都被重新授予,除了:MSSQL11$SQLEXPRESS 这是去哪儿了?

显然,我在 D:\SQLDATABASES\ 驱动器上为所有数据库(包括 SQL 和 MySQL)设置了一个单独的目录。我已授予所有权限,但仍然不行!原来是我缺少MSSQL11$SQLEXPRESS

因为我在百思买 (BestBuy) 购买了两个 (3 TB 硬盘),所以我的带有操作系统的 C 盘是克隆的,而我的 D 盘则是愚蠢地复制粘贴的,而不是克隆的,这本来可以解决这个问题。

总之,如果你有 Windows Server 2012,并且你检查了三遍权限,但缺少MSSQL11$SQLEXPRESS(您甚至无法在权限中添加它...不存在)只需将您的数据库剪切并粘贴到默认 SQL 路径中,Viola 危机就避免了。我知道这是一个权限问题,但我即将用大锤解决它!请让这篇简单的帖子帮助我以外的人。

我的默认 SQL 路径如下:这个有用,宝贝!将其粘贴到数据目录中

C:\Program 文件\Microsoft SQL 服务器\MSSQL11.SQLEXPRESS\MSSQL\DATA

相关内容