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

How to create an Oracle stored procedure to lock user accounts not logged onto database for more than 90 days

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

我假设我可以创建一个配置文件对象并在我的数据库中列出资源参数,但我使用的是 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;

对于 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;