【问题标题】:How to secure a SQL database from domain admins?如何从域管理员那里保护 SQL 数据库?
【发布时间】:2014-03-25 16:13:59
【问题描述】:
我有一个数据库,我想保留在主域中,但阻止域管理员对其进行写入。读取访问不是问题。为此,看起来我必须确保任何具有写入权限的帐户仅使用 SQL 登录名(因为域管理员可以重置任何其他域帐户的密码)。我确实意识到这还有其他安全隐患。另一个问题是,Windows 服务器上的管理员获取数据库 mdf 文件并将其附加到另一个实例并修改数据库内容,然后替换原始服务器上的 mdf。我首先想知道这是否可能,还是需要通过 sql server 重新附加?
由于服务器仍在域上,域管理员显然是服务器上的管理员。他们是否有其他方法可以获得我应该担心的数据库的写访问权限(例如删除主数据库 mdf)?
【问题讨论】:
-
简短的回答是你不能。域管理员具有跨域的特殊权限。您可以撤销本地管理员在 SQL Server 中的访问权限,但如果他们真的想要,他们仍然可以获得访问权限 (technet.microsoft.com/en-us/library/dd207004.aspx)。但是,要让他们在访问权限被删除后获得访问权限,确实需要付出相当多的努力,并且确实需要重新启动。您可能会设置一个服务器级别的触发器,以便在 SQL Server 登录名发生更改时向您发送电子邮件,然后您就会知道是否有人试图使用此方法获得访问权限。
标签:
sql-server
database
security
windows-server-2008
database-security
【解决方案1】:
哇。大问题....我可以假设您是 dba 吗?在继续之前,快速免责声明:更改登录权限时要非常小心。尤其是属于 sysadmin 固定服务器角色的登录。可以从该角色中删除所有登录名。如果您的服务器仅使用 Windows 身份验证(或没有人知道 sa 密码),您可以将自己锁定在 sql 实例之外。那很不好。很糟糕……
服务器级登录
域管理员和 sql server 系统管理员是不等价的。如果您在 SSMS 中,请深入研究 Security|Logins 并展开。可能有一个“BUILTIN\Administrators”登录帐户。双击它以检查该登录名的属性。选择“服务器角色”。如果选中“sysadmin”服务器角色,则所有域管理员都对您的 sql 实例具有“sysadmin”权限。如果您取消选中它,您将取消该特权。要让域管理员(或本地计算机管理员)拥有 sysadmin 权限,必须将他们显式添加到 sysadmin 服务器角色。在 SQL 的早期版本(2000 和 2005 年)中,默认情况下 BUILTIN\Administrators 是 sysadmin 的一部分。 MS 在以后的版本中对此进行了更改,因为这是一个安全问题。如果每个域管理员都有自己的登录名(即 YourDomain\JSmith),那么您必须从 sysadmin 角色中删除这些个人登录名。这将向您显示属于 sysadmin 的所有登录名:SELECT * FROM sys.syslogins WHERE sysadmin = 1
数据库用户
接下来,您需要确定哪个本地数据库用户与 sql server 登录相关联。系统管理员登录会自动以数据库所有者 (db_owner) 的身份连接,因此您可能看不到任何数据库用户(默认用户除外)。从 SSMS 深入研究 YourDbName|Security|Users 并展开。双击用户以打开“属性”对话框。 “常规”页面将显示该用户的登录信息。 “Membership”将显示用户所属的数据库级角色。如果有一个用户映射回网络管理员的 sql server 登录名,那就太好了。但是,假设您从 sysadmin 固定服务器角色中删除了 BUILTIN\Administrators sql 登录名,该登录名将不再能够以 dbo 身份连接到数据库。您必须创建一个新的数据库用户并将其与登录名相关联。像CREATE USER [DomainAdminUser] FOR LOGIN [BUILTIN\Administrators] 这样的东西然后你可以开始为用户分层权限。您只想允许读取访问权限,对吗?将 db 用户添加到固定的 db 角色 db_datareader:EXEC sp_addrolemember N'db_datawriter', 'DomainAdminUser'。如果他们需要更多权限,请根据需要添加。
您提到的其他内容是域管理员可能会分离数据库,将其附加到另一个他们拥有系统管理员权限的 SQL Server 实例,更改数据库中的数据,然后将其重新附加回原始 SQL Server 实例。我不确定您可以采取什么措施来防范这种情况。作为域管理员,他/她将能够关闭 SQL Server NT 服务并获取 mdf/ldf 文件并随意使用它们。对于域管理员来说,这似乎有点极端。如果发生这种情况,我希望这是终止的理由。他们真的会走到这一步吗?
最后,SQL Server 安全/权限层次结构相当复杂。请不要依赖这篇文章来获得所有答案。从其中一些链接开始,尽可能多地学习。
Permissions Hierarchy (Database Engine)
Server-Level Roles
Database-Level Roles