Bagaimana cara memberikan hak istimewa pembuatan basis data kepada pengguna di MySQL

11

Perintah berikut memberikan semua hak istimewa di semua database untuk 'admin' Pengguna. Tetapi itu tidak memungkinkan 'admin' untuk membuat database.

GRANT ALL ON * . * TO 'admin'@'localhost'; 

Bagaimana saya bisa menyediakan akses untuk 'admin' untuk membuat database?

Saat saya mencoba membuat database, saya mendapatkan kesalahan berikut -

GALAT 1044 (42000): Akses ditolak untuk 'admin' @ 'localhost' pengguna ke database 'newdb'

Abhishek
sumber
Apakah Anda menggunakan GRANT ALL ON *.* TO 'admin'@'localhost';? Dalam contoh Anda, Anda mengatakan bahwa Anda menjalankan:, GRANT ALL ON * . * TO 'admin'@'hostname';tetapi hostnamemerupakan host yang berbeda dari localhost.
oNare
nama host adalah 'localhost'.
Abhishek
Apakah Anda terhubung sebagai "root" ketika Anda menjalankannya GRANT?
Rick James
Iya. Saya terhubung sebagai "root" ketika saya menjalankan GRANT itu.
Abhishek
Apakah Anda mencoba flush privileges;sebagai root?
dwjv

Jawaban:

5

SEMUA hak istimewa termasuk "SEMUA" dari mereka kecuali "dengan PILIHAN GRANT" ... Dengan demikian perintah di atas akan membuat pengguna admin juga membuat basis data.

Anda mungkin ingin menunjukkan kesalahan yang Anda dapatkan. Perhatikan bahwa dalam GRANT di atas Anda belum menentukan kata sandi untuk pengguna admin juga.

Memperbarui:

Anda harus dapat melakukan hal berikut:

masuk sebagai root dan buat pengguna:

$] mysql -uroot -p
mysql> grant all privileges on *.* to 'admin'@'localhost';

login sebagai admin (tanpa kata sandi):

$] mysql -uadmin -p
mysql> create database admin;

Saat Anda masuk, Anda dapat memverifikasi hak istimewa Anda sebagai berikut:

mysql> show grants;

atau

mysql> show grants for current_user();

mysql> select current_user() akan menunjukkan kepada Anda, pengguna yang Anda masuk sebagai.

mysql_user
sumber
Saya telah menambahkan kesalahan dalam pertanyaan saya.
Abhishek
@abhishek memperbarui jawaban .... btw perintah apa yang menyebabkan kesalahan di atas? Periksa hibah apa yang dimiliki pengguna Anda? Apakah Anda yakin Anda terhubung sebagai pengguna admin?
mysql_user
Ya saya 100% yakin bahwa saya terhubung sebagai pengguna admin.
Abhishek
mysql> tampilkan hibah; + ------------------------------------------------- ---------------------------- + | Hibah untuk admin @ localhost | + ------------------------------------------------- ---------------------------- + | PENGGUNAAN GRANT ON . KE 'admin' @ 'localhost' DIIDENTIFIKASI OLEH PASSWORD <secret> | | HANYA SEMUA HAK ISTIMEWA newdb. * KE 'admin' @ 'localhost' | + ------------------------------------------------- ---------------------------- + 2 baris dalam set (0,00 dtk)
Abhishek
Perhatikan bahwa Anda hanya memiliki semua privasi di mbdb ... sehingga Anda tidak akan dapat bekerja dengan db lainnya!
mysql_user
0

Seorang pengguna baru tidak memiliki izin untuk melakukan apa pun dengan database. Bahkan, jika pengguna baru bahkan mencoba masuk (dengan kata sandi, kata sandi), mereka tidak akan dapat mencapai shell MySQL.

Karena itu, Anda perlu memberikan akses kepada pengguna

GRANT ALL PRIVILEGES ON * . * TO 'admin'@'localhost'; 

Tanda bintang dalam perintah ini merujuk ke database dan tabel (masing-masing) yang dapat mereka akses — perintah khusus ini memungkinkan pengguna untuk membaca, mengedit, mengeksekusi, dan melakukan semua tugas di semua database dan tabel.

Setelah menyelesaikan izin yang ingin Anda siapkan untuk pengguna baru, selalu pastikan memuat ulang semua hak istimewa.

FLUSH PRIVILEGES;

Sekarang, semua perubahan akan berlaku.

Mathew
sumber
Hak istimewa flush tidak diperlukan untuk perintah GRANT.
mysql_user
Ya..Saya setuju .... Tetapi PRIVILAGA FLUSH diperlukan ketika kami memodifikasi hibah pada tabel secara langsung menggunakan pernyataan seperti INSERT, UPDATE, atau DELETE ... Terima kasih @mysql_user
Mathew