2021 May 21.
unixソケット認証のmysqlでは、ログインしているユーザー(userA)とは別のシステムユーザー名(userB)と同じmysqlユーザー(userB)で接続しようとすると、アクセス拒否される。(userBのmysqlパスワードが設定されていないので当然?)
[userAとuserBは/etc/passwdに登録されていて、mysqlのユーザーにも登録されている]
(失敗例1)
userA $ mysql -u userB --password=xxx ERROR 1698 (28000): Access denied for user 'userB'@'localhost'
(失敗例2)
次のように~/.my.cnf.userCを作成してアクセスしても拒否される
(1) 任意のファイル(ここでは ~/.my.cnf.userC とする)にuserCの情報を書き込む
[mysqldump] user=userC password=xxx [client] user=userC password=xxx
(2) userCでmysqlに接続する
userA $ mysql --defaults-extra-file=.my.cnf.userC -u userC ERROR 1698 (28000): Access denied for user 'userC'@'localhost'
一方、システムに登録されていないmysqlユーザー(userC)なら、--passwordオプションでパスワードを付けるとアクセスできる
(userCは/etc/passwdに登録されておらず、mysqlのユーザーには登録されている) userA $ mysql -u userC --password=xxx MariaDB [(none)]>
・sudoコマンドを使ってシステムのuserAがmysqlのuserBでパスワード無しで接続する方法
[userAとuserBは/etc/passwdに登録されていて、mysqlのユーザーにも登録されている]
(1) /etc/sudoerにシステムの他のユーザーとなる設定を記述する
visudoコマンドで/etc/sudoerに下記を記述する
userA ALL=(userB) NOPASSWD: /usr/bin/mysql userA: システムにログインしているユーザー名 userB: mysqlのユーザー名でもある、システムの他のユーザー(mysqlにuserB@localhostユーザーが必要)
・利用したいmysqlユーザーと同じ権限の別ユーザーを作成して接続する方法
rootユーザーと同じ権限のadminユーザーを作る例
(1) ユーザーadminを作成
$ sudo mysql -u root > GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'XXXX' WITH GRANT OPTION ; > FLUSH PRIVILEGES;
(2) ~/.my.cnfを作成
userA $ cat ~/.my.cnf [mysqldump] user=admin password=XXXX [client] user=admin password=XXXX