问题描述
我必须在登录后创建一个触发器,该触发器检查身份验证,但基于某些条件。
对于这个我有两个表:
1> 客户端表: 只有一个列用户名
所以我想用户名是abc bcd cde
2> 机器表: 有一个列机器名称
它具有应用程序名称,例如visiual studio power-bi,它指定用于登录数据库的应用程序
我的需要是,每次用户尝试访问此数据库时,它应该检查用户名是否属于客户端表,并且所使用的机器是来自机器表的那个。
-> 如果用户名正确,但计算机不正确,则应该有错误。
-> 如果计算机正确但用户名错误,则应进行正常的数据库检查,因为用户可能会连接到其他数据库。
所以我可以在开始的时候有一个条件检查: 像这样的东西?
创建或替换触发器用户登录轨道
登录数据库后
何时 (用户名 = 从客户端表中选择用户名)
声明
还是有其他方法可以解决此问题?
对于这个我有两个表:
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




