2011-09-21 8 views

答えて

40

Oracleデータベースのユーザーには、付与された権限しかありません。したがって、他の特権を許可しないだけで読み取り専用ユーザーを作成することができます。ユーザー

CREATE USER ro_user 
IDENTIFIED BY ro_user 
DEFAULT TABLESPACE users 
TEMPORARY TABLESPACE temp; 

を作成すると

ユーザーでもデータベースにログインする権限がありません。あなたはそれを与えることができます

GRANT CREATE SESSION to ro_user 

あなたが望むどんな読まれた特権も与えることについて行くことができます。あなたはRO_USERSCHEMA_NAME.TABLE_NAMEを照会することができるようにしたい場合たとえば、あなたは一般的に

GRANT SELECT ON schema_name.table_name TO ro_user 

ような何かをするだろう、あなたはしかし、役割を作成し、あなたがそのような役割にオブジェクト権限を付与する方がいいでしょうその役割を別のユーザーに付与することができます。

ような何かは特定のスキーマで

BEGIN 
    FOR x IN (SELECT * FROM dba_tables WHERE owner='SCHEMA_NAME') 
    LOOP 
    EXECUTE IMMEDIATE 'GRANT SELECT ON schema_name.' || x.table_name || 
            ' TO ro_role'; 
    END LOOP; 
END; 

をすべてのテーブル上の役割SELECTアクセス権を付与し

CREATE ROLE ro_role; 

役割を作成し、ユーザー

GRANT ro_role TO ro_user; 
8
create user ro_role identified by ro_role; 
grant create session, select any table, select any dictionary to ro_role; 
に役割を付与します
-1

n各ユーザが自動的に公開されて実行されるため、デフォルトのdbでは厳密に可能です。

1

ユーザーシステムなどで次の手順を実行します。

p_ownerをスキーマ所有者に、p_readonlyを読み取り専用ユーザーの名前に設定します。

create or replace 
procedure createReadOnlyUser(p_owner in varchar2, p_readonly in varchar2) 
AUTHID CURRENT_USER is 
BEGIN 
    execute immediate 'create user '||p_readonly||' identified by '||p_readonly; 
    execute immediate 'grant create session to '||p_readonly; 
    execute immediate 'grant select any dictionary to '||p_readonly; 
    execute immediate 'grant create synonym to '||p_readonly; 

    FOR R IN (SELECT owner, object_name from all_objects where object_type in('TABLE', 'VIEW') and owner=p_owner) LOOP 
     execute immediate 'grant select on '||p_owner||'.'||R.object_name||' to '||p_readonly; 
    END LOOP; 
    FOR R IN (SELECT owner, object_name from all_objects where object_type in('FUNCTION', 'PROCEDURE') and owner=p_owner) LOOP 
     execute immediate 'grant execute on '||p_owner||'.'||R.object_name||' to '||p_readonly; 
    END LOOP; 
    FOR R IN (SELECT owner, object_name FROM all_objects WHERE object_type in('TABLE', 'VIEW') and owner=p_owner) LOOP 
     EXECUTE IMMEDIATE 'create synonym '||p_readonly||'.'||R.object_name||' for '||R.owner||'."'||R.object_name||'"'; 
    END LOOP; 
    FOR R IN (SELECT owner, object_name from all_objects where object_type in('FUNCTION', 'PROCEDURE') and owner=p_owner) LOOP 
     execute immediate 'create synonym '||p_readonly||'.'||R.object_name||' for '||R.owner||'."'||R.object_name||'"'; 
    END LOOP; 
END; 
0

あなたはREAD_ONLY READ_ONLYで識別されるユーザーを作成し、ユーザーと付与権限

を作成することができます。 セッションの作成を許可し、read_onlyするテーブルを選択します。

関連する問題