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