保护数据和日志文件的安全

SQL Server为特定帐户设置了对每个数据库中的物理数据和日志文件的文件访问权限。这些权限可以防止当文件驻留在具有打开权限的目录中时被篡改。例如,如果未设置权限,并且对数据库目录的操作系统权限设置为可由任何人“完全控制”,则可以访问该目录的任何帐户即使没有修改数据库本身的 SQL Server 权限,也可以删除或修改数据库文件。

文件访问权限可在以下任一数据库操作过程中设置:创建、附加、分离、修改以添加新文件、备份或还原。

管理注意事项

  • 仅当文件系统支持 Win32 访问控制(例如,NTFS 文件系统)时才可以设置权限。数据库引擎无法为存储在原始分区或 FAT 和 FAT32 文件系统中的文件设置权限。

  • 如果操作系统管理员手动修改文件权限,数据库引擎将不会尝试强制应用原始权限。

  • 如果通过使用 SQL Server Management Studio 更改了 SQL Server (MSSQLSERVER) 服务帐户,Management Studio 会尝试将该帐户和正确的权限添加到所有的现有数据库文件中。对于更改服务帐户时无法使用的数据库,此操作可能失败。

  • 如果通过使用 Microsoft Windows 服务更改了 MSSQLSERVER 服务帐户,操作系统管理员必须授予新服务帐户对所有数据库和日志文件的完全控制权限。

创建数据库或添加新文件

当创建数据库或修改数据库以添加新文件时,会授予 MSSQLSERVER 服务帐户和本地 Administrators 组成员对数据和日志文件的完全控制访问权限。所有其他帐户的文件访问权限将被删除。

备份和还原数据库

MSSQLSERVER 服务帐户和本地 Administrators 组成员对为了还原或备份而创建的文件具有完全控制权限。

如果文件已存在并且 MSSQLSERVER 服务帐户已具有该文件的权限,则备份或还原操作将继续。否则,数据库引擎将模拟正在执行操作的连接的 Windows 帐户并试图打开该文件。打开该文件后,会为 MSSQLSERVER 服务帐户和本地 Administrators 组成员授予权限。

备用文件(撤消文件)的处理方式与此相同。

分离和附加数据库

分离或附加数据库时,数据库引擎尝试模拟执行该操作的连接的 Windows 帐户,从而保证该帐户具有访问数据库和日志文件的权限。对于使用 SQL Server 登录名的混合安全帐户而言,该模拟可能会失败。

安全说明安全说明

建议您不要附加来自未知或不可信来源的数据库。此类数据库可能包含恶意代码,这些代码可能会执行非预期的 Transact-SQL 代码,或者通过修改架构或物理数据库结构导致错误。使用来自未知或不可信来源的数据库前,请在非生产服务器中针对数据库运行 DBCC CHECKDB,然后检查数据库中的代码,例如存储过程或其他用户定义代码。

下表显示了完成附加或分离操作后为数据库和日志文件设置的权限,以及数据库引擎是否可以模拟连接帐户。

操作

可以模拟连接帐户

文件权限授给

分离

只有执行操作的帐户。如果分离数据库后需要添加帐户,可由操作系统管理员添加附加帐户。

分离

SQL Server (MSSQLSERVER) 服务帐户和本地 Windows Administrators 组的成员。

附加

SQL Server (MSSQLSERVER) 服务帐户和本地 Windows Administrators 组的成员。

附加

SQL Server (MSSQLSERVER) 服务帐户。

方案

下列方案说明了创建数据库时设置的并在分离和附加数据库时修改的权限。

User1dbcreator 固定服务器角色的一个成员,该成员创建了包含文件 e:\Data\Sales.mdf 和 f:\Log\Sales.ldf 的数据库 Sales。创建数据库时,MSSQLSERVER 服务帐户是 SQLServiceAccount2,一个本地帐户。数据库和日志文件的完全控制权限被授给 SQLServiceAccount2 和 Windows Administrators 组成员。

现决定将 Sales 数据库移动到同一台服务器上的另一个 SQL Server 实例上。sysadmin 固定服务器角色的成员 Admin3 分离了数据库。数据库引擎为 Sales.mdf 和 Sales.ldf 文件设置了权限,因此只有 Admin3 帐户有权访问这些文件。

Admin3 连接到 SQL Server 的另一实例 SalesServerSalesServer 实例的 MSSQLSERVER 服务帐户是 SQLSalesServiceAccount。此实例上的 SQL Server 管理员 Admin3 附加了 Sales 数据库。完全控制权限被授给 SQLSalesServiceAccount 和 Windows Administrators 组成员。