Відповіді:
Спробуйте це створити користувача:
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'
- "user" - це ім'я користувача облікового запису користувача, який ви створюєте. Примітка. У вас повинні бути єдині лапки. 'ім'я хоста' повідомляє 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, перевірте: Як запобігти появі команд у історії башів?
~/.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) у вашому localhost.
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';
Якщо host
частина опущена, вона за замовчуванням використовується символом підстановки %
, дозволяючи всім хостам.
CREATE USER 'service-api';
GRANT ALL PRIVILEGES ON the_db.* TO 'service-api' IDENTIFIED BY 'the_password'
SELECT * FROM mysql.user;
SHOW GRANTS FOR 'service-api'