ユーザーと権限
ユーザーを識別して、
- DBへの接続を制限する
- コマンドの実行を制限する
ユーザーが何かの所有者になるという概念はなさそう。
CREATE VIEWのDEFINERという指定が、所有者を連想させるが、VIEWを誰の権限で実行するかという指定であり、所有者とは異なるらしい。CREATE VIEWの説明を参照。
ユーザーはユーザー名とアクセス元のペアで区別される。
権限の指定は階層化されている。複雑。権限システムの機能
- ユーザーが決まれば権限が決まる (全DB, テーブル共通)
- データベースとユーザーに応じて権限が決まる。アクセス元ホストに応じて権限を制限する。
- テーブルとユーザーに応じて権限が決まる。
- カラムとユーザーに応じて権限が決まる。
ユーザーの追加、削除、パスワード設定
以下どちらの方法も可能。
- mysqlデータベースにアクセスして、ユーザーを管理している表を更新
- 専用のSQLコマンド
- unixコマンド
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 を実行する。
初期化
- まっさらにして初期化したいなら mysqlのディレクトリ /var/lib/mysql/data ? を削除
- mysql_install_db を実行
- mysql_secure_installation を実行
このコマンドは、サンプル用のデータベースとユーザーを削除し、root@localhostとroot@127.0.0.1にパスワードを設定する。