こちらでは主に MySQL について書くが、RDS へも相互リンク。 出力いろいろ
名前空間「CREATE SCHEMA は CREATE DATABASE の同義語です」か。違和感があると思ったら、MySQL では権限があれば隣の「データベース(実態はスキーマ)」の読み書きができるのね。 ∥ CREATE DATABASE http://dev.mysql.com/doc/refman/5.1/ja/create-database.html PostgreSQL だと、「より一般的な以下の構文「database.schema.table」を使用することもできますが、現在ではこの構文は形式上標準SQLに準拠するためにのみ存在しています。 記述されるデータベース名は、接続しているデータベースと同じ名前でなければなりません」というわけで、PostgreSQL は、「データベース(ダミー)」.「スキーマ(大抵は "public" だが)」.「オブジェクト」を用いるが、MySQL では、「スキーマ(実際に指定する)」.「オブジェクト」の 2 段階しかない。PostgreSQL では DB クラスタ内の「データベース」単位で切り分けるので隣を読むことはできないのだが、MySQL では「データベース」という切り分けはないので、読み取り権限があれば、隣のスキーマ内のオブジェクトは読めてしまう。 ∥ PostgreSQL 文書 5.7 スキーマ 「データベース」は完全な分離なので、権限いかんに関わらず、お互いに読み書きはできない。「スキーマ」は名前空間の分離でしかないので、権限さえあれば、full qualified ならば読み書きができる。 権限権限について。 実体GRANT ON TO, SHOW GRANTS FOR, REVOKE ON FROM などで管理するが、実体は以下の 5 テーブルに格納されている。 > select host, user from user; # 特定ホスト&特定ユーザ → 不特定 DB への権限と、パスワード > select host, db from mysql.host; # 特定ホスト&不特定ユーザ → DB へのアクセス権限 > select host, user, db from mysql.db; # 特定ホスト&特定ユーザ → DB へのアクセス権限 > select host, user, db, table_name from mysql.tables_priv; # 特定ホスト&特定ユーザ → DB 内のテーブルへのアクセス権限 > select host, db, user, table_name, column_name from mysql.columns_priv; # 特定ホスト&特定ユーザ → DB 内のテーブル内カラムへのアクセス権限 "%" が使えるのだから、1 テーブルにできそうなものだが…、歴史的な経緯でこうなったか? なお、これらを操作するラッパーというかユーティリティが "GRANT", "REVOKE", "SET PASSWORD FOR" であり、これらを利用する限り、"FLUSH PRIVILEGES" は不要。 以下のようなパターンが簡単かつよくあるか: > GRANT ALL PRIVILEGES ON foodb.* TO foouser@'%' IDENTIFIED BY 'foopass'; # あらゆるホスト指定での特定 DB へのアクセスには全権を与える。明示的な "CREATE USER" は無くても良い > REVOKE ALL PRIVILEGES ON *.* FROM foouser@'%'; # グローバルにはアクセスさせない > SHOW GRANTS FOR foouser@'%'; # 確認 > SET PASSWORD FOR foouser@'%' = PASSWORD('barpass'); # パスワードの変更。 > DROP USER foouser@'%'; # 全消し。ここでも FLUSH PRIVILEGES は不要 "USAGE" 権限については下記:
手順root での接続: $ mysql -u root -p > create database foodb; > grant all privileges on *.* to foouser@localhost identified by 'foodb'; > exit データベース一覧: > show databases; データベース移動: > use foodb; ダンプ$ mysqldump -u root -p --lock-all-tables --all-databases > foo.sql そのまま書きもどせば、いったん drop してくれるので、元どおり。 |
データシステム >