2012年11月28日水曜日

$HOME/.my.cnfで無理矢理遊ぶ

意外に知られていない$HOME/.my.cnfを使って遊んでみよう企画。

$HOME/.my.cnfはMySQL関連のプログラムを起動した時に最後に読み込まれるオプションファイルで、
オプションの優先順位が`後勝ち'なので直接渡したオプション以外は
ここに書いておいたものが/etc/my.cnfなんかと重複していても優先される。
かつ、環境変数$HOMEに依存するので、特定のUNIXアカウントに対してのみ悪戯設定出来る。

ではれっつごー。


$ cat .my.cnf
[mysql]
execute = "SHOW PROCESSLIST"

$ mysql
+----+------+-----------+------+---------+------+-------+------------------+
| Id | User | Host      | db   | Command | Time | State | Info             |
+----+------+-----------+------+---------+------+-------+------------------+
|  7 | root | localhost | NULL | Query   |    0 | NULL  | SHOW PROCESSLIST |
+----+------+-----------+------+---------+------+-------+------------------+


おおおお。
--executeオプションも利くんだねこれ。

ところで、--executeってコマンドラインオプションで打ち消せない気がする(少なくとも--skip-executeではダメだった)ので、
これを誰かさんの$HOME/.my.cnfに書いておけば楽しい誰も幸せにならないこと請け合い。。



副産物的に思い付いたんだけれど、
5.6の$HOME/.mylogin.cnf(別に平文で書くのが嫌じゃなければ$HOME/.my.cnfでも良い)と
デフォルトシェルをmysqlクライアントにすると一発でログイン出来る上に。

$ mysql_config_editor print --all
[client]
user = root
password = *****

$ grep myadmin /etc/passwd
myadmin:x:502:503::/home/myadmin:/usr/bin/mysql

$ su - myadmin
Password: 

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.5.25-log MySQL Community Server (GPL)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

# tail /var/log/secure
..
Nov 28 10:06:02 cent01 su: pam_unix(su-l:session): session opened for user myadmin by root(uid=0)
Nov 28 10:07:09 cent01 su: pam_unix(su-l:session): session closed for user myadmin


suの履歴はsyslogに残るから、この経路以外でのmysqlのrootへのアクセスを塞ぐ
(.mylogin.cnf頼りrootのパスワードを配布しない)様にすれば、
MySQLにrootでアクセスした時のUNIXアカウントとアクセスしていた時間が綺麗にログに取れる。

んー。。これちょっと実装というか設定したいなぁ。。

0 件のコメント :

コメントを投稿