如何配置SQL Server 2012,使其能够恢复并查看我用户账户中的文件?

我在我的计算机上运行着一个作为服务的SQL Server 2012实例,根据服务页面显示,它以账户“NT Service\MSSQLSERVER”登录。然而,我无法在包括“本地用户和组”区域在内的任何其他地方看到该账户名称,因为正如下面的链接所说,那不是一个用户账户,而是一个服务名称,在那个微软非常贴心地标记为“账户”的框中。此时,我可以看到很多人都感到困惑。 我试图完成的任务是使用SSMS对话框“定位备份文件”来恢复文件,该对话框与任何标准的Windows文件打开对话框完全不同,可能是因为它正在执行一个“远程”任务,并且在SQL服务器的安全上下文中操作,这是另一个导致终端用户困惑的丰富信息源,希望这个问题能帮助澄清。 到目前为止,如果我想恢复我在一个文件夹中拥有的.mdf/.bak备份文件,我必须将该文件夹设置为对所有用户可读,否则我无法通过SQL Server的“定位备份文件”窗口进入。我发现这个使用图形界面与具有不同用户帐户和权限的服务进行通信的想法,而微软甚至都没有向你明确解释,即使我在Windows系统管理方面有多年的经验,我也觉得非常困惑。 我希望我错过了一些关于SQL Server的文档页面,可以告诉你,在安装新的SQL服务器实例后,如何设置安全性。 像this one这样的论坛帖子甚至有微软员工说“这很复杂”,并且在Denali中“又改变了”。现在在SQL Server 2012中是如何工作的?我如何为SQL数据库引擎的安全性SID添加读取用户文件的权限。

SQL不使用标准对话框的原因是为了防止选择SQL无法读取的文件。至于如何配置安全性,您是否愿意更改SQL运行的帐户,还是希望保持现在的方式?如果更改服务帐户可以接受,那么这很容易解决。我们使用命名帐户,所以我无法使用通用的MSSQLSERVER帐户进行测试来帮助解决这个问题。 - cfradenburg
1点击这里:http://dba.stackexchange.com/questions/23864/broken-ntfs-permissions-for-mssqlsqlexpress - Jon Seigel
如果每个人在开发时将他们的SQL服务器更改为使用普通用户ID,那可能是“最佳实践”。我只是想知道这是否是一个好主意。如果手动将“NT Service\MSSQLSERVER”添加到我需要添加的文件夹中是标准做法,我猜那应该是最合乎逻辑的最小修复方法,对吧?我希望SQL Server SSMS界面能更容易连接到这个隐藏的“NT Server\xxx”账户ID。 - Warren P
3个回答

关于“Denali”,它是SQL Server 2012的一个版本。至于“终端用户的困惑”,我并不太担心终端用户是否对SSMS感到困惑。微软开发这个工具并不是为了普通终端用户,而是为了数据库管理员或需要管理数据库的用户。因此,使用提供的工具和了解其功能会有一个学习曲线。自从SSMS在SQL Server 2005发布以来,文件对话框就一直保持这种方式。这就是为什么大多数人会继续使用T-SQL语句进行备份、恢复或附加数据库的原因。 要配置与SQL Server相关的文件系统权限,您可以按照MSDN上的说明here进行操作。 服务账户的处理方式并非由SQL Server提供,而是由操作系统层面的变化所导致。Window Server 2008 R2在服务账户周围增加了一层安全性。您的优势在于,即使使用默认设置安装,服务账户也可以更轻松地访问域上的资源。这个链接提供了关于如何处理SQL Server 2012中的服务账户权限的详细信息。以下是该链接中关于SQL Server 2012中默认使用的虚拟账户的摘录。文章中还提供了一个链接,进一步讨论了Windows中的服务账户概念,点击这里。它来自于Window Server 2008 R2,但我相信在Window Server 2012和可能的Window Server 2012 R2上仍然适用。 虚拟账户 Windows Server 2008 R2和Windows 7中的虚拟账户是管理本地账户的一种方式,提供以下功能以简化服务管理。虚拟账户是自动管理的,并且可以在域环境中访问网络。如果在Windows Server 2008 R2或Windows 7上进行SQL Server安装时使用了默认值作为服务账户,将使用以实例名称作为服务名称的虚拟账户,格式为NT SERVICE\。作为虚拟账户运行的服务通过使用计算机账户的凭据来访问网络资源,格式为\。当指定一个虚拟账户来启动SQL Server时,请将密码留空。如果虚拟账户无法注册服务主体名称(SPN),请手动注册SPN。有关手动注册SPN的更多信息,请参阅为Kerberos连接注册服务主体名称。 注意:虚拟账户不能用于SQL Server故障转移群集实例,因为虚拟账户在群集的每个节点上具有不同的SID。 下表列出了虚拟账户名称的示例。 数据库引擎服务的默认实例:NT SERVICE\MSSQLSERVER 名为PAYROLL的数据库引擎服务的命名实例:NT SERVICE\MSSQL$PAYROLL SQL Server的默认实例的SQL Server Agent服务:NT SERVICE\SQLSERVERAGENT 名为PAYROLL的SQL Server实例的SQL Server Agent服务:NT SERVICE\SQLAGENT$PAYROLL

3所谓的“最终用户”,指的是各种各样的人群,其中一些人在各个领域都非常专业和技术娴熟,但可能并不是数据库管理员。就我个人而言,我认为即使是数据库管理员也会觉得这个工具的用户界面还有待改进。强大的第三方工具市场也表明,虽然SSMS是免费的,但它完全值得付出代价。 - Warren P
12017年并没有变得更好。所以简单来说,"它将永远不会变得更好,要学会如何运作,尽管界面设计可能很糟糕。" - Warren P

要查看/访问另一个文件夹中的文件,请在该文件夹上为NT SERVICE\MSSQLSERVER授予权限。请参阅我在.bak文件在SSMS中任何目录中都不可见发布的答案,其中包含屏幕截图和所涉及的步骤。(与向文件夹添加普通用户/组权限略有不同。) 希望能对您有所帮助!

事实上,如果您尝试通过SSMS进行还原操作,并且您是通过Windows身份验证登录的(!),那么需要具备权限的将是您的Windows账户(而不是“everyone”)。而不是SQL Server服务账户。 希望这样能消除困惑。 服务账户还有其他需求。 例如,如果您通过SQL身份验证账户登录,那么操作系统应该要求哪些权限呢?在这种情况下,只会是SQL Server的服务账户! 自SQL Server 7.0以来,这一点并没有改变,甚至可能更早之前都是如此 :)

1别忘了凭据 - Remus Rusanu
我不确定这是否能消除困惑...如果您通过WA登录,您的SQL Server帐户需要具备恢复权限(就SQL Server而言),但是SQL Server服务帐户需要在文件系统上具备读取权限以打开.bak文件(通常情况下,如果它位于您的用户目录中,则不会具备该权限,除非明确授权)。 - Bruno