3

作为加强安全性的练习,我将删除 Oracle 数据库用户的所有系统权限。现在这个用户只有以下系统权限:

  • 创建会话
  • 无限表空间

我希望用户不能执行任何 DDL 命令。但令我惊讶的是,即使无法创建一个,用户也可以在自己的模式中 DROP TABLE。

Oracle文档说 DROP TABLE 的先决条件是“该表必须在您自己的模式中,或者您必须具有 DROP ANY TABLE 系统特权”。只是!!!我不了解 Oracle 的安全逻辑,但有什么办法可以防止用户删除自己的表?

另一种方法是创建另一个用户来运行应用程序并授予对象访问权限,我宁愿避免这样做,因为存在潜在问题。

4

1 回答 1

11

用户将始终有权删除他们拥有的对象。您无法通过撤销权限来防止这种情况发生。

由于您正在考虑加强安全性,因此创建一个新用户并授予该用户操作数据所需的任何权限是正确的答案。唯一应该以拥有应用程序对象的用户身份登录生产数据库的人是 DBA,而且只有在他们正在部署对模式的更改时。其他所有人都应该以架构所有者以外的用户身份登录到数据库。

话虽如此,如果正确的解决方案比您现在准备承担的工作更多,则潜在的权宜之计是在数据库上创建一个 DDL 触发器,如果DROP​​针对指定架构中的对象发出 a ,则该触发器将引发异常。这不如正确的解决方案安全。在实施触发器时您可能会错过一些东西,您或其他人可能会删除或禁用触发器并忘记重新启用它等等。这使得安全报告变得更加困难,因为您有一个无法使用的自定义解决方案在各种安全相关的数据字典视图中很明显,这可能会给审计人员带来问题。

于 2012-01-12T17:23:19.447 回答