Oracle 删除用户检查

Oracle drop user check

数据库:Oracle11gR2

OS: Linux

我想删除 USER1 Oracle 用户,它已经被锁定了几个星期了。

我可以 运行 "drop user USER1 cascade;" 删除用户但在删除之前想确认没有其他人正在使用或在用户被锁定后使用对象。

  1. 如何在 Oracle 中验证在上个月左右没有人正在访问或没有访问过 USER1 对象?
  2. 是否有数据库 query/view 可用,我们可以使用它来确保 运行 DROP 命令是安全的?

谢谢

理想情况下,您应该在锁定帐户时启用对各种对象访问的审核,并将其保留在适当的位置上,无论您需要感到舒适table。一个月可能就足够了,但您可能还需要考虑季度或年度流程。

假设您当时没有启用审核并且不想现在启用审核并再等一个月,您可能可以使用不太完整的方法(理解这些方法是将提供更少的确定性)。

  • 您可以查询加入 v$statnamev$segment_statistics 以查看有关 table 段的各种统计信息。例如,"db block gets" 和 "consistent gets" 会向您显示某些进程对 table 中的块执行当前或一致读取的次数。但它不会告诉您读取了什么——例如,收集统计信息的后台作业可能会从 table 中读取数据。那些 tables 应该从数据库上次重新启动以来积累数据,这可能比您感兴趣的时间段长得多或短得多。您可以在 Oracle 文档中获得 list of the available statistics 来确定 -准确调整您想要查找的内容。
  • 您可以查询 dba_hist_seg_stat 而不是 v$segment_statistics。这将按时间段细分统计信息,因此它会告诉您读写发生的时间。但它不会告诉你是谁干的。这还要求您获得使用 AWR 的许可(否则查询 table 可能会违反您的许可并在您被审计时产生问题)。
  • 您可以查看 dba_dependencies 以查看是否有任何对象依赖于相关用户拥有的对象。但这只适用于存储的对象(视图、过程等)。它不会捕获有关 SQL 从应用程序提交的语句或用户发出的临时查询的信息。

如果您不想启用审核并等待适当的时间,您最好从任何角色/用户拥有的 user1 对象上撤销权限,而不是直接删除这些对象。这样,如果某些东西因缺乏特权而爆炸,则无需从备份中取回对象就可以相对容易地恢复特权。您还可以在权限被拒绝错误上创建触发器,告诉您请求来自何处。