这个问题之所以开始,是因为我们获取了生产备份的副本并将它们恢复到较低的环境中(当然有加扰数据)供开发人员练习和/或调试。
我们的 ID 被分配DBADM
为 、SECADM
、DATAACCESS
和ACCESSCTRL
(主要是实例所有者)。当我们恢复到较低的环境时,我们最终需要以原始实例所有者的身份登录,并将上述相同的权限(DBADM
、SECADM
、DATAACCESS
和ACCESSCTRL
)授予新的目标实例所有者。
我认为将原始 ID 保留在数据库中不是一个好主意,因此我试图撤销其特权。在我的包重新绑定开始失败后不久,因为显然有包与该原始 ID 相关联。不知道它们包含什么以及我是否可以/应该删除它们(即使我认为删除它们是无害的???)我最终将特权恢复给原始实例所有者并将其保留在那里。
这一直困扰着我。DBADM
具有、SECADM
、DATAACCESS
、 和的权力的 IDACCESSCTRL
不应该只是躺在周围。对我来说这是一个安全漏洞。对我来说,应该撤销 ID,并且应该执行任何其他需要执行的清理以确保数据库安全。如果说我会退出公司或我的 DBA 同事也会这样做,情况也是如此。我们希望撤销 ID 并清理和/或转移对象的所有权以消除任何安全漏洞。
问题是,我不知道需要清理什么。我在谷歌和 IBM 的文档上做了一些探索,但我找不到任何建议从系统中删除如此高的用户时通常应该采取的步骤。甚至是有BINDADD
权限的用户?
你们都以什么顺序删除/撤销了什么?有没有办法编写脚本/自动化?您如何知道可以删除哪些软件包?还有其他需要移动/转移的东西吗?
还有其他人遇到这个吗?想法?经验?
您可能需要考虑几个方面。
首先,您可以使用DB2_RESTORE_GRANT_ADMIN_AUTHORITIES 注册表变量在恢复期间自动为目标实例所有者分配适当的权限。如果在还原之前将其设置为 ON,则执行还原的用户将获得这些权限。
其次,大多数绑定/编译问题来自于这样一个事实,即只有对象所有者,即首先创建该对象的授权 ID,才被授予对其执行某些操作的权限。如果您在生产中以实例所有者身份运行 DDL 脚本,那么这将是恢复后所有对象的所有者 ID,无论 DB2_RESTORE_GRANT_ADMIN_AUTHORITIES 设置如何。当然,您可以使用TRANSFER OWNERSHIP 语句来更改它,但在现实生活中,数据库中有数万个对象,这可能不切实际。
为了避免“第二”部分,在许多组织中,人们使用一个特殊的“构建者”授权 ID,与实例所有者分开,来运行 DDL 脚本。此 ID 不会被赋予任何不必要的特权,可以受到严格控制,并且当存在于所有环境中时,应该能够执行所有必要的任务而不会增加安全风险。