• 追加された行はこの色です。
  • 削除された行はこの色です。
* MySQLユーザ管理 [#v13ac707]

** システムデータベース選択 [#t67b51db]
 use mysql

** ユーザ一覧確認 [#d7dfcf43]
 SELECT host, user, password, grant_priv FROM user
 SELECT User, Host FROM user

** ユーザ権限確認 [#r0b93437]
 show grants for roo@localhost
 SHOW GRANTS FOR 'root'@'localhost';

** ユーザ追加 [#pd218b97]
*** アクセス制御 [#s11d318d]
ローカルホスト(192.168.0.0./24)から、foo_dbデータベースへの接続できるユーザ
*** localhostから接続許可 [#va4151c4]
 CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
 GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'

 grant all privileges on foo_db.* to taro@localhost
 grant all privileges on foo_db.* to taro@'192.168.0.0/255.255.255.0'
*** 全ホストから接続許可(%)・ユーザを作成できるユーザ(WITH GRANT OPTION) [#p9ab0a1d]
 CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
 GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' WITH GRANT OPTION

任意のホストから、すべてのデータベースへの接続できるユーザ
 grant all privileges on *.* to taro@'%'
- https://dev.mysql.com/doc/refman/5.6/ja/adding-users.html
- http://dev.mysql.com/doc/refman/5.7/en/connection-access.html

http://dev.mysql.com/doc/refman/5.7/en/connection-access.html
*** 権限を限定・DBを限定 [#sc06608d]
 GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
   ON bankaccount.* TO 'custom'@'localhost';

*** パスワード指定 [#i45dbb31]
 grant all privileges on *.* to taro@'%' identified by 'PASS';
- http://dev.mysql.com/doc/refman/5.7/en/grant.html

*** ユーザを追加できるユーザ [#z6c066c2]
「WITH GRANT OPTION」を付ける。
http://dev.mysql.com/doc/refman/5.1/ja/adding-users.html
*** パスワードなし [#ha8f8b00]

*** 権限を指定 [#we44c4e8]
 GRANT SELECT ON *.* TO 'taro'@'127.0.0.1' IDENTIFIED BY 'PASS'
 CREATE USER 'monty'@'%';

http://dev.mysql.com/doc/refman/5.7/en/grant.html
- ただし、パスワードポリシーが設定されている場合、エラーになる。
- これを避けるには、直接userテーブルに対してINSERTコマンドでレコードをインサートしてユーザを追加する。
- 別の方法として、.my.cnfファイルにユーザ名・パスワードを記述することで、パスワードなしでログインするようになる。
- https://stackoverflow.com/questions/5805932/how-to-create-a-mysql-user-without-password-needed-for-remote-login-to-be-us

*** ユーザの権限を確認 [#mfcdcdb1]
 SHOW GRANTS FOR 'taro'@'127.0.0.1';

** ユーザ削除 [#eb91fc9b]
 DELETE FROM user WHERE user = 'taro';

** ユーザパスワード更新 [#nd35b1e8]
 SET PASSWORD FOR 'bob'@'%.loc.gov' = PASSWORD('newpass');
UPDATE文を使ってもよい。
 DROP USER 'jeffrey'@'localhost';

*** mysqladminコマンドを使って [#w2fb729f]
シェルで
 mysqladmin -u root password 'new-password'
 mysqladmin -u root -h taro password 'new-password'
- https://dev.mysql.com/doc/refman/5.6/ja/drop-user.html

** パスワード更新 [#nd35b1e8]

 SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('mypass');

- https://dev.mysql.com/doc/refman/5.6/ja/assigning-passwords.html

*** シェルからmysqladminコマンドでパスワード更新 [#x3cd5d15]

 mysqladmin -u user_name -h host_name password "newpwd"

** (validate_password プラグインが有効な場合)パスワードポリシー [#dccfc6e8]

*** 現在のポリシーの確認 [#m7355bda]

 SHOW VARIABLES LIKE 'validate_password%';
 
*** ポリシーの変更 [#c38d0d33]

 SET GLOBAL validate_password_length=4; 最低4文字以上
 SET GLOBAL validate_password_policy=MEDIUM; 最低1つの数値、1つの小文字および大文字、1つの特殊文字 (英数字以外) を含む
 SET GLOBAL validate_password_policy=MEDIUM; パスワードの長さのみテスト

- https://dev.mysql.com/doc/refman/5.6/ja/validate-password-plugin.html

** 補足 [#c61e57bf]
- 以上はアカウントを作成するためのステートメント (CREATE USER や GRANT など) を利用してユーザ管理する方法だが、INSERT、UPDATE、DELETE などのステートメントを使用して、MySQL 付与テーブルを直接操作して、ユーザ管理することもできる。

** 参考 [#ka1b5c9b]
- mysqladminコマンドからユーザ管理を行ってもいいが、mysqlデータベースを直接操作する方が細かく指定できてよい。
- http://dev.mysql.com/doc/refman/5.1/ja/adding-users.html
- https://dev.mysql.com/doc/refman/5.6/ja/adding-users.html
- http://www.dbonline.jp/mysql/user/index6.html



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS