如何创建 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 天未登录数据库的用户帐户的主要内容,如果未能解决你的问题,请参考以下文章