如何创建 Oracle 存储过程来锁定超过 90 天未登录数据库的用户帐户

Posted

技术标签:

【中文标题】如何创建 Oracle 存储过程来锁定超过 90 天未登录数据库的用户帐户【英文标题】:How to create an Oracle stored procedure to lock user accounts not logged onto database for more than 90 days 【发布时间】:2017-01-24 13:25:04 【问题描述】:

我假设我可以创建一个配置文件对象并列出我的数据库中的资源参数,但我使用的是 Oracle 11g,而且似乎该功能不存在。

这是我迄今为止尝试过的:

select username from dba_audit_trail
where  action_name = 'LOGON'
group  by username
having max(timestamp) < sysdate - 90

我还尝试创建一个配置文件,尝试使用 INACTIVE_ACCOUNT_TIME 作为我的资源参数,但它在 Oracle 11g 中不存在:

CREATE PROFILE time_limit LIMIT 
INACTIVE_ACCOUNT_TIME 90;

【问题讨论】:

到目前为止你尝试过什么?请发布您的尝试,解释您遇到的问题。 select username from dba_audit_trail where action_name = 'LOGON' group by username with max(timestamp) alter user username account lock; 【参考方案1】:

对于 12c,它可以是:

begin
for x in 
(select username
  from dba_users
  where last_login < sysdate - 90) 
loop
  execute immediate 'alter user ' || x.username || ' account lock';
end loop;
end;

如果您使用的是 11g,您可以尝试查询循环:

begin
for x in 
(select username from dba_audit_trail
 where  action_name = 'LOGON'
 group  by username
 having max(timestamp) < sysdate - 90) 
loop
  execute immediate 'alter user ' || x.username || ' account lock';
end loop;
end;

【讨论】:

您的回答很好,但我只是对您的选择语句有疑问。 where 子句有“last_login”。你从哪里得到的? dba_users 表有这样的列。 No..DBA_USERS没有这样的column..检查..您可以修改您的块并将其作为传递参数获取 执行请求的操作时遇到错误:ORA-00904: "LAST_LOGIN": invalid identifier 在 12c 中有。 docs.oracle.com/database/121/REFRN/…

以上是关于如何创建 Oracle 存储过程来锁定超过 90 天未登录数据库的用户帐户的主要内容,如果未能解决你的问题,请参考以下文章

如何暂停存储过程一段时间?

如何在Oracle中使用Java存储过程

事务运行时间超过锁定超时

Oracle如何创建存储过程和如何调用存储过程

如何解决oracle存储过程select into问题

在oracle中如何查看存储过程创建信息