Câu trả lời:
Hãy thử điều này để tạo người dùng:
CREATE USER 'user'@'hostname';
Hãy thử điều này để cung cấp cho nó quyền truy cập vào cơ sở dữ liệu dbTest
:
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
Nếu bạn đang chạy mã / trang web truy cập MySQL trên cùng một máy, tên máy chủ sẽ là localhost.
Bây giờ, sự đổ vỡ.
GRANT
- Đây là lệnh được sử dụng để tạo người dùng và cấp quyền cho cơ sở dữ liệu, bảng, v.v.
ALL PRIVILEGES
- Điều này cho nó biết người dùng sẽ có tất cả các đặc quyền tiêu chuẩn. Tuy nhiên, điều này không bao gồm đặc quyền sử dụng lệnh GRANT.
dbtest.*
- Hướng dẫn này MySQL áp dụng các quyền này để sử dụng trong toàn bộ cơ sở dữ liệu dbtest. Bạn có thể thay thế * bằng tên bảng cụ thể hoặc lưu các thói quen nếu bạn muốn.
TO 'user'@'hostname'
- 'người dùng' là tên người dùng của tài khoản người dùng bạn đang tạo. Lưu ý: Bạn phải có dấu ngoặc đơn trong đó. 'tên máy chủ' cho MySQL biết máy chủ nào người dùng có thể kết nối từ đó. Nếu bạn chỉ muốn nó từ cùng một máy, hãy sử dụnglocalhost
IDENTIFIED BY 'password'
- Như bạn đã đoán, điều này đặt mật khẩu cho người dùng đó.
Để tạo người dùng trong MySQL / MariaDB 5.7.6 trở lên, hãy sử dụng CREATE USER
cú pháp :
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';
sau đó để cấp tất cả quyền truy cập vào cơ sở dữ liệu (ví dụ my_db
), sử dụng GRANT
Cú pháp , ví dụ:
GRANT ALL ON my_db.* TO 'new_user'@'localhost';
Nơi ALL
( priv_type ) có thể được thay thế bằng cụ đặc quyền như SELECT
, INSERT
, UPDATE
, ALTER
vv
Sau đó, để tải lại quyền mới được chỉ định chạy:
FLUSH PRIVILEGES;
Để chạy các lệnh trên, bạn cần chạy mysql
lệnh và nhập chúng vào dấu nhắc, sau đó đăng xuất bằng quit
lệnh hoặc Ctrl- D.
Để chạy từ shell, sử dụng -e
tham số (thay thế SELECT 1
bằng một trong các lệnh trên):
$ mysql -e "SELECT 1"
hoặc in câu lệnh từ đầu vào tiêu chuẩn:
$ echo "FOO STATEMENT" | mysql
Nếu bạn có quyền truy cập bị từ chối ở trên, hãy chỉ định tham số -u
(cho người dùng) và -p
(cho mật khẩu) hoặc để truy cập dài hạn, hãy đặt thông tin đăng nhập của bạn ~/.my.cnf
, vd
[client]
user=root
password=root
Đối với những người không quen thuộc với cú pháp MySQL, đây là các hàm shell tiện dụng, dễ nhớ và dễ sử dụng (để sử dụng chúng, bạn cần tải các hàm shell đi kèm xuống).
Đây là ví dụ:
$ 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
Để sử dụng các lệnh trên, bạn cần sao chép và dán các chức năng sau vào tệp RC của mình (ví dụ .bash_profile
) và tải lại trình bao của bạn hoặc nguồn tệp. Trong trường hợp này chỉ cần gõ 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'"
}
Lưu ý: Nếu bạn không muốn để lại dấu vết (như mật khẩu) trong lịch sử Bash của mình, hãy kiểm tra: Làm thế nào để ngăn các lệnh hiển thị trong lịch sử bash?
~/.my.cnf
như được đề xuất ở trên.
Đăng nhập vào MySQL:
mysql -u root
Bây giờ tạo và cấp
GRANT ALL PRIVILEGES ON dbTest.* To 'user'@'hostname' IDENTIFIED BY 'password';
Cách khác, nếu bạn chỉ muốn cấp quyền truy cập đầy đủ không hạn chế vào cơ sở dữ liệu (ví dụ: trên máy cục bộ của bạn để lấy ví dụ kiểm tra, bạn có thể cấp quyền truy cập cho người dùng ẩn danh, như vậy:
GRANT ALL PRIVILEGES ON dbTest.* To ''@'hostname'
Điều này là tốt cho dữ liệu rác trong phát triển. Đừng làm điều này với bất cứ điều gì bạn quan tâm.
$ mysql -u root -p -e "grant all privileges on dbTest.* to
`{user}`@`{host}` identified by '{long-password}'; flush privileges;"
bỏ qua tùy chọn -p , nếu người dùng mysql không có mật khẩu hoặc chỉ cần nhấn nút "[Enter]" để bỏ qua. chuỗi được bao quanh bằng dấu ngoặc nhọn cần được thay thế bằng giá trị thực.
Bạn có thể tạo người dùng mới bằng cách sử dụng câu lệnh CREATE USER và trao quyền cho họ bằng GRANT .
Đối với tôi điều này đã làm việc.
CREATE USER 'spowner'@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON test.* To 'spowner'@'localhost';
FLUSH PRIVILEGES;
Ở đâu
Lệnh dưới đây sẽ hoạt động nếu bạn muốn tạo một người dùng mới cung cấp cho anh ta tất cả quyền truy cập vào một cơ sở dữ liệu cụ thể (không phải tất cả các cơ sở dữ liệu trong Mysql của bạn) trên localhost của bạn.
GRANT ALL PRIVILEGES ON test_database.* TO 'user'@'localhost' IDENTIFIED BY 'password';
Điều này sẽ cấp tất cả các đặc quyền cho một cơ sở dữ liệu test_database
(trong trường hợp của bạn dbTest
) cho người dùng đó trên localhost.
Kiểm tra những quyền mà lệnh trên đã cấp cho người dùng đó bằng cách chạy lệnh bên dưới.
SHOW GRANTS FOR 'user'@'localhost'
Chỉ trong trường hợp, nếu bạn muốn giới hạn quyền truy cập của người dùng chỉ vào một bảng duy nhất
GRANT ALL ON mydb.table_name TO 'someuser'@'host';