我正在尝试根据此语句来解决oracle中的存储过程...
oracle数据库上的访问控制在哪里
a)允许每个用户在一天的特定时限内访问系统。例如,允许用户1在上午8点到下午4点之间访问系统,而允许用户2在下午3点到晚上11点之间访问系统。
b)对于每个用户,帐户将在三个登录失败时被锁定。
c)对于每个用户,空闲 session 将在10分钟后终止。
d)高特权用户一次最多可以有两个并发 session ,而其他用户只能一次有一个并发 session 。
我设法使用个人资料回答b,c,d问题。然后,我将用户更改为个人资料。存储过程一直给我编译错误。提前致谢
这是我的工作
create role roleUser;
grant create session to roleUser;
grant select on staff_data to roleUser;
create user user1 identified by abc123;
create user user2 identified by abc123;
--common user privilege
create profile userProfile limit
FAILED_LOGIN_ATTEMPTS 3
IDLE_TIME 10
SESSIONS_PER_USER 1
--high user privilege
create profile userHighProfile limit
FAILED_LOGIN_ATTEMPTS 3
IDLE_TIME 10
SESSIONS_PER_USER 2
alter user user1 profile userProfile;
alter user user2 profile userHighProfile;
grant roleUser to user1,user2;
show error;
create or replace trigger limit_logon
after logon on database
begin
if to_char(sysdate,'HH24') between 8 and 16 then
set roleUser to user1;
elsif to_char(sysdate,'HH24') between 15 and 23 then
set roleUser to user2;
else
revoke roleUser from user1;
revoke roleUser from user2;
end if;
end;
最佳答案
我可以想象您有一个包含允许用户登录的时间范围的表,并且当用户登录登录触发器时,将对照该用户的时间范围检查当前时间。创建一个过程或函数来封装逻辑,如果当时不允许用户登录,则让它引发错误。
当然,这不会在窗口末尾注销用户。
我觉得您在这里还需要执行DBMS_Scheduler作业,该作业会定期运行以检查当时是否允许所有 session 的用户登录,这样,如果用户的 session 保持在过去的状态就可以杀死他们的 session 。
关于oracle - PL/SQL oracle管理访问控制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20803271/