暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 我们可以在trigger的WHEN子句中添加条件作为查询吗?

ASKTOM 2020-04-23
580

问题描述

我必须在登录后创建一个触发器,该触发器检查身份验证,但基于某些条件。

对于这个我有两个表:

1> 客户端表: 只有一个列用户名

所以我想用户名是abc bcd cde

2> 机器表: 有一个列机器名称

它具有应用程序名称,例如visiual studio power-bi,它指定用于登录数据库的应用程序


我的需要是,每次用户尝试访问此数据库时,它应该检查用户名是否属于客户端表,并且所使用的机器是来自机器表的那个。

-> 如果用户名正确,但计算机不正确,则应该有错误。
-> 如果计算机正确但用户名错误,则应进行正常的数据库检查,因为用户可能会连接到其他数据库。

所以我可以在开始的时候有一个条件检查: 像这样的东西?


创建或替换触发器用户登录轨道
登录数据库后
何时 (用户名 = 从客户端表中选择用户名)
声明

还是有其他方法可以解决此问题?

专家解答

不在WHEN子句中-您需要在触发器中对其进行编码,例如

SQL> create or replace
  2  trigger check_all_logins
  3  after logon on database
  4  declare
  5    x int;
  6  begin
  7    select count(*)
  8    into   x
  9    from   clients
 10    where  username = user;
 11
 12    select count(*)
 13    into   x
 14    from   machines
 15    where  machine = sys_context('userenv','TERMINAL');
 16  end;



文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论