Vreau să creați un utilizator nou în MySQL si da full acces doar la o singură bază de date, spun dbTest
, care pot crea cu o comandă cum ar fi pentru a crea o bază de date dbTest;`. Ceea ce ar fi MySQL comenzi pentru a face asta?
Încercați acest lucru pentru a crea utilizatorul:
CREATE USER 'user'@'hostname';
Încercați acest lucru pentru a da acces la baza de date dbTest
:
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
Dacă se execută codul/accesarea site-ului MySQL pe aceeași mașină, hostname-ar fi localhost.
Acum, rupe în jos.
ACORDA
- Aceasta este comanda folosită pentru a crea utilizatori și a le acorda drepturi de baze de date, tabele, etc.
TOATE PRIVILEGIILE
- Asta spune utilizatorul va avea toate standard de privilegii. Aceasta nu include privilegiul de a folosi comanda GRANT cu toate acestea.
dbtest.*
- Acest instrucțiuni MySQL pentru a aplica aceste drepturi de utilizare în întreaga dbtest baza de date. Puteți înlocui * cu masa specifică numele sau magazin de rutine, dacă doriți.
LA 'user'@'hostname'` - 'utilizator' este numele de utilizator al contului de utilizator pe care îl creați. Notă: trebuie să Aveți un singur citate acolo. 'hostname' spune MySQL ce gazdele utilizatorul se poate conecta la. Dacă doriți doar din aceeași mașină, utilizați "localhost"
IDENTIFICATE PRIN 'parola'
- Cum ai ghicit, aceasta setează parola pentru acel utilizator.
Pentru a crea utilizatorul în MySQL/MariaDB 5.7.6 și mai mare, utilizarea CREA
sintaxa:
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';
apoi să acorde acces la baza de date (de exemplu, my_db
), utilizarea ACORDA
Sintaxa, de exemplu
GRANT ALL ON my_db.* TO 'new_user'@'localhost';
în cazul în Care "TOATE" (priv_type) poate fi înlocuită cu anumite privilegii, cum ar fi "ALEGE", "INSERT", "UPDATE", "ALTER", etc.
Apoi să reîncărcați nou atribuit permisiuni de rulare:
FLUSH PRIVILEGES;
Pentru a rula comenzile de mai sus, aveți nevoie pentru a rula mysql
comandă și introduceți-le în prompt, apoi logout cu "quit" comanda sau Ctrl-: D.
Pentru a rula de la shell, utilizați "- e " parametru (înlocui SELECTAȚI 1` cu una din comenzile de mai sus):
$ mysql -e "SELECT 1"
sau declarația de imprimare de la intrarea standard:
$ echo "FOO STATEMENT" | mysql
Daca'am Acces interzis cu de mai sus, specifica -u
(pentru utilizator) și -p
(parola) parametri, sau pentru acces pe termen lung set acreditările dvs. în~/.meu.cnf `, de exemplu
[client]
user=root
password=root
Pentru cei care nu sunt familiarizați cu sintaxa MySQL, aici sunt la îndemână shell funcții care sunt ușor de ținut minte și de a folosi (pentru a le folosi, aveți nevoie pentru a încărca shell funcții incluse mai jos).
Aici este un exemplu:
$ 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
Pentru a utiliza comenzile de mai sus, aveți nevoie pentru a copia&inserați următoarele funcții în rc fișier (de exemplu, .bash_profile
) și reîncărcați shell sau sursa fișierului. În acest caz, doar de tip sursă .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'"
}
Notă: Dacă preferați să nu lase urme (cum ar fi parole) în Bash istorie, verificați: Cum pentru a preveni comenzile să apară în bash istorie?
Vă conectați la MySQL:
mysql -u root
Acum a crea și de a acorda
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
Alternativ, dacă doriți doar să acorde acces deplin la o bază de date (de exemplu, pe computerul local pentru un exemplu de test, puteți acorda acces la utilizatorul anonim, astfel:
GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'
Acest lucru este bine pentru datele nedorite în dezvoltare. Don't face acest lucru cu ceva care vă interesează.
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"
ignore -p opțiunea, dacă utilizatorul mysql nu are parola sau trebuie doar să apăsați "[Enter]" buton pentru a by-pass. siruri de caractere înconjurat cu acolade trebuie să înlocuite cu valorile reale.
Pentru mine aceasta a lucrat.
CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost';
FLUSH PRIVILEGES;
în cazul în care
Comanda de mai jos va funcționa dacă doriți să creați un utilizator nou să-i dea toate accesul la o bază de date specifică(nu toate bazele de date în Mysql) pe localhost.
GRANT ALL PRIVILEGES ON test_database.* TO 'user'@'localhost' IDENTIFIED BY 'password';
Acest lucru va acorda toate privilegiile pentru o bază de date test_database
(în cazul tău dbTest
) utilizator de pe localhost.
Verifica ce permisiuni care comanda de mai sus emis pentru acel utilizator prin rularea comenzii de mai jos.
SHOW GRANTS FOR 'user'@'localhost'
Doar în cazul în care, dacă doriți pentru a limita accesul utilizatorului la o singură masă
GRANT ALL ON mydb.table_name TO 'someuser'@'host';