Saya ingin membuat user baru di MySQL dan memberikan akses penuh hanya untuk satu database, mengatakan dbTest
, yang saya buat dengan perintah seperti membuat database dbTest;
. Apa yang akan menjadi MySQL perintah untuk melakukan itu?
Coba ini untuk membuat user:
CREATE USER 'user'@'hostname';
Coba ini untuk memberikan akses ke database dbTest
:
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
Jika anda menjalankan kode/situs mengakses MySQL pada mesin yang sama, host akan localhost.
Sekarang, break ke bawah.
HIBAH
- Ini adalah perintah yang digunakan untuk membuat pengguna dan memberikan hak untuk database, tabel, dll.
SEMUA HAK istimewa
- Ini memberitahu pengguna akan memiliki semua standar hak-hak istimewa. Ini tidak termasuk hak istimewa untuk menggunakan perintah GRANT namun.
dbtest.*
- Ini instruksi MySQL untuk menerapkan hak-hak ini untuk digunakan di seluruh dbtest database. Anda dapat mengganti * dengan spesifik nama tabel atau toko rutinitas jika yang anda inginkan.
UNTUK 'user'@'hostname'
- 'pengguna' adalah nama dari user account yang anda buat. Catatan: Anda harus memiliki tanda kutip tunggal di sana. 'hostname' memberitahu MySQL apa host pengguna dapat menghubungkan dari. Jika anda hanya ingin dari mesin yang sama, menggunakan localhost
DIIDENTIFIKASI OLEH 'kata'
- Seperti yang anda akan menebak, ini set password untuk user tersebut.
Untuk membuat user di MySQL/MariaDB 5.7.6 dan lebih tinggi, gunakan CREATE USER
sintaks:
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';
kemudian untuk memberikan semua akses ke database (misalnya my_db
), menggunakan HIBAH
Sintaks, misalnya
GRANT ALL ON my_db.* TO 'new_user'@'localhost';
di Mana SEMUA
(priv_type) bisa diganti dengan privilese tertentu seperti PILIH
, INSERT
, UPDATE
, MENGUBAH
, dll.
Kemudian untuk reload yang baru diberikan izin run:
FLUSH PRIVILEGES;
Untuk menjalankan atas perintah, anda perlu menjalankan mysql
perintah dan jenis mereka ke prompt, kemudian logout dengan berhenti
perintah atau Pilih-A.
Untuk menjalankan shell, gunakan -e
parameter (ganti PILIH 1
dengan salah satu di atas perintah):
$ mysql -e "SELECT 1"
atau print pernyataan dari standar input:
$ echo "FOO STATEMENT" | mysql
Jika anda've got Akses ditolak dengan di atas, tentukan -u
(untuk pengguna) dan -p
(untuk password) parameter, atau untuk jangka panjang akses mengatur kredensial anda di ~/.saya.cnf
, misalnya
[client]
user=root
password=root
Untuk orang yang tidak akrab dengan sintaks MySQL, berikut ini adalah handy shell fungsi yang mudah untuk diingat dan digunakan (untuk menggunakannya, anda perlu memuat fungsi shell termasuk lebih bawah).
Berikut adalah contoh:
$ 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 penggunaan di atas perintah, anda perlu menyalin&paste-fungsi berikut ke rc file (misalnya .bash_profile
) dan reload shell atau sumber file. Dalam kasus ini cukup ketik sumber .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 memilih untuk tidak meninggalkan jejak (seperti password) di Bash history, cek: Cara untuk mencegah perintah untuk muncul di bash history?
Masuk ke MySQL:
mysql -u root
Sekarang membuat dan hibah
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
Secara bergantian, jika anda hanya ingin memberikan full akses tak terbatas ke database (misalnya pada mesin lokal anda untuk menguji misalnya, anda dapat memberikan akses ke pengguna anonim, seperti:
GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'
Ini adalah baik untuk data sampah dalam pembangunan. Don't melakukan hal ini dengan apa pun yang anda sayangi.
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"
abaikan -p pilihan, jika pengguna mysql tidak memiliki password atau hanya tekan "[Enter]" tombol untuk by-pass. string dikelilingi dengan kurung kurawal perlu diganti dengan nilai yang sebenarnya.
Saya ini bekerja.
CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost';
FLUSH PRIVILEGES;
mana
Perintah di bawah ini akan bekerja jika anda ingin membuat user baru beri dia 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 untuk satu database test_database
(dalam kasus anda dbTest
) untuk pengguna di localhost.
Periksa apa izin yang di atas perintah yang dikeluarkan untuk pengguna dengan menjalankan perintah di bawah ini.
SHOW GRANTS FOR 'user'@'localhost'
Hanya dalam kasus, jika anda ingin membatasi akses pengguna hanya satu meja
GRANT ALL ON mydb.table_name TO 'someuser'@'host';