kenken0807_DBメモ

つば九郎が好きなDBAです。Oracle Standard Editionでの運用やツールとかとかの備忘録。特に記載がない場合はoracle11gR2です。時々MySQL

Oracle 読み取り専用ユーザー(READ ONLY)の作成

とあるユーザに対して、読み取り専用でユーザーを作成したのでメモ。

  • 書き込み兼読み取りユーザー・・TEST
  • 読み取りユーザー・・TEST_READONLY

TESTユーザーの読み取り専用ユーザーTEST_READONLYを作成する。
すでにTESTユーザーには複数のテーブルが存在している。

1.ユーザー作成

create user TEST_READONLY identified by TEST_READONLY;

2.権限付与(セッションとselect権限)

grant create session to TEST_READONLY;
grant select any table to TEST_READONLY;

3.TESTユーザーがオーナーのテーブルのシノニムを作成

CREATE SYNONYM TEST_READONLY.TEST_TABLE FOR TEST.TEST_TABLE;

↓の様にdba_tablesを使用してcreate synonymを作成したら楽。

select 'CREATE SYNONYM TEST_READONLY.' || TABLE_NAME || ' FOR ' || OWNER || '.' || TABLE_NAME || ';' as SYNOTEX from dba_tables where OWNER = 'TEST';

SYNOTEX
--------------------------------------------------------------------------------
CREATE SYNONYM TEST_READONLY.BB FOR TEST.BB;
CREATE SYNONYM TEST_READONLY.HOGE FOR TEST.HOGE;
CREATE SYNONYM TEST_READONLY.HOGEI FOR TEST.HOGEI;
CREATE SYNONYM TEST_READONLY.III FOR TEST.III;
CREATE SYNONYM TEST_READONLY.SEQTEST FOR TEST.SEQTEST;
CREATE SYNONYM TEST_READONLY.LALA FOR TEST.LALA;
CREATE SYNONYM TEST_READONLY.LA FOR TEST.LA;
CREATE SYNONYM TEST_READONLY.SH FOR TEST.SH;

これでTEST_READONLYユーザからTESTユーザーのテーブルにアクセスする際にオーナー名を指定せずにアクセスすることが可能。

読み取り可
TEST_READONLY>select * from HOGE;

        ID          T
---------- ----------
    100000          5
     10001          5

書き込み不可
TEST_READONLY>insert into HOGE values (1000,1000);
insert into HOGE values (1000,1000)
            *
行1でエラーが発生しました。:
ORA-01031: 権限が不足しています。