Oracle如何限制非法调用包中过程
Oracle如何限制非法调用包中过程 假如我有一个包P_A,其中封装了重要过程DO_A。 另有一个包P_B需要调用P_A.DO_A实现重要商业逻辑
Oracle如何限制非法调用包中过程
假如我有一个包P_A,其中封装了重要过程DO_A。
另有一个包P_B需要调用P_A.DO_A实现重要商业逻辑。
我想只授权给包P_B调用,,认为其他途径调用P_A.DO_A都是非法的!
下面根据PL/SQL开发大师[福伊尔斯坦]提供的方法实现如下:
CREATE OR REPLACE PACKAGE p_a IS
PROCEDURE do_a;
END p_a;
/
CREATE OR REPLACE PACKAGE BODY p_a IS
PROCEDURE do_a IS
BEGIN
dbms_output.put_line(‘DO_A FROM P_A’);
END do_a;
END p_a;
/
CREATE OR REPLACE PACKAGE P_B
IS
PROCEDURE DO_B;
END P_B;
/
CREATE OR REPLACE PACKAGE BODY P_B
IS
PROCEDURE DO_B
IS
BEGIN
P_A.DO_A;
END DO_B;
END P_B;
/
BEGIN
P_A.DO_A; –被认为是非法调用
P_B.DO_B; –唯一合法调用
END;
/
–如何限制只有P_B可调用P_A.DO_A?
–12c以前,我们使用DBMS_UTILITY .FORMAT_CALL_STACK
–编写自定义函数:
CREATE OR REPLACE FUNCTION i_was_called_by (program_in IN VARCHAR2)
RETURN BOOLEAN
IS
c_stack CONSTANT VARCHAR2 (32767)
:= DBMS_UTILITY.format_call_stack;
BEGIN
RETURN INSTR (SUBSTR (c_stack,
INSTR (c_stack,
CHR (10),1,5)+ 1,
INSTR (c_stack, CHR (10),1,6)
- INSTR (c_stack,CHR (10),1,5)
+ 1),
program_in) > 0;
END;
—– PL/SQL Call Stack —–
object line object
handle number name
000007FF50456200 4 function SCOTT.I_WAS_CALLED_BY
000007FF504ADD28 4 package body SCOTT.P_A
000007FF50439820 2 anonymous block
–修改P_A.DO_A过程:
PROCEDURE DO_A
IS
BEGIN
IF i_was_called_by (‘P_B’)
THEN
dbms_output.put_line(‘DO_A FROM P_A’);
ELSE
RAISE_APPLICATION_ERROR(-20209, ‘非法调用!’);
END IF;
END;
/
–再次调用发现
BEGIN
*
第 1 行出现错误:
ORA-20209: 非法调用!
ORA-06512: 在 “SCOTT.P_A”, line 7
ORA-06512: 在 line 2
–12c以后,我们使用包的ACCESSIBLE BY条件
–修改包P_A说明部分
CREATE OR REPLACE PACKAGE p_a
ACCESSIBLE BY(P_B)
IS
PROCEDURE do_a;
END p_a;
/
本文永久更新链接地址:

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Oracle データベース ログの保存期間は、次のようなログのタイプと構成によって異なります。 REDO ログ: 「LOG_ARCHIVE_DEST」パラメータで構成された最大サイズによって決定されます。アーカイブ REDO ログ: 「DB_RECOVERY_FILE_DEST_SIZE」パラメータで構成された最大サイズによって決まります。オンライン REDO ログ: アーカイブされず、データベースの再起動時に失われます。保持期間はインスタンスの実行時間と一致します。監査ログ: 「AUDIT_TRAIL」パラメータによって構成され、デフォルトで 30 日間保持されます。

Oracle が必要とするメモリーの量は、データベースのサイズ、アクティビティー・レベル、および必要なパフォーマンス・レベル (データ・バッファー、索引バッファーの保管、SQL ステートメントの実行、およびデータ・ディクショナリー・キャッシュの管理) によって異なります。正確な量は、データベースのサイズ、アクティビティ レベル、および必要なパフォーマンス レベルによって影響されます。ベスト プラクティスには、適切な SGA サイズの設定、SGA コンポーネントのサイズ設定、AMM の使用、メモリ使用量の監視などが含まれます。

Oracle データベース サーバーのハードウェア構成要件: プロセッサ: マルチコア、少なくとも 2.5 GHz のメイン周波数 大規模なデータベースの場合は、32 コア以上が推奨されます。メモリ: 小規模データベースの場合は少なくとも 8 GB、中規模のデータベースの場合は 16 ~ 64 GB、大規模なデータベースまたは重いワークロードの場合は最大 512 GB 以上。ストレージ: SSD または NVMe ディスク、冗長性とパフォーマンスのための RAID アレイ。ネットワーク: 高速ネットワーク (10GbE 以上)、専用ネットワーク カード、低遅延ネットワーク。その他: 安定した電源、冗長コンポーネント、互換性のあるオペレーティング システムとソフトウェア、放熱と冷却システム。

Oracle で 1 日に 1 回実行されるスケジュールされたタスクを作成するには、次の 3 つの手順を実行する必要があります。 ジョブを作成します。ジョブにサブジョブを追加し、そのスケジュール式を「INTERVAL 1 DAY」に設定します。ジョブを有効にします。

Oracle データベースに必要なメモリの量は、データベースのサイズ、ワークロードの種類、同時ユーザーの数によって異なります。一般的な推奨事項: 小規模データベース: 16 ~ 32 GB、中規模データベース: 32 ~ 64 GB、大規模データベース: 64 GB 以上。考慮すべきその他の要素には、データベースのバージョン、メモリ最適化オプション、仮想化、ベスト プラクティス (メモリ使用量の監視、割り当ての調整) などがあります。

Oracle Databaseのメモリー要件は、データベースのサイズ、アクティブ・ユーザーの数、同時問合せ、有効な機能、およびシステム・ハードウェア構成の要素によって異なります。メモリ要件を決定する手順には、データベース サイズの決定、アクティブ ユーザー数の推定、同時クエリの理解、有効な機能の検討、システム ハードウェア構成の調査が含まれます。

Oracle リスナーは、クライアント接続リクエストを管理するために使用されます。起動手順は次のとおりです。 Oracle インスタンスにログインします。リスナー構成を見つけます。 lsnrctl start コマンドを使用してリスナーを開始します。 lsnrctl status コマンドを使用して起動を確認します。

MySQLi を使用して PHP でデータベース接続を確立する方法: MySQLi 拡張機能を含める (require_once) 接続関数を作成する (functionconnect_to_db) 接続関数を呼び出す ($conn=connect_to_db()) クエリを実行する ($result=$conn->query()) 閉じる接続 ( $conn->close())
