私はMySQLでrootユーザーにうまくアクセスしていました。しかし、最近、私はもうできなくなっています。
私はうまくログインできます:
mysql -u root -p
ログイン後のmysqlステータスは次のとおりです。
mysql> status
--------------
mysql Ver 14.14 Distrib 5.5.28, for debian-linux-gnu (i686) using readline 6.2
Connection id: 37
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.5.28-0ubuntu0.12.04.3 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 4 min 16 sec
Threads: 1 Questions: 112 Slow queries: 0 Opens: 191
Flush tables: 1 Open tables: 6 Queries per second avg: 0.437
--------------
しかし、次のようなアクションを実行したい場合:
mysql> CREATE DATABASE moyennegenerale;
ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'moyennegenerale'
わかります %
は任意のホストを示すために使用されますが、私のステータスは明らかにlocalhostを示しています。誰かが何が起こっているのかを知っていますか?
匿名ユーザーがいると思います
これを実行してみてください:
_SELECT user,Host,password FROM mysql.user WHERE user='';
_
これにより、存在する匿名ユーザーが表示されます。ほとんどの場合、以下に示すように、空白のユーザー、ホスト_%
_、空白のパスワードを含む行が表示されます。
_mysql> select user,Host,password from mysql.user;
+-----------+-------------+-------------------------------------------+
| user | Host | password |
+-----------+-------------+-------------------------------------------+
| lwdba | 127.0.0.1 | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| lwdba | localhost | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| lwdba | % | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root | localhost | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root | 127.0.0.1 | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| Vanilla | localhost | |
| mywife | % | |
| | % | | <<<--- LOOK !!!
| replicant | 10.64.113.% | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| kumar | % | |
+-----------+-------------+-------------------------------------------+
_
では、どのようにログインしましたか?このクエリを実行します。
_SELECT USER(),CURRENT_USER();
_
2番目の関数CURRENT_USER()
は、どの匿名ユーザーがログインに使用されたかを明らかにします。
実行してください
_SHOW GRANTS;
_
これにより、ログイン時の特権が明らかになります。データベースの作成がブロックされたという事実は、rootではなく、より低い特権のユーザーであったことを示しています。
ユーザーの許可をクリーンアップしてください。
Feb 17, 2012
_: MySQL:mysql.dbに「テスト」エントリがあるのはなぜですか?Feb 17, 2012
_: mysql.dbテーブルは何に使用されますか?Jan 18, 2012
_: MySQLエラー:ユーザー 'a' @ 'localhost'のアクセスが拒否されました(パスワードを使用:YES)ルートパスワードのリセットについては、次の手順を実行してください。
_echo "SET PASSWORD FOR root@localhost=PASSWORD('password');" > /var/lib/mysql/rootpwd.sql
service mysql restart
rm -f /var/lib/mysql/rootpwd.sql
_
私はこれを学びました @ ShlomiNoachからの効率的な方法 。
試してみる !!!
私はあなたが何をしたか知っています。
これを行う:
SELECT `User`, `Grant_priv` FROM `mysql`.`user` WHERE `User` = 'root';
Grant_privに対して「N」を返すことに気付くでしょう。これを行います:
UPDATE `mysql`.`user` SET `Grant_priv` = 'Y' WHERE `User` = 'root';
FLUSH PRIVILEGES;
SELECT `User`, `Grant_priv` FROM `mysql`.`user`;
そしてワラ!お役に立てば幸いです。
root
ユーザーとして入力したら、特権を確認します。
mysql> show grants for 'root'@'localhost';
権限を確認した後、別のユーザーにすべての権限を付与するか、root
ユーザーにすべての権限を再度付与することができます。
mysql> grant all privileges on *.* to 'root'@'localhost';
root
ユーザーに権限がない場合は、復元を試みることができます。
mysqld
サーバーを停止します
この方法でサーバーを再起動しますmysqld_safe --skip-grant-table
root
権限を復元するには:
mysql> flush privileges;
mysql> grant all privileges on *.* to 'root'@'localhost' with grant option;
あなたの特権が減る可能性がありますか?
また、root権限で別のアカウントを作成することもできます。
そしてrootユーザーを削除し、指定された権限で再作成します。
これは役に立ちます: http://dev.mysql.com/doc/refman/5.5/en/resetting-permissions.html
C.5.4.1.2-LINUX(作成したクエリを持つファイルを作成し、完全なルート権限を持つ新しいユーザー)
C.5.4.1.1-Windows(作成したクエリを含むファイルを作成し、完全なルート権限を持つ新しいユーザー)
クエリ:(rootユーザーの作成)
CREATE USER 'new_root'@'%' IDENTIFIED BY '***';
GRANT ALL PRIVILEGES ON *.* TO 'new_root'@'%' IDENTIFIED BY '***' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
MySQLマニュアルユーザーの作成: http://dev.mysql.com/doc/refman/5.5/en/adding-users.html