初心者です。失礼のないように努力いたしますのでご協力お願いいたします。
ログオントリガーを使用して接続者の制限をしたいのですが正常に動作しません。
CREATE OR REPLACE TRIGGER LOGON_TRG AFTER LOGON ON DATABASE
DECLARE
STR_SCHEMANAMEVARCHAR2(20);
STR_OSUSERVARCHAR2(20);
STR_PROGRAMVARCHAR2(20);
BEGIN
SELECT USERNAME,OSUSER,PROGRAM INTO STR_SCHEMANAME,STR_OSUSER,STR_PROGRAM FROM V$SESSION WHERE audsid = USERENV('SESSIONID');
IF STR_SCHEMANAME = 'SCH1' AND STR_OSUSER = 'USER1' THEN
INSERTINTOALOG (SCHEMANAME,OSUSER,LOGIN_DAT,PROGRAM)VALUES(STR_SCHEMANAME,STR_OSUSER,TO_DATE(TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS'),'YYYY/MM/DD HH24:MI:SS'),STR_PROGRAM);
COMMIT;
RAISE_APPLICATION_ERROR(-20000, 'Can not login');
END IF;
END LOGON_TRG;
<説明>
スキーマ='SCH1'にOSユーザー=’USER1’が接続してきたらALOGに情報を記録して接続しない。
このトリガーはSYSで登録しています。
<結果>
スキーマ='SCH1'にOSユーザー=’USER1’で接続するとALOGに記録はするのですが、
エラーメッセージが表示されず正常に接続できてしまいます。
<質問>
○RAISE_APPLICATION_ERRORがなぜ正常に動作しないのかがわかりません。
○RAISE_APPLICATION_ERRORに権限的なものが必要なのでしょうか?
(いろいろと調べてみましたが特に権限での制限は見当たりませんでした)
何か要因に思い当たる方がいらっしゃいましたらご協力いただければと思います。
よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
このリンク先の解説ですが、エラーを発生させて処理を中断させることが目的で、故にログオンも中断されるという理屈だけですねー。
これまずいし、ログオンとトリガーは別プロセスなので確実にログオンがキャンセルされるとは思いにくいのですが?すべてのバージョンで稼働確認しての説明なんでしょうか?
いま環境がないので試せませんが、エラー処理には例外処理をつけるのがマナーなので、例外処理の中で例外を実行させてきちんと処理を終わらせるのが正しいはずです。リンク先のは中断を目的にしてますからね。
http://www.shift-the-oracle.com/plsql/exception/ …
ここで例外を学んで、例外処理として、ログの作成、ログインの切断を入れてみてください。
まあ試しに例外を起こす前に切断させても実験にはなりますが?
No.1
- 回答日時:
記録はしているがセッションを切る処理が見つからないですが??
ログイン後のトリガーですからログインはされた後と言う意味です。ですから一度つながったセッションを切ってやる方法しかないと思いますよ。
execute immediate 'dbms_service.disconnect_session(''USER1'')';
この回答への補足
早速のご回答ありがとうございます。
↓このように記載されているため
http://www.istudy.ne.jp/training/serial/plsql/07 …
RAISE_APPLICATION_ERROR はユーザーにエラーを通知し処理終了(セッションは切れる)と
思っていたのですが、セッションを切るアクションが必要でしょうか?
ちなみに、RAISE_APPLICATION_ERROR の後に処理を加えても以降の処理はされません。
教えていただいた セッションを切るアクションはRAISE_APPLICATION_ERRORの前にしなくて
はいけないということでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
会社PCのメールが更新されない
-
Win11でブラウザでのネットブラ...
-
特定のサーバーにだけFTP接...
-
teratermでLinuxに接続できません
-
スーパーセキュリティZEROで下...
-
先日からDigiBestTVで「デバイ...
-
iモードHTMLシミュレータIIに接...
-
サーバーからファイルをダウン...
-
ORCADでのページ追加のやり方
-
繋がらなくなってしまったサイ...
-
Microsoftアカウントのサインイ...
-
2台のPC間でpingが通らない。ご...
-
デスクネッツに社外PCからアク...
-
Windows10から11に更新しました...
-
Cyberduckでエラーが出てしまう
-
chromeリモートデスクトップで...
-
「ただし,その件は」の「ただ...
-
単三の漏電ブレーカーを単二で...
-
bebirdというイヤースコープを...
-
ワードに張り付けたURLが開かない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
会社PCのメールが更新されない
-
先日からDigiBestTVで「デバイ...
-
スーパーセキュリティZEROで下...
-
ORCADでのページ追加のやり方
-
teratermでLinuxに接続できません
-
Win11でブラウザでのネットブラ...
-
Windows10から11に更新しました...
-
マイナポータル
-
Cyberduckでエラーが出てしまう
-
特定のサーバーにだけFTP接...
-
マイメニューってなんですか?
-
デスクネッツに社外PCからアク...
-
CrystalDiskInfoで表示されない...
-
ORACLE ログオントリガーで接続...
-
Microsoftアカウントのサインイ...
-
インターネットエクスプローラ...
-
ハイパーリンクのクリックから...
-
Power2Go ディスクの...
-
FFFTPにて「受信はタイムアウト...
-
ieが壊れていると、OSのリカバ...
おすすめ情報