Antworten:
Versuchen Sie dies, um den Benutzer zu erstellen:
CREATE USER 'user'@'hostname';
Versuchen Sie dies, um Zugriff auf die Datenbank zu erhalten dbTest
:
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
Wenn Sie den Code / die Site, die auf MySQL zugreift, auf demselben Computer ausführen, lautet der Hostname localhost.
Nun ist der Zusammenbruch.
GRANT
- Dies ist der Befehl zum Erstellen von Benutzern und zum Gewähren von Rechten für Datenbanken, Tabellen usw.
ALL PRIVILEGES
- Dies sagt ihm, dass der Benutzer alle Standardrechte hat. Dies beinhaltet jedoch nicht das Privileg, den Befehl GRANT zu verwenden.
dbtest.*
- Diese Anweisung MySQL, diese Rechte zur Verwendung in der gesamten dbtest-Datenbank anzuwenden. Wenn Sie möchten, können Sie das * durch bestimmte Tabellennamen oder Speicherroutinen ersetzen.
TO 'user'@'hostname'
- 'Benutzer' ist der Benutzername des Benutzerkontos, das Sie erstellen. Hinweis: Sie müssen die einfachen Anführungszeichen dort haben. 'Hostname' teilt MySQL mit, von welchen Hosts aus der Benutzer eine Verbindung herstellen kann. Wenn Sie es nur von demselben Computer möchten, verwenden Sielocalhost
IDENTIFIED BY 'password'
- Wie Sie vermutet haben, wird hiermit das Kennwort für diesen Benutzer festgelegt.
Verwenden Sie die folgende CREATE USER
Syntax, um Benutzer in MySQL / MariaDB 5.7.6 und höher zu erstellen :
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';
Um dann den gesamten Zugriff auf die Datenbank zu gewähren (z. B. my_db
), verwenden Sie die GRANT
Syntax , z
GRANT ALL ON my_db.* TO 'new_user'@'localhost';
Wo ALL
( priv_type ) kann mit speziellen Privilegien wie ersetzt werden SELECT
, INSERT
, UPDATE
, ALTER
etc.
Führen Sie dann die neu zugewiesenen Berechtigungen erneut aus:
FLUSH PRIVILEGES;
Um die obigen Befehle auszuführen, müssen Sie den mysql
Befehl ausführen und in die Eingabeaufforderung eingeben und sich dann mit dem quit
Befehl oder Ctrl- abmelden D.
Verwenden Sie zum Ausführen von der Shell den -e
Parameter (durch SELECT 1
einen der oben genannten Befehle ersetzen ):
$ mysql -e "SELECT 1"
oder drucken Sie die Anweisung von der Standardeingabe:
$ echo "FOO STATEMENT" | mysql
Wenn Ihnen der Zugriff oben verweigert wurde , geben Sie die Parameter -u
(für Benutzer) und -p
(für Kennwort) an oder legen Sie für den Langzeitzugriff Ihre Anmeldeinformationen fest ~/.my.cnf
, z
[client]
user=root
password=root
Für Leute, die nicht mit der MySQL-Syntax vertraut sind, gibt es hier praktische Shell-Funktionen, die leicht zu merken und zu verwenden sind (um sie zu verwenden, müssen Sie die weiter unten enthaltenen Shell-Funktionen laden).
Hier ist ein Beispiel:
$ 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
Um die obigen Befehle zu verwenden, müssen Sie die folgenden Funktionen kopieren und in Ihre RC- Datei einfügen (z. B. .bash_profile
) und Ihre Shell neu laden oder die Datei als Quelle verwenden. In diesem Fall geben Sie einfach Folgendes ein 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'"
}
Hinweis: Wenn Sie keine Spuren (z. B. Kennwörter) in Ihrem Bash-Verlauf hinterlassen möchten, überprüfen Sie: Wie kann verhindert werden, dass Befehle im Bash-Verlauf angezeigt werden?
~/.my.cnf
wie oben vorgeschlagen zu Ihrem Passwort hinzufügen .
Melden Sie sich bei MySQL an:
mysql -u root
Jetzt erstellen und gewähren
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
Wenn Sie nur uneingeschränkten uneingeschränkten Zugriff auf eine Datenbank gewähren möchten (z. B. auf Ihrem lokalen Computer für eine Testinstanz), können Sie dem anonymen Benutzer wie folgt Zugriff gewähren:
GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'
Dies ist in Ordnung für Junk-Daten in der Entwicklung. Mach das nicht mit irgendetwas, das dir wichtig ist.
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"
Ignorieren Sie die Option -p , wenn der MySQL-Benutzer kein Passwort hat, oder drücken Sie einfach die "[Enter]" - Taste, um zu umgehen. Zeichenfolgen, die von geschweiften Klammern umgeben sind, müssen durch tatsächliche Werte ersetzt werden.
Sie können neue Benutzer mit der Anweisung CREATE USER erstellen und ihnen mit GRANT Rechte erteilen .
Für mich hat das funktioniert.
CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost';
FLUSH PRIVILEGES;
wo
Der folgende Befehl funktioniert, wenn Sie einen neuen Benutzer erstellen möchten, der ihm den gesamten Zugriff auf eine bestimmte Datenbank (nicht alle Datenbanken in Ihrem MySQL) auf Ihrem lokalen Host gewährt.
GRANT ALL PRIVILEGES ON test_database.* TO 'user'@'localhost' IDENTIFIED BY 'password';
Dadurch werden diesem Benutzer auf localhost alle Berechtigungen für eine Datenbank test_database
(in Ihrem Fall dbTest
) gewährt .
Überprüfen Sie, welche Berechtigungen der obige Befehl diesem Benutzer erteilt hat, indem Sie den folgenden Befehl ausführen.
SHOW GRANTS FOR 'user'@'localhost'
Nur für den Fall, dass Sie den Benutzerzugriff auf nur eine einzige Tabelle beschränken möchten
GRANT ALL ON mydb.table_name TO 'someuser'@'host';
Wenn das host
Teil weggelassen wird, wird standardmäßig das Platzhaltersymbol verwendet %
, sodass alle Hosts zugelassen werden.
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'