MySQL information_schemaデータベースに関してメモ

を目標に記事にしてみます。

RDBMSをインストールすると、おおよそ最初から作成されているデータベースがいくつかありますよね。

information_schemaもそのひとつで、MySQLやSQLServerにおいて、データベースに関する情報が、そこに格納されているようです。SQLインジェクションなどの攻撃でよく標的にされるデータベースですよね。機会があったので、少し調べてメモしておきます。(参照すると便利そうなやつだけ)

参考URL

まぁ記事書かなくても、直接データベースやテーブルの中身見れば一目瞭然なんですが、せっかく調べたのでブログに。

MySQL INFORMATION_SCHEMAデータベース

1.SCHEMATAテーブル

データベースの情報が格納。データベース名、文字コードが格納されている

2.TABLESテーブル

テーブルの一覧が格納されている。TABLE_SCHEMAにデータベース名が入ってるのでwhereで対応するデータベースのテーブル一覧のみを抽出したりできますね。

テーブル名、文字コード、作成日、更新日、テーブルに対するコメントなどなど

3.COLUMNテーブル

カラムの一覧が格納されている、TABLE_SCHEMAにデータベース名、TABLE_NAMEにテーブル名があるので、TABLEテーブルと同じように抽出してやることができます。

カラム名、デフォルト値、NULL許容、データ型などなど。

4.VIEWSテーブル

ビュー一覧が格納されている。TABLE_SCHEMAで抽出すれば、対象データベースのビュー一覧を取得できる。VIEW_DEFINITIONでは、そのビューがどのようなSQL文で構成されているかを見れる。ビューの名前はこのテーブルにTABLE_NAMEとして格納されています。

5.USERS_PRIVILEGESテーブル

ユーザの権限一覧が取得できる。mysqlデータベースのuserテーブルとは違います。

GRANTEEには”ユーザ名@ホスト名”が、PRIVILEGE_TYPEに権限タイプが格納されています。

ユーザ一覧が取得したければ、GRANTEEでGROUP BYとかすれば良いでしょう。

6.GROBAL_STATUS, GROBAL_VARIABLESテーブル

データベース内共通の変数とステータス変数を定義。

 

まだまだテーブルありますが、覚えておくと便利そうかも、と思ったものを抜粋しました。

手元にSQLServer環境が今ないので、SQLServerに関してはリンクだけ貼っておきます

SQLServer情報スキーマビュー

SQLite ならsqlite_masterというテーブルが自動生成されて、そこにテーブルがCREATE TABLEされた際のSQL文が格納されているようです。

SQLite sqlite_masterテーブル

短いけど、まとめ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です