Создайте нового пользователя в MySQL и предоставьте ему полный доступ к одной базе данных. - PullRequest
566 голосов
/ 12 ноября 2009

Я хочу создать нового пользователя в MySQL и дать ему полный доступ только к одной базе данных, скажем dbTest, которую я создаю с помощью команды, подобной create database dbTest;. Какими будут команды MySQL для этого?

Ответы [ 7 ]

774 голосов
/ 12 ноября 2009

Попробуйте создать пользователя:

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' - Как вы уже догадались, это устанавливает пароль для этого пользователя.

271 голосов
/ 24 марта 2016

Синтаксис

Чтобы создать пользователя в 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?

56 голосов
/ 24 марта 2014

Чтобы создать пользователя и предоставить все привилегии для базы данных.

Войти в MySQL:

mysql -u root

Теперь создайте и предоставьте

GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';

Анонимный пользователь (только для локального тестирования)

Альтернативно, если вы просто хотите предоставить полный неограниченный доступ к базе данных (например, на локальном компьютере для тестового экземпляра, вы можете предоставить доступ анонимному пользователю, например, так:

GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'

Будь в курсе

Это хорошо для нежелательных данных в разработке. Не делайте этого с тем, что вас волнует.

15 голосов
/ 22 июня 2016
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"

игнорировать параметр -p , если у пользователя mysql нет пароля или , просто нажмите кнопку [Enter], чтобы пропустить. строки, окруженные фигурными скобками, необходимо заменить фактическими значениями.

13 голосов
/ 12 ноября 2009

Вы можете создавать новых пользователей с помощью оператора CREATE USER и предоставлять им права с помощью GRANT .

6 голосов
/ 17 октября 2018

Для меня это сработало.

CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234'; 
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost'; 
FLUSH PRIVILEGES;

где

  • spowner: имя пользователя
  • 1234: пароль владельца
  • test: база данных «spowner» имеет право доступа к
2 голосов
/ 12 марта 2016

Следующая команда будет работать, если вы хотите создать нового пользователя и предоставить ему все права доступа к определенной базе данных (не ко всем базам данных в вашем 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';
...