Odpowiedzi:
Spróbuj utworzyć użytkownika:
CREATE USER 'user'@'hostname';
Spróbuj, aby dać mu dostęp do bazy danych dbTest
:
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
Jeśli uruchamiasz kod / witrynę uzyskującą dostęp do MySQL na tym samym komputerze, nazwą hosta będzie localhost.
Teraz załamanie.
GRANT
- To polecenie służy do tworzenia użytkowników i przyznawania uprawnień do baz danych, tabel itp.
ALL PRIVILEGES
- Oznacza to, że użytkownik będzie miał wszystkie standardowe uprawnienia. Nie obejmuje to jednak uprawnienia do korzystania z polecenia GRANT.
dbtest.*
- Niniejsza instrukcja MySQL do zastosowania tych praw do użytku w całej bazie danych dbtest. Jeśli chcesz, możesz zastąpić * konkretnymi nazwami tabel lub procedurami przechowywania.
TO 'user'@'hostname'
- „użytkownik” to nazwa użytkownika konta użytkownika, które tworzysz. Uwaga: Musisz tam mieć pojedyncze cytaty. „nazwa hosta” informuje MySQL, z których hostów użytkownik może się połączyć. Jeśli chcesz go tylko z tego samego komputera, użyjlocalhost
IDENTIFIED BY 'password'
- Jak można się domyślić, ustawia to hasło dla tego użytkownika.
Aby utworzyć użytkownika w MySQL / MariaDB 5.7.6 i nowszych, użyj CREATE USER
składni :
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';
następnie, aby udzielić całego dostępu do bazy danych (np. my_db
), użyj GRANT
Składni , np
GRANT ALL ON my_db.* TO 'new_user'@'localhost';
Gdzie ALL
( typ_uprawnien ) można zastąpić konkretnego przywilejów, takich jak SELECT
, INSERT
, UPDATE
, ALTER
, etc.
Następnie, aby ponownie załadować nowo przypisane uprawnienia, uruchom:
FLUSH PRIVILEGES;
Aby uruchomić powyższe polecenia, musisz uruchomić mysql
polecenie i wpisać je w wierszu polecenia, a następnie wylogować się za pomocą quit
polecenia lub Ctrl- D.
Aby uruchomić z powłoki, użyj -e
parametru (zamień na SELECT 1
jedno z powyższych poleceń):
$ mysql -e "SELECT 1"
lub wydrukuj wyciąg ze standardowego wejścia:
$ echo "FOO STATEMENT" | mysql
Jeśli masz powyżej odmowę dostępu , określ parametry -u
(dla użytkownika) i -p
(dla hasła) lub dla dostępu długoterminowego ustaw swoje poświadczenia ~/.my.cnf
, np.
[client]
user=root
password=root
Dla osób, które nie znają składni MySQL, oto przydatne funkcje powłoki, które są łatwe do zapamiętania i użycia (aby z nich skorzystać, należy załadować zawarte w nich funkcje powłoki).
Oto przykład:
$ 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
Aby użyć powyższych poleceń, musisz skopiować i wkleić następujące funkcje do pliku rc (np. .bash_profile
) I ponownie załadować powłokę lub plik źródłowy. W takim przypadku po prostu wpisz 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'"
}
Uwaga: Jeśli wolisz nie zostawiać śladu (np. Haseł) w historii Bash, sprawdź: Jak zapobiec wyświetlaniu się poleceń w historii Bash ?
~/.my.cnf
jak sugerowano powyżej.
Zaloguj się do MySQL:
mysql -u root
Teraz utwórz i udziel
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
Alternatywnie, jeśli chcesz po prostu przyznać pełny nieograniczony dostęp do bazy danych (np. Na komputerze lokalnym dla instancji testowej, możesz przyznać dostęp anonimowemu użytkownikowi, np .:
GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'
To jest dobre dla niepotrzebnych danych w fazie rozwoju. Nie rób tego z czymś, na czym ci zależy.
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"
zignoruj opcję -p , jeśli użytkownik mysql nie ma hasła lub po prostu naciśnij przycisk „[Enter]”, aby ominąć. ciągi otoczone nawiasami klamrowymi należy zastąpić rzeczywistymi wartościami.
Możesz tworzyć nowych użytkowników za pomocą instrukcji CREATE USER i nadawać im uprawnienia za pomocą GRANT .
Dla mnie to zadziałało.
CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost';
FLUSH PRIVILEGES;
gdzie
Poniższe polecenie będzie działać, jeśli chcesz utworzyć nowego użytkownika, dać mu pełny dostęp do określonej bazy danych (nie wszystkich baz danych w Mysql) na komputerze lokalnym.
GRANT ALL PRIVILEGES ON test_database.* TO 'user'@'localhost' IDENTIFIED BY 'password';
To da wszystkie uprawnienia jednej bazie danych test_database
(w twoim przypadku dbTest
) temu użytkownikowi na localhost.
Sprawdź, jakie uprawnienia, które powyższe polecenie wydało temu użytkownikowi, uruchamiając poniższe polecenie.
SHOW GRANTS FOR 'user'@'localhost'
Na wszelki wypadek, jeśli chcesz ograniczyć dostęp użytkownika do tylko jednego stołu
GRANT ALL ON mydb.table_name TO 'someuser'@'host';