これは、所有者とスキーマの違いを定義しません。
しかし、私は N 個のユーザーを作成するという考えに常に苦労してきました..これらの各ユーザーに単一のスキーマを「消費」(別名、使用) させたい場合。
この男はこれを行う方法を示しています (N 人のユーザーがいる...単一のスキーマに「リダイレクト」されます。
彼のコードも貼り付けます。将来、URL リンクが無効になる可能性があるためです。
http://www.oracle-base.com/articles/misc/schema-owners-and-application-users.php
彼には 2 番目の「同義語」アプローチがあります。ただし、CURRENT_SCHEMA バージョンのみを貼り付けています。繰り返しますが、私はこれを信用しません。誰かが「あなたの答えはこのリンクにあります」と言ってブーム、リンクが死んでいるのが嫌いです。:<
................................................................... ....
( http://www.oracle-base.com/articles/misc/schema-owners-and-application-users.phpから)
CURRENT_SCHEMA アプローチ
このメソッドは、CURRENT_SCHEMA セッション属性を使用して、アプリケーション ユーザーを正しいスキーマに自動的にポイントします。
まず、スキーマ所有者とアプリケーション ユーザーを作成します。
CONN sys/password AS SYSDBA
-- Remove existing users and roles with the same names.
DROP USER schema_owner CASCADE;
DROP USER app_user CASCADE;
DROP ROLE schema_rw_role;
DROP ROLE schema_ro_role;
-- Schema owner.
CREATE USER schema_owner IDENTIFIED BY password
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON users;
GRANT CONNECT, CREATE TABLE TO schema_owner;
-- Application user.
CREATE USER app_user IDENTIFIED BY password
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
GRANT CONNECT TO app_user;
アプリケーション ユーザーは接続できますが、テーブルスペースのクォータやオブジェクトを作成する権限を持っていないことに注意してください。
次に、読み取り/書き込みアクセスと読み取り専用アクセスを許可するロールをいくつか作成します。
CREATE ROLE schema_rw_role;
CREATE ROLE schema_ro_role;
アプリケーション ユーザーにスキーマ オブジェクトへの読み取り/書き込みアクセス権を付与したいので、関連するロールを付与します。
GRANT schema_rw_role TO app_user;
アプリケーション ユーザーがスキーマ所有者を指すデフォルト スキーマを持っていることを確認する必要があるため、これを行うための AFTER LOGON トリガーを作成します。
CREATE OR REPLACE TRIGGER app_user.after_logon_trg
AFTER LOGON ON app_user.SCHEMA
BEGIN
DBMS_APPLICATION_INFO.set_module(USER, 'Initialized');
EXECUTE IMMEDIATE 'ALTER SESSION SET current_schema=SCHEMA_OWNER';
END;
/
これで、スキーマ オーナーにオブジェクトを作成する準備が整いました。
CONN schema_owner/password
CREATE TABLE test_tab (
id NUMBER,
description VARCHAR2(50),
CONSTRAINT test_tab_pk PRIMARY KEY (id)
);
GRANT SELECT ON test_tab TO schema_ro_role;
GRANT SELECT, INSERT, UPDATE, DELETE ON test_tab TO schema_rw_role;
関連するロールに特権がどのように付与されるかに注目してください。これがないと、オブジェクトはアプリケーション ユーザーに表示されません。これで、機能するスキーマ所有者とアプリケーション ユーザーができました。
SQL> CONN app_user/password
Connected.
SQL> DESC test_tab
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
ID NOT NULL NUMBER
DESCRIPTION VARCHAR2(50)
SQL>
この方法は、アプリケーション ユーザーがメイン スキーマへの単なる代替エントリ ポイントであり、独自のオブジェクトを必要としない場合に理想的です。