Karena memiliki beberapa masalah, saya memutuskan untuk membuat ulang semua pengguna kecuali untuk root@localhost
. Ini berfungsi dengan baik, tetapi pengguna yang baru dibuat tidak memiliki hak untuk melakukan apa pun. Yang saya inginkan adalah memberikan semua hak untuk melakukan root pada beberapa IP lokal. Saya (as root@localhost
) mencoba
CREATE USER 'root'@'10.0.3.210';
GRANT ALL ON *.* TO 'root'@'10.0.3.210';
Perintah pertama berfungsi, yang kedua gagal dengan pesan
ERROR 1045 (28000): Access denied for user 'root'@'localhost'
Saya tidak mengerti mengapa root@localhost
tidak bisa melakukan semuanya, saya yakin saya tidak mengacaukan dengan keistimewaannya. Dari
SHOW GRANTS FOR 'root'@'localhost'
saya mendapat
Grants for root@localhost
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, REPLICATION SLAVE, REPLICATION CLIENT, CREATE USER ON *.* TO 'root'@'localhost' WITH GRANT OPTION
GRANT ALL PRIVILEGES ON `%`.* TO 'root'@'localhost' WITH GRANT OPTION
apapun artinya ini. Apakah saya kehilangan hak istimewa yang diperlukan? Bisakah itu diperbaiki?
Saya bekerja dengan mysql Ver 14.14 Distrib 5.1.61, untuk debian-linux-gnu (x86_64).
mysql
permissions
maaartinus
sumber
sumber
GRANT SELECT ON *.* TO 'root'@'10.0.3.210';
?Jawaban:
Ya ampun, saya pikir masalahnya berasal dari pencampuran skema mysql dari berbagai versi mysql. Pertama-tama, jalankan kueri ini:
Untuk MySQL 5.6, Anda mendapatkan 43 kolom
Untuk MySQL 5.5, Anda mendapatkan 42 kolom
Untuk MySQL 5.1, Anda mendapatkan 39 kolom
Untuk MySQL 5.0, Anda mendapatkan 37 kolom
Untuk MySQL 4.x, Anda mendapatkan 31 kolom
Bayangkan skenario ini:
Izin pengguna mulai bergeser. Setiap kali Anda menjalankan
SHOW GRANTS;
, itu bawaan untuk mengharapkan kolom di tempat-tempat tertentu di mysql.user (mengingat fakta bahwa mysql.user adalah MyISAM dan ROW_FORMAT-nya adalah Dinamis (Default)). Sangat mudah untuk melihat seorang pengguna tiba-tiba kehilangan izin ketika Anda memuat ulang versi MySQL 5.0 dari mysql.user ke dalam contoh MySQL 5.1.Di masa depan, jika Anda pernah memutuskan untuk memuat ulang pengguna ke MySQL, cobalah untuk membuang pengguna ke file teks menggunakan pt-show-grants daripada mysqldump.
Saya sebenarnya menulis versi pt-show-grants saya sendiri sebagai berikut:
Ini akan menghasilkan semua hibah pengguna sebagai SQL, yang jauh lebih portabel daripada teknik mysql standar. Cukup memuat ulang skrip SQL dan GRANTS dijalankan. Tentu saja, reload seperti itu hanya kompatibel ke depan, tidak pernah mundur.
sumber
Komentar oleh
gbn
membawa saya ke solusinya: Tidak tahu bagaimana itu datang, tetapiroot@localhost
tidak memiliki beberapa hak istimewa. Jadi pertama-tama dapatkan semuanya melaluiAda beberapa kolom, jadi gunakan sesuatu seperti
dapat menyimpan cukup banyak mengetik. Mungkin
FLUSH PRIVILEGES
diperlukan setelah PEMBARUAN. Setelah saya memiliki semua hak istimewa, saya juga dapat memberikannya.sumber
Saya telah melihat masalah di mana Anda tidak bisa
GRANT CREATE TABLESPACE
.Namun, saya tidak yakin dengan semua detail dan saya melihatnya di 5.5 / Solaris
Komentar saya di atas dan respons Anda menunjukkan bahwa ini mungkin berlaku di sini. Artinya, Anda dapat memberikan segalanya kecuali
CREATE TABLESPACE
izinsumber
Seperti @RolandoMYSQLDBA dengan benar menyatakan masalah ini adalah karena meningkatkan versi MySQL Anda sambil tetap menyimpan file yang lebih lama (tanpa dumping / memulihkan). @gbn juga menyimpulkan dengan benar bahwa ini terkait dengan
CREATE TABLESPACE
hak istimewa yang ditambahkan di MySQL 5.5. Anda mungkin memiliki file database dari MySQL 5.1.Solusi sederhana (yang juga didokumentasikan dalam manual referensi MySQL ) adalah berjalan
mysql_upgrade
sambil pada akhirnya melewatkanGRANT
tabel:sumber