Jawaban:
Coba ini untuk membuat pengguna:
CREATE USER 'user'@'hostname';
Coba ini untuk memberikannya akses ke database dbTest
:
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
Jika Anda menjalankan kode / situs yang mengakses MySQL pada mesin yang sama, nama host adalah localhost.
Sekarang, kerusakannya.
GRANT
- Ini adalah perintah yang digunakan untuk membuat pengguna dan memberikan hak ke database, tabel, dll.
ALL PRIVILEGES
- Ini memberi tahu pengguna akan memiliki semua hak istimewa standar. Namun ini tidak termasuk hak istimewa untuk menggunakan perintah GRANT.
dbtest.*
- Instruksi ini MySQL untuk menerapkan hak-hak ini untuk digunakan di seluruh basis data dbtest. Anda dapat mengganti * dengan nama tabel tertentu atau menyimpan rutinitas jika diinginkan.
TO 'user'@'hostname'
- 'pengguna' adalah nama pengguna akun pengguna yang Anda buat. Catatan: Anda harus memiliki tanda kutip tunggal di sana. 'hostname' memberi tahu MySQL dari host mana pengguna dapat terhubung. Jika Anda hanya menginginkannya dari mesin yang sama, gunakanlocalhost
IDENTIFIED BY 'password'
- Seperti yang sudah Anda duga, ini menetapkan kata sandi untuk pengguna itu.
Untuk membuat pengguna di MySQL / MariaDB 5.7.6 dan lebih tinggi, gunakan CREATE USER
sintaks :
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';
lalu untuk memberikan semua akses ke database (mis. my_db
), gunakan GRANT
Sintaks , mis
GRANT ALL ON my_db.* TO 'new_user'@'localhost';
Mana ALL
( priv_type ) bisa diganti dengan spesifik hak istimewa seperti SELECT
, INSERT
, UPDATE
, ALTER
, dll
Kemudian untuk memuat ulang izin yang baru ditugaskan jalankan:
FLUSH PRIVILEGES;
Untuk menjalankan perintah di atas, Anda perlu menjalankan mysql
perintah dan mengetiknya ke prompt, lalu keluar dengan quit
perintah atau Ctrl- D.
Untuk menjalankan dari shell, gunakan -e
parameter (ganti SELECT 1
dengan salah satu dari perintah di atas):
$ mysql -e "SELECT 1"
atau cetak pernyataan dari input standar:
$ echo "FOO STATEMENT" | mysql
Jika Anda mendapat akses ditolak dengan di atas, tentukan -u
(untuk pengguna) dan -p
(untuk kata sandi) parameter, atau untuk akses jangka panjang atur kredensial Anda ~/.my.cnf
, misalnya
[client]
user=root
password=root
Bagi orang-orang yang tidak terbiasa dengan sintaks MySQL, berikut adalah fungsi-fungsi shell yang mudah diingat dan digunakan (untuk menggunakannya, Anda perlu memuat fungsi-fungsi shell yang disertakan lebih jauh ke bawah).
Berikut ini contohnya:
$ mysql-create-user admin mypass
| CREATE USER 'admin'@'localhost' IDENTIFIED BY 'mypass'
$ mysql-create-db foo
| CREATE DATABASE IF NOT EXISTS foo
$ mysql-grant-db admin foo
| GRANT ALL ON foo.* TO 'admin'@'localhost'
| FLUSH PRIVILEGES
$ mysql-show-grants admin
| SHOW GRANTS FOR 'admin'@'localhost'
| Grants for admin@localhost
| GRANT USAGE ON *.* TO 'admin'@'localhost' IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4' |
| GRANT ALL PRIVILEGES ON `foo`.* TO 'admin'@'localhost'
$ mysql-drop-user admin
| DROP USER 'admin'@'localhost'
$ mysql-drop-db foo
| DROP DATABASE IF EXISTS foo
Untuk menggunakan perintah di atas, Anda perlu menyalin & menempel fungsi-fungsi berikut ke file rc Anda (mis. .bash_profile
) Dan memuat kembali shell Anda atau sumber file. Dalam hal ini ketik saja source .bash_profile
:
# Create user in MySQL/MariaDB.
mysql-create-user() {
[ -z "$2" ] && { echo "Usage: mysql-create-user (user) (password)"; return; }
mysql -ve "CREATE USER '$1'@'localhost' IDENTIFIED BY '$2'"
}
# Delete user from MySQL/MariaDB
mysql-drop-user() {
[ -z "$1" ] && { echo "Usage: mysql-drop-user (user)"; return; }
mysql -ve "DROP USER '$1'@'localhost';"
}
# Create new database in MySQL/MariaDB.
mysql-create-db() {
[ -z "$1" ] && { echo "Usage: mysql-create-db (db_name)"; return; }
mysql -ve "CREATE DATABASE IF NOT EXISTS $1"
}
# Drop database in MySQL/MariaDB.
mysql-drop-db() {
[ -z "$1" ] && { echo "Usage: mysql-drop-db (db_name)"; return; }
mysql -ve "DROP DATABASE IF EXISTS $1"
}
# Grant all permissions for user for given database.
mysql-grant-db() {
[ -z "$2" ] && { echo "Usage: mysql-grand-db (user) (database)"; return; }
mysql -ve "GRANT ALL ON $2.* TO '$1'@'localhost'"
mysql -ve "FLUSH PRIVILEGES"
}
# Show current user permissions.
mysql-show-grants() {
[ -z "$1" ] && { echo "Usage: mysql-show-grants (user)"; return; }
mysql -ve "SHOW GRANTS FOR '$1'@'localhost'"
}
Catatan: Jika Anda lebih suka untuk tidak meninggalkan jejak (seperti kata sandi) di riwayat Bash Anda, periksa: Bagaimana mencegah perintah muncul di riwayat bash?
~/.my.cnf
seperti yang disarankan di atas.
Masuk ke MySQL:
mysql -u root
Sekarang buat dan berikan
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
Sebagai alternatif, jika Anda hanya ingin memberikan akses penuh tanpa batas ke basis data (mis. Pada mesin lokal Anda untuk contoh uji, Anda dapat memberikan akses ke pengguna anonim, seperti:
GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'
Ini bagus untuk data sampah dalam pengembangan. Jangan lakukan ini dengan apa pun yang Anda pedulikan.
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"
abaikan opsi -p , jika pengguna mysql tidak memiliki kata sandi atau cukup tekan tombol "[Enter]" untuk mem-by-pass. string yang dikelilingi oleh kurung kurawal perlu diganti dengan nilai aktual.
Anda dapat membuat pengguna baru menggunakan pernyataan CREATE USER , dan memberikan hak kepada mereka menggunakan GRANT .
Bagi saya ini berhasil.
CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost';
FLUSH PRIVILEGES;
dimana
Perintah di bawah ini akan berfungsi jika Anda ingin membuat pengguna baru memberinya semua akses ke database tertentu (tidak semua database di Mysql Anda) di localhost Anda.
GRANT ALL PRIVILEGES ON test_database.* TO 'user'@'localhost' IDENTIFIED BY 'password';
Ini akan memberikan semua hak istimewa ke satu basis data test_database
(dalam kasus Anda dbTest
) kepada pengguna tersebut di localhost.
Periksa izin apa yang dikeluarkan oleh perintah di atas untuk pengguna tersebut dengan menjalankan perintah di bawah ini.
SHOW GRANTS FOR 'user'@'localhost'
Untuk jaga-jaga, jika Anda ingin membatasi akses pengguna hanya satu tabel
GRANT ALL ON mydb.table_name TO 'someuser'@'host';