Ответы:
Попробуйте это, чтобы создать пользователя:
CREATE USER 'user'@'hostname';
Попробуйте это, чтобы дать ему доступ к базе данных dbTest
:
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
Если вы выполняете код / сайт, обращающийся к MySQL на той же машине, имя хоста будет localhost.
Теперь сломаться.
GRANT
- Эта команда используется для создания пользователей и предоставления прав на базы данных, таблицы и т. Д.
ALL PRIVILEGES
- Это говорит о том, что у пользователя будут все стандартные привилегии. Это не включает привилегию использовать команду GRANT как бы то ни было.
dbtest.*
- Эта инструкция MySQL для применения этих прав для использования во всей базе данных dbtest. Вы можете заменить * определенными именами таблиц или хранить процедуры, если хотите.
TO 'user'@'hostname'
- «пользователь» - это имя пользователя учетной записи, которую вы создаете. Примечание: там должны быть одинарные кавычки. «hostname» сообщает MySQL, с каких хостов пользователь может подключиться. Если вы хотите использовать его только на одной машине, используйтеlocalhost
IDENTIFIED BY 'password'
- Как вы уже догадались, это устанавливает пароль для этого пользователя.
Чтобы создать пользователя в MySQL / MariaDB 5.7.6 и выше, используйте CREATE USER
синтаксис :
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';
затем, чтобы предоставить всем доступ к базе данных (например my_db
), используйте GRANT
синтаксис , например
GRANT ALL ON my_db.* TO 'new_user'@'localhost';
Где ALL
( priv_type ) может быть заменен на определенной привилегии , такие как SELECT
, INSERT
, UPDATE
, ALTER
, и т.д.
Затем для перезагрузки вновь назначенных разрешений выполните:
FLUSH PRIVILEGES;
Для запуска вышеуказанных команд вам нужно запустить mysql
команду и ввести их в командной строке, а затем выйти из системы по quit
команде или Ctrl- D.
Для запуска из оболочки используйте -e
параметр (замените SELECT 1
на одну из приведенных выше команд):
$ mysql -e "SELECT 1"
или выведите выписку из стандартного ввода:
$ echo "FOO STATEMENT" | mysql
Если у вас есть Доступ запрещен с помощью выше, укажите -u
(для пользователя) и -p
(для пароля) параметры, или для долгосрочного доступа установите свои учетные данные ~/.my.cnf
, например,
[client]
user=root
password=root
Для людей, не знакомых с синтаксисом MySQL, вот удобные функции оболочки, которые легко запомнить и использовать (чтобы использовать их, вам нужно загрузить функции оболочки, включенные ниже).
Вот пример:
$ 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
Чтобы использовать вышеупомянутые команды, вам нужно скопировать и вставить следующие функции в ваш rc- файл (например .bash_profile
) и перезагрузить вашу оболочку или исходный файл. В этом случае просто введите 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'"
}
Примечание. Если вы предпочитаете не оставлять следы (например, пароли) в своей истории Bash, установите флажок: Как предотвратить отображение команд в истории Bash?
~/.my.cnf
как предложено выше.
Войдите в MySQL:
mysql -u root
Теперь создайте и предоставьте
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
В качестве альтернативы, если вы просто хотите предоставить полный неограниченный доступ к базе данных (например, на локальном компьютере для тестового экземпляра, вы можете предоставить доступ анонимному пользователю, например, так:
GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'
Это хорошо для ненужных данных в разработке. Не делайте этого с тем, что вас волнует.
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"
игнорируйте опцию -p , если у пользователя mysql нет пароля, или просто нажмите кнопку «[Enter]», чтобы пропустить. строки, окруженные фигурными скобками, необходимо заменить фактическими значениями.
Вы можете создавать новых пользователей с помощью оператора CREATE USER и предоставлять им права с помощью GRANT .
Для меня это сработало.
CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost';
FLUSH PRIVILEGES;
где
Команда ниже будет работать, если вы хотите создать нового пользователя и предоставить ему все права доступа к определенной базе данных (не ко всем базам данных в вашем Mysql) на вашем локальном хосте.
GRANT ALL PRIVILEGES ON test_database.* TO 'user'@'localhost' IDENTIFIED BY 'password';
Это предоставит все привилегии одной базе данных test_database
(в вашем случае dbTest
) этому пользователю на локальном хосте.
Проверьте, какие разрешения предоставлены вышеупомянутой командой этому пользователю, выполнив приведенную ниже команду.
SHOW GRANTS FOR 'user'@'localhost'
На всякий случай, если вы хотите ограничить доступ пользователя только одной таблицей
GRANT ALL ON mydb.table_name TO 'someuser'@'host';