Risposte:
Prova questo per creare l'utente:
CREATE USER 'user'@'hostname';
Prova questo per dargli accesso al database dbTest
:
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
Se stai eseguendo il codice / sito accedendo a MySQL sulla stessa macchina, il nome host sarebbe localhost.
Ora, la rottura.
GRANT
- Questo è il comando utilizzato per creare utenti e concedere diritti a database, tabelle, ecc.
ALL PRIVILEGES
- Questo dice che l'utente avrà tutti i privilegi standard. Questo non include il privilegio di usare il comando GRANT comunque.
dbtest.*
- Queste istruzioni MySQL per applicare questi diritti per l'uso nell'intero database dbtest. Se lo si desidera, è possibile sostituire * con nomi di tabella specifici o routine di archiviazione.
TO 'user'@'hostname'
- "utente" è il nome utente dell'account utente che si sta creando. Nota: devi avere le virgolette singole. 'hostname' dice a MySQL da quali host l'utente può connettersi. Se lo desideri solo dalla stessa macchina, usalocalhost
IDENTIFIED BY 'password'
- Come avresti intuito, questo imposta la password per quell'utente.
Per creare l'utente in MySQL / MariaDB 5.7.6 e versioni successive, utilizzare la CREATE USER
sintassi :
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';
quindi per concedere tutto l'accesso al database (ad es. my_db
), utilizzare GRANT
Sintassi , ad es
GRANT ALL ON my_db.* TO 'new_user'@'localhost';
Dove ALL
( tipo_priv ) può essere sostituito con particolare privilegio, come SELECT
, INSERT
, UPDATE
, ALTER
, etc.
Quindi per ricaricare le autorizzazioni appena assegnate eseguire:
FLUSH PRIVILEGES;
Per eseguire i comandi sopra, è necessario eseguire il mysql
comando e digitarli nel prompt, quindi disconnettersi dal quit
comando o Ctrl- D.
Per eseguire dalla shell, utilizzare il -e
parametro (sostituire SELECT 1
con uno dei comandi sopra):
$ mysql -e "SELECT 1"
oppure stampa la dichiarazione dallo standard input:
$ echo "FOO STATEMENT" | mysql
Se hai accesso negato con sopra, specifica i parametri -u
(per utente) e -p
(per password) oppure, per un accesso a lungo termine, imposta le tue credenziali ~/.my.cnf
, ad es.
[client]
user=root
password=root
Per le persone che non hanno familiarità con la sintassi di MySQL, qui ci sono utili funzioni della shell che sono facili da ricordare e usare (per usarle, è necessario caricare le funzioni della shell incluse più in basso).
Ecco un esempio:
$ 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
Per utilizzare i comandi sopra, è necessario copiare e incollare le seguenti funzioni nel file rc (ad es. .bash_profile
) E ricaricare la shell o il file sorgente. In questo caso basta digitare 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'"
}
Nota: se si preferisce non lasciare traccia (come le password) nella cronologia di Bash, selezionare: Come impedire che i comandi vengano visualizzati nella cronologia di bash?
~/.my.cnf
come suggerito sopra.
Accedi a MySQL:
mysql -u root
Ora crea e concedi
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
In alternativa, se si desidera solo consentire l'accesso completo e senza restrizioni a un database (ad es. Sul proprio computer locale per un'istanza di prova, è possibile concedere l'accesso all'utente anonimo, in questo modo:
GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'
Questo va bene per i dati spazzatura in fase di sviluppo. Non farlo con qualsiasi cosa ti interessi.
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"
ignora l' opzione -p , se l'utente mysql non ha password o premi semplicemente il pulsante "[Enter]" per by-pass. le stringhe circondate da parentesi graffe devono essere sostituite con valori effettivi.
È possibile creare nuovi utenti utilizzando l' istruzione CREATE USER e concedere loro i diritti tramite GRANT .
Per me questo ha funzionato.
CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost';
FLUSH PRIVILEGES;
dove
Il comando seguente funzionerà se si desidera creare un nuovo utente, dandogli tutto l'accesso a un database specifico (non tutti i database nel tuo Mysql) sul tuo host locale.
GRANT ALL PRIVILEGES ON test_database.* TO 'user'@'localhost' IDENTIFIED BY 'password';
Ciò garantirà tutti i privilegi di un database test_database
(nel tuo caso dbTest
) a quell'utente su localhost.
Controlla quali autorizzazioni quel comando sopra ha emesso per quell'utente eseguendo il comando seguente.
SHOW GRANTS FOR 'user'@'localhost'
Per ogni evenienza, se si desidera limitare l'accesso dell'utente a una sola tabella
GRANT ALL ON mydb.table_name TO 'someuser'@'host';
Nel caso in cui la host
parte venga omessa, per impostazione predefinita viene visualizzato il simbolo jolly %
, consentendo a tutti gli host.
CREATE USER 'service-api';
GRANT ALL PRIVILEGES ON the_db.* TO 'service-api' IDENTIFIED BY 'the_password'
SELECT * FROM mysql.user;
SHOW GRANTS FOR 'service-api'