除了执行我在 SQL 2005 安装中禁用的 XP_CmdShell 之外,获得对我的数据库的 DBO 权限的恶意用户还能做什么:
- 到我的数据库,
- 到我的服务器?
我正在评估某人获得 DBO 以证明在应用程序中运行“最低权限”用户帐户的最坏情况安全风险。一些人声称,由于我们不使用“机密数据”,因此获得 DBO 的人的影响是微乎其微的。
除了执行我在 SQL 2005 安装中禁用的 XP_CmdShell 之外,获得对我的数据库的 DBO 权限的恶意用户还能做什么:
我正在评估某人获得 DBO 以证明在应用程序中运行“最低权限”用户帐户的最坏情况安全风险。一些人声称,由于我们不使用“机密数据”,因此获得 DBO 的人的影响是微乎其微的。
他可以运行任何 XP_ sproc,因此它可能会弄乱注册表并弄乱您的整个服务器。删除/更改表等...
dbo 是数据库所有者——它可能是也可能不是 sa。作为 dbo,您基本上可以自由支配拥有的数据库- 显然,这可能导致权限更改、表删除等。
作为 sa,您可以自由支配服务器。这包括安装新的扩展过程(或 .NET 程序集,如果您启用了 CLR),以及 dbo 可以做的所有事情(适用于所有数据库)。而且,您还可以再次启用 xp_cmdshell。
网上有很多关于 SQL 注入的信息。限制您连接到 SQL 的用户的权限是一项非常重要的防御措施。
http://en.wikipedia.org/wiki/SQL_injection
这是我几年前遇到的一个简单而可怕的例子。网站使用 URL 动态生成 SQL 语句并运行它们。我能够猜到像这样的网址
www.blah.com/.../load.aspx?itemid=1
像这样生成SQL
SELECT * FROM id=1 的项目
所以我发送了这个网址:
www.blah.com/.../load.aspx?itemid=1;删除表项
砰。
至少,如果数据库连接不是 dbo,这将失败。
说白了,如果他拥有你的数据库,他就拥有你的数据库。也就是说,你可以吻别你的数据了。
也就是说,你可以吻别你的数据了。
但是你在磁盘和磁带上有备份,所以你是金子!
是的。典型的防御是“好吧,至少他不能弄乱他的数据库之外的任何东西”(未启用 xp_CmdShell)。我,我不喜欢在我家锁着的壁橱里有一个疯狗强奸犯。但这个类比对管理层来说并不是一个很好的卖点。