Öncelikle şunu belirtmeliyim ki, önerilen birçok soruyu inceledim ve ilgili bir cevap bulamadım. İşte benim yaptığım şey.
Amazon EC2 örneğime bağlıyım. Bu komut ile MySQL root ile giriş yapabiliyorum:
mysql -u root -p
Sonra host % ile yeni bir kullanıcı faturası oluşturdum
CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';
Kullanıcı bill'e tüm ayrıcalıklar verildi:
grant all privileges on *.* to 'bill'@'%' with grant option;
Sonra root kullanıcısından çıkıyorum ve bill ile giriş yapmayı deniyorum:
mysql -u bill -p
doğru şifreyi girdim ve bu hatayı aldım:
HATA 1045 (28000): Kullanıcı 'bill'@'localhost' için erişim reddedildi (parola: YES kullanılıyor)
Koştuğunda
mysql -u bill -p
ve şu hatayı aldım
ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
mysqld bill@localhost
olarak bağlanmanızı bekliyor
bill@localhost` oluşturmayı deneyin
CREATE USER bill@localhost IDENTIFIED BY 'passpass';
grant all privileges on *.* to bill@localhost with grant option;
Uzaktan bağlanmak istiyorsanız, TCP/IP kullanarak DNS adını, genel IP'yi veya 127.0.0.1 adresini belirtmeniz gerekir:
mysql -u bill -p [email protected]
mysql -u bill -p -h10.1.2.30
mysql -u bill -p -h127.0.0.1 --protocol=TCP
Giriş yaptıktan sonra lütfen şunu çalıştırın
SELECT USER(),CURRENT_USER();
USER() MySQL'de nasıl kimlik doğrulama girişiminde bulunduğunuzu bildirir
CURRENT_USER() MySQL'de mysql.user tablosundan nasıl kimlik doğrulama izni aldığınızı bildirir
Bu, mysql'e nasıl ve neden giriş yapmanıza izin verildiğini daha iyi görmenizi sağlayacaktır. Bu görünümü bilmek neden önemlidir? Kullanıcı kimlik doğrulama sipariş protokolü ile ilgilidir.
İşte bir örnek: Masaüstümde anonim bir kullanıcı oluşturacağım MySQL
mysql> select user,host from mysql.user;
+---------+-----------+
| user | host |
+---------+-----------+
| lwdba | % |
| mywife | % |
| lwdba | 127.0.0.1 |
| root | 127.0.0.1 |
| lwdba | localhost |
| root | localhost |
| vanilla | localhost |
+---------+-----------+
7 rows in set (0.00 sec)
mysql> grant all on *.* to x@'%';
Query OK, 0 rows affected (0.02 sec)
mysql> select user,host from mysql.user;
+---------+-----------+
| user | host |
+---------+-----------+
| lwdba | % |
| mywife | % |
| x | % |
| lwdba | 127.0.0.1 |
| root | 127.0.0.1 |
| lwdba | localhost |
| root | localhost |
| vanilla | localhost |
+---------+-----------+
8 rows in set (0.00 sec)
mysql> update mysql.user set user='' where user='x';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> select user,host from mysql.user;
+---------+-----------+
| user | host |
+---------+-----------+
| | % |
| lwdba | % |
| mywife | % |
| lwdba | 127.0.0.1 |
| root | 127.0.0.1 |
| lwdba | localhost |
| root | localhost |
| vanilla | localhost |
+---------+-----------+
8 rows in set (0.00 sec)
mysql>
Tamam, anonim kullanıcı olarak giriş yapmamı izle:
C:\MySQL_5.5.12>mysql -urol -Dtest -h127.0.0.1 --protocol=TCP
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.5.12-log MySQL Community Server (GPL)
Copyright (c) 2000, 2010, 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> select user(),current_user();
+---------------+----------------+
| user() | current_user() |
+---------------+----------------+
| rol@localhost | @% |
+---------------+----------------+
1 row in set (0.00 sec)
mysql>
Kimlik doğrulama sıralaması çok katıdır. En spesifik olandan en az olana doğru kontrol eder. Bu kimlik doğrulama tarzı hakkında DBA StackExchange'de yazdım.
Gerektiğinde mysql istemcisi için protokol olarak TCP'yi açıkça çağırmayı unutmayın.
mysql -u root -p` yazdığınızda, mysql sunucusuna yerel bir unix soketi üzerinden bağlanırsınız.
Ancak verdiğiniz bağış, 'bill'@'%'
ilginç bir şekilde yalnızca TCP/IP bağlantılarıyla eşleşir.
Yerel unix soketine erişim izni vermek istiyorsanız, 'bill'@'localhost' 'a ayrıcalıklar vermeniz gerekir; bu da ilginç bir şekilde 'bill'@'127.0.0.1' ile aynı değildir;
TCP/IP kullanarak mysql komut satırı istemcisi ile de bağlanabilirsiniz, daha önce verdiğiniz ayrıcalıklarla eşleştirmek için, örneğin mysql -u root -p -h 192.168.1.123
veya kutunuzun sahip olduğu yerel IP adresini çalıştırın.