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

434

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

Теги:
access-control

6 ответов

589

Попробуйте следующее:

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

Если вы используете код/​​сайт для доступа к MySQL на одном компьютере, имя хоста будет localhost.

Теперь сломайте.

GRANT - это команда, используемая для создания пользователей и предоставления прав на базы данных, таблицы и т.д.

ALL PRIVILEGES - Это говорит о том, что у пользователя будут все стандартные привилегии. Однако это не означает привилегии использовать команду GRANT.

dbtest.* - Это инструкции MySQL для применения этих прав для использования во всей базе данных dbtest. Вы можете заменить * на конкретные имена таблиц или сохранить подпрограммы, если хотите.

TO 'user'@'hostname' - 'user' - имя пользователя создаваемой учетной записи пользователя. Примечание. У вас должны быть одиночные кавычки. "hostname" сообщает MySQL, с каких хостов пользователь может подключиться. Если вы хотите использовать его только на одном компьютере, используйте localhost

IDENTIFIED BY 'password' - Как вы уже догадались, это устанавливает пароль для этого пользователя.

  • 70
    Если вы разрешаете доступ к сети и хотите установить соединение с любого хоста, вы можете изменить «имя хоста» на «%». Например, ... TO 'dbuser' @ '%' IDENTIFIED ... '%' является групповым символом хоста.
  • 14
    Не забывайте сбрасывать привилегии при работе с пользователями и таблицами! :-)
Показать ещё 10 комментариев
169

Синтаксис

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

Если у вас есть Access denied with above, укажите параметры -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) и перезагрузить оболочку:

# 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'"
}
  • 10
    Для всех, кто интересуется, как 2016, это лучший ответ.
  • 1
    Не будет работать, если MySQL защищен паролем ...
Показать ещё 5 комментариев
48

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

Войдите в MySQL:

mysql -u root

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

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

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

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

GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'
  • 3
    Вы можете создать анонимного пользователя, но не надо! Нет веской причины иметь пользователя с полными привилегиями и паролем, но он может испортить вам день / год / бизнес / работу в один прекрасный день, если кто-то получит доступ к вашему серверу, чего не должно быть. Зачем им что-то еще проще?
  • 2
    Если кто-то получил удаленный доступ к моему macbook, у меня есть больше поводов для беспокойства, чем содержимое моей базы данных разработки. Я должен повторить, это только для локального тестирования, не делайте этого с реальными данными.
Показать ещё 2 комментария
13

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

  • 0
    СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'jeffrey' @ 'localhost', ИДЕНТИФИЦИРОВАННОГО 'mypass';
11
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"

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

-2

Приведенная ниже команда будет работать, если вы хотите, чтобы новый пользователь дал ему доступ ко всей базе данных (не все базы данных в вашем Mysql) на вашем локальном хосте.

GRANT ALL PRIVILEGES ON test_database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Это предоставит всем привилегиям одну базу данных test_database (в вашем случае dbTest) этому пользователю на localhost.

Проверьте, какие права выданы вышеприведенной команде для этого пользователя, выполнив приведенную ниже команду.

SHOW GRANTS FOR 'user'@'localhost'

На всякий случай, если вы хотите ограничить доступ пользователя только к одной отдельной таблице

GRANT ALL ON mydb.table_name TO 'someuser'@'host';
  • 0
    Синтаксическая ошибка и опечатка в первой строке, "PRIVILEGES ON 'test_datase'" не должна содержать кавычек, после нее должна стоять буква ". *", Например, test_datase. *, И является опечаткой, должна быть "test_database ».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню