• ベストアンサー

スキーマ

いつも参考にさせて頂いています。 初歩的な質問なのですが、宜しくお願いします。 スキーマという概念がわかりません。 ネットや本で調べてみても、概念的なことしか書いていないものが多いみたいです。 ユーザと同じ?と思ったりもしたのですが何かが違う思い質問させて頂きました。噛み砕いて教えて頂けるとうれしいです。 あとスキーマというのはどういう時に使用(作成)するのでしょうか? スキーマについてご教授宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

> というのは、複数のユーザを作成する場合っていうのと同じ意味ですよね? はい、合ってます。 >ossan_hiroさんが説明してくれている"hogeスキーマ"に対するユーザを複数作れるって訳ではないと思っていますが認識あっていますでしょうか? >(というかテーブルごとにユーザは作れないですよね…) (1) スキーマ用としてhogeユーザを作成します。 (2) このhogeユーザにテーブル(hoge_tbl)を作成します。 (3) hogeスキーマにアクセスするossan_hiroユーザ(ただのユーザ)を作成します。 (4) hogeユーザからossan_hiroに対し「hoge_tblのselectを許可する」という権限を与えます。 (5) これで、ossan_hiroユーザでログインしてhoge_tblを SELECT * FROM hoge.hoge_tbl でアクセス可能にします。 この状態はossan_hiroとしてはhoge_tblにはSELECTはできるけど UPDATE,DELETE,INSERTはできない状況になります。 いちいちhoge.オブジェクト名でアクセスするのが嫌な場合はシノニムを作成してしまえば SELECT * FROM hoge_tbl でもアクセス可能になります。 >>スキーマ用のユーザはロックしてログインできないように変更 >というのはどういう意味でしょうか? ここでいうhogeユーザは所有オブジェクトに対して何でも可能です。 (DML文などが実行可能) ユーザを削除してしまうと、所有オブジェクトも削除されてしまいます。hogeユーザに接続できないようにしたい場合、アカウントロック& パスワード無効にすることでhogeユーザでは対象スキーマにアクセスできなくすることができます。 #必要に応じてで良いと思います。 イメージつかめましたか?説明下手ですみません。

pgBeginImo
質問者

お礼

ありがとうございました。 理解できました。

その他の回答 (3)

回答No.3

スキーマは「ユーザの作成したオブジェクト(テーブルなど)」の集合を指します。 hogeというユーザを作成すると、デフォルトで同じ名前のスキーマ(hogeスキーマ)が作成されます。スキーマのみの作成およびユーザのみを作成というのはできません。(この辺がスキーマ≒ユーザのいわれ?) その状態からhoge_tblというテーブルを作成すると、hogeスキーマの中にhoge_tblというテーブルが存在する状態になります。 複数のスキーマにする場合は、接続ユーザそれぞれにオブジェクト(表など)を使用する権限を変えたい場合に行います。 (あるいはマシンリソース的な問題で複数のサーバやインスタンスが起動できない等(^^;。) スキーマ用のユーザはロックしてログインできないように変更し、他の接続用ユーザに対して必要なオブジェクト権限(hoge_tblをUPDATEする等)を付与することで、このAユーザにはhoge_tblはUPDATEできないけどこのBユーザはhoge_tblをUPDATEできる、のような環境を作成できます。

pgBeginImo
質問者

お礼

わかりやすい説明ありがとうございます。 ユーザ作成と同時にそのユーザのスキーマがデフォルトで作成されるっていうのはすごく納得できた気がします。 >複数のスキーマにする場合 というのは、複数のユーザを作成する場合っていうのと同じ意味ですよね? ossan_hiroさんが説明してくれている"hogeスキーマ"に対するユーザを複数作れるって訳ではないと思っていますが認識あっていますでしょうか? (というかテーブルごとにユーザは作れないですよね…) >スキーマ用のユーザはロックしてログインできないように変更 というのはどういう意味でしょうか? すいません、あと少しで判りそうなので宜しくお願いします

noname#86752
noname#86752
回答No.2

概念としては  データベースインスタンス>スキーマ>テーブルなど という感じです。左ほど大きな概念で右のものを含んでいます。 ユーザとスキーマは密接に関わっていますが、同じではありません。 スキーマはテーブルやビューなどを含む一種の名前空間で、ユーザはそのスキーマを使う人です。 と書いては見ましたが、実際は実装によって違います。 例えばPostgreSQLでは上の概念は全て通用しますが、Oracleではスキーマとユーザはほとんど同じもので、MS-Accessではスキーマという概念は存在しません。

pgBeginImo
質問者

お礼

なるほど、データベースによってスキーマの概念が違ったり、スキーマそのもののがないデータベースもあるんですね。 とても参考になりました。ありがとうございます

回答No.1

スキーマとは、簡単に言えば、データベース本体の事を指します。 スキーマには、表や索引、シノニム等が格納され ていうか、そこに作成します。 >どういう時に作成するのか 新しいデータベースを作る時に作ります。  と言ってしまえばそれで終わりですが、データベースの設計からきちんと 考えないと、めちゃくちゃになりますので、どのようなデータベースを 構築するのかをよく考える必要があります。

関連するQ&A