システム開発ブログ

産業システム部

データベース

シノニムとは? 大規模システム開発におけるセキュリティ

シノニムとは、オブジェクト(テーブル・ビュー・プロシージャ・ファンクション・パッケージなど)に対する別名のことです。

シノニムを作成
>CREATE SYNONYM TEST_USER.TEST FOR MASTER.EMP;

そうすると、TEST_USERは下記のようにMASTERのEMP表にアクセスすることが出来ます。
>SELECT * FROM TEST;

シノニムを使用する一番のメリットはセキュリティ面ではないでしょうか。

TEST_USERに対して、SELECT権限のみ付与しておけば、
TEST_USERが勝手にEMP表を変更できなくなります。

次に、別名なのでわかりやすい名称を付けることが出来ます。

>CREATE SYNONYM TEST_USER.社員 FOR MASTER.EMP;
>SELECT * FROM 社員;

上記のようにすることも出来ますが、個人的にはそこまでメリットは感じません・・・。


おそらく、小規模のプロジェクトでシノニムを使用する必要はあまりないと思います。
大規模なプロジェクトで、いろいろな会社、チームに跨って開発する場合は、
誰もが勝手にマスタ表などを使用できる状態というのは問題だと思います。

そういう時にシノニムを使用すれば、セキュリティ上は問題ないです。

さらに、シノニムを実テーブルに対して作成するのではなく、
ビューを作成しておき、ビューに対してシノニムを作成しておけば、
セキュリティ面はさらに向上します。

また、ビューにしておくメリットもあります。
複数のチームに跨る場合、各チームによって、必要な情報が異なってくると思いますので、
必要な情報を全て保持したビューにしておけばいいのです。

例えば、
・Aチームは社員の情報が参照したい。
・Bチームは社員、部門の情報が参照したい。

となっていた場合、
実テーブルに対してシノニムを作成すると、
Bチームには2つのテーブルに対してシノニムを作成する必要が出てきます。

もともと社員、部門の両方の情報を保持したビューにしておけば、
両チームとも同じビューに対してシノニムを作成するだけでよくなります。

開発チームが4つ、5つある場合、要望があるたびに、シノニムを作成していると面倒なので、
「社員情報」というビューを作成しておけば、いくら要望があってもビューを変更するだけで対応できます。


ちなみに、シノニムはオブジェクトが存在する前に作成することも出来ますが、
その後にオブジェクトを作成したとしても、参照は出来ません。

オブジェクトがある状態でシノニムを作成した後に、オブジェクトを削除すると、当たり前ですが、参照は出来ません。
ただ、その後再度同じ名前のオブジェクトを作成すれば、再び使えるようになります。
※この場合、オブジェクトの名前さえ同じであれば、中身がまったく異なっていても問題ないです。

システム周りのお悩みを解決します

まずは無料ダウンロード

この記事に関連する記事の一覧


システム開発ブログ

Twitterでilovex_officialをフォローしてください

カテゴリー

以前の部署別ブログ

ページのトップ