DBA*_*ser 7 sql-server-2008 security sql-server
最近,我们有一个存储过程请求,需要跨多个数据库进行访问。当然,这种情况并不少见,但在我们的案例中,之前我们使用了服务帐户,并且该服务帐户具有对所有数据库的读/写权限。
但是现在我们将所有权限更改为windows登录AD组,AD组中的用户没有对所有数据库的所有权限。
例子:
众所周知,这种跨数据库的权限可以通过
我的问题是,关于安全性和保持简单和安全的最佳解决方案是什么?
请注意,没有任何开发人员是任何数据库的数据库所有者,并且提升的权限仅分配给 DBA,因此有人进行黑客攻击或 SQL 注入或冒充系统管理员的可能性是“无”的。
但同样,我想知道在这种情况下你会怎么做?我更喜欢选项3。
选项 1 是最糟糕的..不会使用它..
选项 2 需要大量的行政工作..
选项 3(参见最后一句:))
选项 4最近我不得不考虑如何保护数据库。我的解决方案就是这个。这里有一篇关于安全的很棒的文章。即使一开始使用证书有点复杂(之前从未使用过它们),我还是很高兴这个选择。我向证书登录/用户授予权限。我用该证书签署程序,一切正常。我使用相同的系统授予动态 SQL 权限(因此,如果存在 sp_executesql,我会向证书用户授予必要表的最低权限,因此 proc 的调用者看不到表,并且我不必以所有者身份执行或执行)。授予使用非对称密钥的权利也是如此。我总是知道谁是程序的调用者(不执行为),尽管它对我来说不是很重要。
在开发期间签署程序有点麻烦(试图找到解决这个问题的好方法)。目前我正在搜索过程文本(DDL 触发器)以使用其他数据库,如果找到它,我会打印出警告,该过程可能需要签名。
我错过的另一件事是它不可能签署函数或视图(必须有一个很好的理由),所以你不能使用它们来访问其他数据库。
我想说的最后一件事 - 我更愿意用最少的模式解决尽可能多的问题。因此,如果您广泛使用“执行为”和代理用户,那么也许值得信赖的选项是更好的选择。