人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

RDBMSのスキーマの存在意義って何でしょうか?

データベースオブジェクト(テーブルやビューなど)を管理する名前空間としての役割はデータベースがあれば十分だと思います。
また、OracleやSQL Serverにおける実装はスキーマと所有者が対応しており、SQL文でスキーマ名の修飾付きでデータベースオブジェクトを指定する場合(例:SELECT * FROM スキーマ名(所有者名).テーブル名)、所有者の情報がユーザに漏れることになるため、セキュリティ上問題だと思います。
そして、OracleやSQL Serverより後発であるMySQLはスキーマをサポートしてません。
そのため、スキーマは存在しないほうがよいんじゃないか、と思うのですが、いかがでしょうか?

●質問者: witt
●カテゴリ:コンピュータ
✍キーワード:MySQL Oracle RDBMS SELECT SQL
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● germansuplex
●19ポイント

スキーマの意義は、ユーザーやグループごとに権限を与えることにより、セキュリティーを高めたり、管理をしやすくすることができることです。

セキュリティーに関していうならば、DB管理者に比べて一般ユーザーのアクセス権限を低く設定すれば、セキュリティーはより高くできますよね。

一般的にスキーマは、ユーザー個人によりもユーザーロールに対して割り当てた方がより効果的で、ユーザーIDの漏洩も防ぐことができます。

http://www.microsoft.com/japan/sql/facts/compare/01.mspx

◎質問者からの返答

おっしゃる意義は、SQL Server 2005でユーザーとスキーマが分離が実現して初めて活きてくるものだと思います。

ということは、SQL Server 2005以外ではスキーマはあまり意味がないと考えてもよいでしょうか?


2 ● b-wind
●19ポイント

PostgreSQL では、7.3 以降スキーマが新たにサポートされました。

・1 つのデータベースを多数のユーザが互いに干渉することなく使用できるようにするため。

・管理しやすくなるよう、データベースオブジェクトを論理グループに編成するため。

・サードパーティーのアプリケーションを別々のスキーマに入れることにより、他のオブジェクトの名前と競合しないようにするため。

確かに Oracle 等ではスキーマと所有者が対応していますが、あくまで実装レベルの話であり RDBMS 全体に拡大解釈すべきではないと思いますがどうでしょうか?

◎質問者からの返答

では、OracleやSQL Server2000の実装では意味がないと解釈してよいでしょうか?


3 ● germansuplex
●18ポイント

スキーマはデータベースオブジェクトレベル以上に細かく権限を設定できるメリットを持っています。

DBMSによってはスキーマのサポートレベルに差があるにせよ、そのメリットがある以上、スキーマは意味もっています。

どの程度スキーマの機能を使うのかは、DBMSを何に使うのかによって変ってくるため、すべてのシステムに絶対必要とはいえませんが、あると便利な機能であることに間違いはないです。

開発者たちが望んでいる機能だからこそ、サポートされるわけですしね。

◎質問者からの返答

ご回答をもらってもピンと来ないところがあるのですが、なぜかと考えたとき、

「スキーマの機能を使う」という表現に違和感を感じている自分に気づきました。

そこで、不勉強ですいませんが、スキーマの定義について確認させてもらえないでしょうか?

私が理解しているスキーマとは、テーブルやビュー等のなどのデータベースオブジェクトを

格納する単なる入れ物です。

権限の設定はGRANT文を使うと思うのですが、この機能とスキーマとは別の話だと認識してます。

(2007/02/11 10:20追記)

興味深い文章を見つけました。

『アーキテクチャ徹底解説Microsoft SQL Server 2000』

http://www.amazon.co.jp/%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%...

の229ページ

>ANSI SQL-92標準には、「スキーマ」(正確にいうならばSQLスキーマ)の概念が

>含まれている。この概念は多くの点でSQL Serverのデータベース概念に類似している。

>ANSI規格によると、SQLスキーマはディスクリプタの集まりであり、ドキュメントでは

>ディスクリプタを「SQLオブジェクトのコード化された記述」と説明している。

>基本的には、スキーマはテーブル、ビュー、および制約などのSQLオブジェクトの

>集まりである。ANSI SQLスキーマはSQL Serverデータベースに似ている。

ということで、(ANSI SQLスキーマ = SQL Serverデータベース)であるならば、

ここ(http://www.microsoft.com/japan/sql/facts/compare/01.mspx)で

語られているSQL Serverスキーマは一体のために必要なのだろうと思います。


4 ● kurukuru-neko
●18ポイント

>所有者の情報がユーザに漏れることになるため

スキーマを個人と関連づける実装や、利用方法を

するとそうなるかも知れません。

スキーマは使う目的は、ある目的を果たす為のアクセス

権限・ポリシーを明確にする目的には便利な機能です。

ただスキーマだけで権限が決定されるわけではなく

例えばOracleのVPDを使えばさらに細かい個別ユーザ単位

の制限なども出来ます。

RDBMSとしてもSQL標準準拠するためスキーマ機能がを

無視するわけにもいかない。

http://www.atmarkit.co.jp/fnetwork/tokusyuu/01sql99/sql99_1a.htm...

◎質問者からの返答

上記の返信のとおり、できましたら、スキーマの定義を教えてもらえないでしょうか?


5 ● germansuplex
●18ポイント

>私が理解しているスキーマとは、テーブルやビュー等のなどのデータベースオブジェクトを格納する単なる入れ物です。

ANSI標準を定義といって差し支えないと思いますが、それからみて上記の捉え方で間違いないと思います。

>権限の設定はGRANT文を使うと思うのですが、この機能とスキーマとは別の話だと認識してます。

別の機能ですが、かなり関連の強いのも事実です。

権限の設定:GRANT

オブジェクトのグループ化:SCHEMA

スキーマを用いることにより、オブジェクトをグループ化でき、グループごとにアクセス権限を設定することができるのです。

kurukuru-nekoさんもおっしゃられてるように、スキーマを使う目的は、“ある目的を果たす為のアクセス権限・ポリシーを明確にする"ことです。

各ベンダーのサポートレベルや実装方法にちがいがありますが、スキーマはその役割を果たしている思うのですが。

無くてもなんとかなる機能かもしれませんが、あったほうが便利だと思いませんか?

◎質問者からの返答

>スキーマを用いることにより、オブジェクトをグループ化でき、

>グループごとにアクセス権限を設定することができるのです。

ANSI標準の話で言えば、確かにそのとおり、あると便利です。

ANSI標準では、スキーマより上位のグループ化を行うカタログでそのようなことを行う構文がないみたいなので、スキーマを使用するほかないでしょう。

ここで新たな疑問が。SQL Serverの実装での話をすると、上記引用の利点はスキーマのみならずデータベースも持っていると思います。

では、どちらを使うかについて、何かしらの基準というものはあるのでしょうか?


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ