我正在尝试根据此语句来解​​决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/

10-11 22:26
查看更多