Pour bloquer un utilisateur particulier et une combinaison IP sur une base de données Oracle, j'ai créé le déclencheur suivant et compilé sans erreurs.
Create or replace trigger you_may_not_login
after logon on database
begin
if sys_context('USERENV','SESSION_USER')='xx' AND sys_context('USERENV','IP_ADDRESS')='10.0.30.219' then
raise_application_error(-20001,'Denied! You are not allowed to logon the database');
end if;
end;
/
Lorsque je me connecte à l'aide de l'utilisateur "XX", le journal d'alerte affiche l'erreur suivante mais access IS accordé à la base de données, la gâchette échoue en quelque sorte du blocage de la connexion de l'utilisateur.
Errors in file /oraarch/core/udump/wfsbi_ora_9338.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-20001: Sorry, you are not allowed here!
ORA-06512: at line 9
Où vais-je mal? /
Vous voudrez peut-être vérifier cela dans SQLPlus. Si cela ne vous déconnecte toujours pas, vérifiez vos hypothèses en exécutant ce qui suit après la finition de la gâchette:
SELECT 'Check This' FROM dual WHERE sys_context('USERENV','SESSION_USER') = 'xx';
SELECT 'Check This' FROM dual WHERE sys_context('USERENV','IP_ADDRESS') <> '10.0.30.219';
SELECT 'Check This' FROM user_role_privs WHERE granted_role='DBA';
SELECT 'Check This' FROM user_objects WHERE Object_Name='YOU_MAY_NOT_LOGIN' AND Object_Type='TRIGGER';
SELECT 'Check This' FROM User_sys_Privs WHERE Privilege='ADMINISTER DATABASE TRIGGER';
Si l'un de ces retours Check This
Ensuite, une de vos hypothèses est incorrecte.
Pour moi, tout ce qui était nécessaire pour être déconnecté était le RAISE_APPLICATION_ERROR
, mais n autre site utilise un EXECUTE IMMEDIATE 'DISCONNECT';
ainsi que. Peut-être que cela lui permet de travailler même lorsque le rôle DBA a été accordé. Je n'ai pas testé le savoir pour savoir.
Vous devez également savoir que cela ne devrait pas être utilisé pour la sécurité à la place des mots de passe sécurisés et d'autres mesures en tant que IP_Address que le client envoie peut être modifié.
De cette réponse à une question similaire sur Serverfault:
La gâchette ne refusera pas l'accès si