web-dev-qa-db-fra.com

Déclencheur de connexion de la base de données

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? /

5
user996853

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é.

3
Leigh Riffel

De cette réponse à une question similaire sur Serverfault:

La gâchette ne refusera pas l'accès si

  • Un membre du groupe DBA ne peut pas être déconnecté d'un déclencheur de connexion.
  • Le propriétaire de la gâchette est l'utilisateur de vous connecter.
  • L'utilisateur a le privilège administrer la gâchette de base de données