MySQL

Last-modified: 2011-12-14 (水) 22:16:38

MySQL 5.1 リファンレスマニュアル

ユーザーと権限

権限システムの機能

ユーザーを識別して、

  • DBへの接続を制限する
  • コマンドの実行を制限する

ユーザーが何かの所有者になるという概念はなさそう。
CREATE VIEWのDEFINERという指定が、所有者を連想させるが、VIEWを誰の権限で実行するかという指定であり、所有者とは異なるらしい。CREATE VIEWの説明を参照。

ユーザーはユーザー名とアクセス元のペアで区別される。

権限の指定は階層化されている。複雑。権限システムの機能

  • ユーザーが決まれば権限が決まる (全DB, テーブル共通)
  • データベースとユーザーに応じて権限が決まる。アクセス元ホストに応じて権限を制限する。
  • テーブルとユーザーに応じて権限が決まる。
  • カラムとユーザーに応じて権限が決まる。

ユーザーの追加、削除、パスワード設定

以下どちらの方法も可能。

  • mysqlデータベースにアクセスして、ユーザーを管理している表を更新
  • 専用のSQLコマンド
  • unixコマンド

MySQL ユーザ アカウント管理

mysqlデータベースにアクセスする場合

mysql -u root -p mysql (rootにパスワードがある場合)
mysql -u root mysql (rootにパスワードがない場合)

ユーザーの一覧表示

select * from user\G

専用のSQLコマンド

アカウント管理ステートメント

unixコマンド

パスワード変更

mysqladmin -u user_name -h host_name password "newpwd"

データの引っ越し

データを別のサーバーに移転させる

  • 移転元: mysqldumpでデータ採取
    ただし、稼働中のmysqldumpは、整合性が保てない。
     mysqldump -u user -p --all-databases > alldump.sql
  • 移転先: リストア
     mysql -u user -p < alldump.sql

この転送だと

  • 既存のユーザーは削除され、移行元のユーザーに置き変わる
  • 移行元にないデータベースはそのまま残る
  • 移行元にないテーブルはそのまま残るのか??(要確認)

移転後にサーバ構成がかわり、アクセス元(クライアント)のホスト名やIPアドレスが変わる場合、
移転元のユーザー定義は利用できない。ユーザーはアクセス元ホスト名で区別されるため。
元のユーザーの削除、新しいユーザーの作成、新しいユーザーの権限設定、が必要。
これを単純に実行する手段は用意されていないのではないか。

これに対処する方法の案

  • alldump.sqlを編集して、`ユーザー名`@`ホスト` を一括置換する

常に全権限付与でよいのであれば、

  • root@localhostとroot@127.0.0.1以外のアカウントを削除(DROP USER文)し、
  • その2つに全権限を付与する

コメント構文

mysqldumpでダンプしたファイルに含まれる /* ... */の構文

 /*!バージョン番号 SQL */

指定されたバージョン以上ならSQL を実行する。

初期化

unixのインストール後のプロシージャ

  • まっさらにして初期化したいなら mysqlのディレクトリ /var/lib/mysql/data ? を削除
  • mysql_install_db を実行
  • mysql_secure_installation を実行

    このコマンドは、サンプル用のデータベースとユーザーを削除し、root@localhostとroot@127.0.0.1にパスワードを設定する。