Ngày đăng: 28 tháng 6 năm 2023
MySQL là một hệ thống quản lý cơ sở dữ liệu quan hệ mã nguồn mở. Nó thường được triển khai như một phần của ngăn xếp LAMP (viết tắt của Linux, Apache, MySQL và PHP) và, tính đến thời điểm viết bài này, là cơ sở dữ liệu nguồn mở phổ biến nhất trên thế giới.
Hướng dẫn này phác thảo cách tạo người dùng MySQL mới và cấp cho họ các quyền cần thiết để thực hiện nhiều hành động khác nhau.
Để làm theo hướng dẫn này, bạn sẽ cần quyền truy cập vào cơ sở dữ liệu MySQL. Hướng dẫn này giả định rằng cơ sở dữ liệu này được cài đặt trên một máy chủ riêng ảo chạy Ubuntu 20.04, mặc dù các nguyên tắc mà nó phác thảo sẽ được áp dụng bất kể bạn truy cập cơ sở dữ liệu của mình như thế nào.
Nếu bạn không có quyền truy cập vào cơ sở dữ liệu MySQL và muốn tự thiết lập một cơ sở dữ liệu, bạn có thể làm theo một trong các hướng dẫn của chúng tôi về Cách cài đặt MySQL. Một lần nữa, bất kể hệ điều hành cơ bản của máy chủ của bạn là gì, các phương pháp để tạo người dùng MySQL mới và cấp quyền cho họ nhìn chung sẽ giống nhau.
Ngoài ra, bạn có thể tạo cơ sở dữ liệu MySQL do nhà cung cấp đám mây quản lý.
Xin lưu ý rằng bất kỳ phần nào của các lệnh ví dụ mà bạn cần thay đổi hoặc tùy chỉnh sẽ được đánh dấu như thế này
trong suốt hướng dẫn này.
Sau khi cài đặt, MySQL tạo một tài khoản root user mà bạn có thể sử dụng để quản lý cơ sở dữ liệu của mình. Người dùng này có toàn quyền đối với máy chủ MySQL, nghĩa là nó có toàn quyền kiểm soát mọi cơ sở dữ liệu, bảng, người dùng, v.v. Do đó, tốt nhất bạn nên tránh sử dụng tài khoản này ngoài các chức năng quản trị. Bước này phác thảo cách sử dụng root MySQL user để tạo tài khoản người dùng mới và cấp cho nó các đặc quyền.
Trong các hệ thống Ubuntu chạy MySQL 5.7 (và các phiên bản mới hơn), root MySQL user được đặt để xác thực bằng cách sử dụng plugin auth_socket
theo mặc định thay vì bằng mật khẩu. Plugin này yêu cầu tên của operating system user phải invoke (gọi) MySQL client phải khớp với tên của người dùng MySQL được chỉ định trong lệnh. Điều này có nghĩa là bạn cần đặt lệnh sudo
trước lệnh mysql
để gọi nó với các đặc quyền của root Ubuntu user để có quyền truy cập vào root MySQL user:
- sudo mysql
Lưu ý: Nếu root MySQL user của bạn được định cấu hình để xác thực bằng mật khẩu, bạn sẽ cần sử dụng một lệnh khác để truy cập MySQL shell. Phần sau đây sẽ chạy MySQL client của bạn với các đặc quyền của người dùng thông thường và bạn sẽ chỉ nhận được các đặc quyền của quản trị viên trong cơ sở dữ liệu bằng cách xác thực bằng mật khẩu chính xác:
- mysql -u root -p
Khi bạn có quyền truy cập vào MySQL prompt, bạn có thể tạo người dùng mới bằng câu lệnh CREATE USER
. Chúng tuân theo cú pháp chung này:
- CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';
Sau khi CREATE USER
, bạn chỉ định tên người dùng. Ngay sau đó là ký hiệu @
và sau đó là tên máy chủ mà người dùng này sẽ kết nối. Nếu bạn chỉ định truy cập cục bộ người dùng này từ máy chủ Ubuntu của mình, bạn có thể chỉ định localhost
. Việc gói cả tên người dùng và máy chủ lưu trữ trong dấu nháy đơn không phải lúc nào cũng cần thiết, nhưng làm như vậy có thể giúp ngăn ngừa lỗi.
Bạn có một số tùy chọn khi chọn plugin xác thực người dùng của mình. Plugin auth_socket
được đề cập trước đây có thể thuận tiện vì nó cung cấp khả năng bảo mật mạnh mẽ mà không yêu cầu người dùng hợp lệ nhập mật khẩu để truy cập cơ sở dữ liệu. Nhưng nó cũng ngăn chặn các kết nối từ xa, điều này có thể làm phức tạp mọi thứ khi các chương trình bên ngoài cần tương tác với MySQL.
Thay vào đó, bạn có thể loại bỏ hoàn toàn phần WITH authentication_plugin
của cú pháp để người dùng xác thực bằng plugin mặc định của MySQL, caching_sha2_password
. Tài liệu MySQL đề xuất plugin này cho những người dùng muốn đăng nhập bằng mật khẩu do các tính năng bảo mật mạnh mẽ của nó.
Chạy lệnh dưới đây để tạo người dùng xác thực bằng caching_sha2_password
. Đảm bảo thay đổi sammy
thành tên người dùng và password
ưa thích của bạn thành mật khẩu mạnh do bạn chọn:
- CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
Lưu ý: Có một sự cố đã biết với một số phiên bản PHP gây ra sự cố với caching_sha2_password
. Nếu bạn dự định sử dụng cơ sở dữ liệu này với một ứng dụng PHP — chẳng hạn như phpMyAdmin — bạn có thể tạo một người dùng sẽ xác thực với plugin mysql_native_password
cũ hơn, mặc dù vẫn an toàn, thay vào đó:
- CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Nếu bạn không chắc chắn, bạn luôn có thể tạo một người dùng xác thực bằng caching_sha2_plugin
và sau đó ALTER
nó sau bằng lệnh này:
- ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Sau khi tạo người dùng mới, bạn có thể cấp cho họ các đặc quyền thích hợp.
Cú pháp chung để cấp quyền cho người dùng như sau:
- GRANT PRIVILEGE ON database.table TO 'username'@'host';
Giá trị PRIVILEGE
trong cú pháp ví dụ này xác định những hành động mà người dùng được phép thực hiện trên database
và table
đã chỉ định. Bạn có thể cấp nhiều đặc quyền cho cùng một người dùng trong một lệnh bằng cách phân tách từng đặc quyền bằng dấu phẩy. Bạn cũng có thể cấp đặc quyền cho người dùng trên toàn cầu bằng cách nhập dấu hoa thị (*
) thay cho tên cơ sở dữ liệu và tên bảng. Trong SQL, dấu hoa thị là các ký tự đặc biệt được sử dụng để biểu thị "all" cơ sở dữ liệu hoặc bảng.
Để minh họa, lệnh dưới đây cấp cho người dùng các đặc quyền toàn cầu để CREATE
, ALTER
và DROP
cơ sở dữ liệu, bảng và người dùng, cũng như quyền INSERT
, UPDATE
và DELETE
dữ liệu từ bất kỳ bảng nào trên máy chủ. Nó cũng cấp cho người dùng khả năng truy vấn dữ liệu bằng SELECT
, tạo khóa ngoại (foreign keys) bằng từ khóa REFERENCES
và thực hiện các thao tác FLUSH
với đặc quyền RELOAD
. Tuy nhiên, bạn chỉ nên cấp cho người dùng những quyền mà họ cần, vì vậy, vui lòng điều chỉnh các đặc quyền của người dùng của riêng bạn nếu cần.
Bạn có thể tìm thấy danh sách đầy đủ các đặc quyền có sẵn trong tài liệu MySQL chính thức.
Chạy câu lệnh GRANT
này, thay thế sammy
bằng tên người dùng MySQL của riêng bạn, để cấp các đặc quyền này cho người dùng của bạn:
- GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
Lưu ý rằng tuyên bố này cũng bao gồm WITH GRANT OPTION
. Điều này sẽ cho phép người dùng MySQL của bạn cấp bất kỳ quyền nào mà họ có cho những người dùng khác trên hệ thống.
Cảnh báo: Một số người dùng có thể muốn cấp cho người dùng MySQL của họ đặc quyền ALL PRIVILEGES
, điều này sẽ cung cấp cho họ các đặc quyền siêu người dùng rộng rãi giống như các đặc quyền của root user, như sau:
- GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
Không nên cấp những đặc quyền rộng rãi như vậy một cách hời hợt, vì bất kỳ ai có quyền truy cập vào người dùng MySQL này sẽ có toàn quyền kiểm soát mọi cơ sở dữ liệu trên máy chủ.
Nhiều hướng dẫn đề xuất chạy lệnh FLUSH PRIVILEGES
ngay sau câu lệnh CREATE USER
hoặc GRANT
để tải lại các bảng cấp nhằm đảm bảo rằng các đặc quyền mới có hiệu lực:
- FLUSH PRIVILEGES;
Tuy nhiên, theo tài liệu chính thức của MySQL, khi bạn sửa đổi gián tiếp các bảng cấp bằng một câu lệnh quản lý tài khoản như GRANT
, cơ sở dữ liệu sẽ tải lại các bảng cấp ngay lập tức vào bộ nhớ, nghĩa là lệnh FLUSH PRIVILEGES
không cần thiết trong trường hợp của chúng tôi. Mặt khác, việc chạy nó sẽ không có bất kỳ tác động tiêu cực nào đến hệ thống.
Nếu bạn cần thu hồi quyền, cấu trúc gần giống với việc cấp quyền:
- REVOKE type_of_permission ON database_name.table_name FROM 'username'@'host';
Lưu ý rằng khi thu hồi quyền, cú pháp yêu cầu bạn sử dụng FROM
, thay vì TO
mà bạn đã sử dụng khi cấp quyền.
Bạn có thể xem lại các quyền hiện tại của người dùng bằng cách chạy lệnh SHOW GRANTS
:
- SHOW GRANTS FOR 'username'@'host';
Giống như bạn có thể xóa cơ sở dữ liệu bằng DROP
, bạn có thể sử dụng DROP
để xóa người dùng:
- DROP USER 'username'@'localhost';
Sau khi tạo người dùng MySQL của bạn và cấp cho họ các đặc quyền, bạn có thể thoát khỏi MySQL client:
- exit
Trong tương lai, để đăng nhập với tư cách người dùng MySQL mới của bạn, bạn sẽ sử dụng một lệnh như sau:
- mysql -u sammy -p
Cờ -p
sẽ khiến MySQL client nhắc bạn nhập mật khẩu người dùng MySQL của bạn để xác thực.
Bằng cách làm theo hướng dẫn này, bạn đã học cách thêm người dùng mới và cấp cho họ nhiều quyền khác nhau trong cơ sở dữ liệu MySQL. Từ đây, bạn có thể tiếp tục khám phá và thử nghiệm các cài đặt quyền khác nhau cho người dùng MySQL của mình hoặc bạn có thể muốn tìm hiểu thêm về một số cấu hình MySQL cấp cao hơn.
Để biết thêm thông tin về những điều cơ bản của MySQL, bạn có thể xem các hướng dẫn sau: