Rumah > Soal Jawab > teks badan
Biar saya nyatakan dahulu bahawa saya telah melihat banyak soalan yang dicadangkan dan tidak menemui jawapan yang berkaitan. Inilah yang saya lakukan.
Saya disambungkan ke contoh Amazon EC2 saya. Saya boleh log masuk ke pengguna root MySQL menggunakan arahan berikut:
mysql -u root -p
Kemudian saya mencipta bil pengguna baharu dengan hos %
CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';
Berikan semua kebenaran kepada bil pengguna:
grant all privileges on *.* to 'bill'@'%' with grant option;
Kemudian saya log keluar sebagai pengguna root dan cuba log masuk menggunakan pengguna bil:
mysql -u bill -p
Selepas memasukkan kata laluan yang betul, ralat berikut muncul:
Ralat 1045 (28000): Akses ditolak untuk "bil"@"localhost" pengguna (menggunakan kata laluan: YA)
P粉1869047312023-09-18 07:57:18
Cuba:
~$ mysql -u root -p 输入密码: mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option;
P粉2873452512023-09-18 00:36:21
Anda mungkin mempunyai pengguna tanpa nama''@'localhost'
或''@'127.0.0.1'
.
Mengikut Manual:
Oleh itu, pengguna tanpa nama seperti itu akan "menyekat" mana-mana pengguna lain sebagai '[any_username]'@'%'
在从localhost
apabila disambungkan.
'bill'@'localhost'
匹配'bill'@'%'
,但会在之前匹配(例如)''@'localhost'
.
Penyelesaian yang disyorkan ialah memadamkan pengguna tanpa nama ini (biasanya ini idea yang bagus).
Suntingan di bawah kebanyakannya tidak berkaitan dengan soalan utama. Ini hanyalah untuk menjawab beberapa soalan yang ditanya dalam ulasan lain dalam benang ini.
Edit 1
Sahkan dengan 'bill'@'%'
melalui soket.
root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket=/tmp/mysql-5.5.sock 欢迎使用 MySQL monitor(...) mysql> SELECT user, host FROM mysql.user; +------+-----------+ | user | host | +------+-----------+ | bill | % | | root | 127.0.0.1 | | root | ::1 | | root | localhost | +------+-----------+ 共有 4 行(0.00 秒) mysql> SELECT USER(), CURRENT_USER(); +----------------+----------------+ | USER() | CURRENT_USER() | +----------------+----------------+ | bill@localhost | bill@% | +----------------+----------------+ 共有 1 行(0.02 秒) mysql> SHOW VARIABLES LIKE 'skip_networking'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | skip_networking | ON | +-----------------+-------+ 共有 1 行(0.00 秒)
Edit 2
Persediaan yang sama, kecuali saya mengaktifkan semula rangkaian dan kini mencipta pengguna tanpa nama''@'localhost'
.
root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql 欢迎使用 MySQL monitor(...) mysql> CREATE USER ''@'localhost' IDENTIFIED BY 'anotherpass'; 查询 OK,0 行受影响(0.00 秒) mysql> Bye root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \ --socket=/tmp/mysql-5.5.sock ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES) root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \ -h127.0.0.1 --protocol=TCP ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES) root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \ -hlocalhost --protocol=TCP ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
Edit 3
Situasi yang sama seperti dalam edit 2, kini menyediakan kata laluan untuk pengguna tanpa nama.
root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost 欢迎使用 MySQL monitor(...) mysql> SELECT USER(), CURRENT_USER(); +----------------+----------------+ | USER() | CURRENT_USER() | +----------------+----------------+ | bill@localhost | @localhost | +----------------+----------------+ 共有 1 行(0.01 秒)
Kesimpulan 1, daripada suntingan 1: Pengesahan 'bill'@'%'
boleh dilakukan melalui soket.
Kesimpulan 2, daripada suntingan 2: Sama ada menyambung melalui TCP atau melalui soket tidak mempunyai kesan ke atas proses pengesahan (selain tidak dapat menyambung melalui soket kepada mana-mana pengguna lain selain 'something'@'localhost'
).
Kesimpulan 3, daripada suntingan 3: Walaupun saya menyatakan -ubill
, saya telah diberikan akses sebagai pengguna tanpa nama. Ini adalah kerana "peraturan pesanan" yang dicadangkan di atas. Sila ambil perhatian bahawa pada kebanyakan pemasangan lalai, terdapat pengguna tanpa namatanpa kata laluan (yang harus dilindungi/dialih keluar).