Câu lệnh GRANT
trong MySQL được sử dụng để cấp quyền cho người dùng hoặc nhóm người dùng trên các đối tượng như cơ sở dữ liệu, bảng, cột, thủ tục, hàm, hoặc trên toàn bộ hệ thống. Việc quản lý quyền sử dụng người dùng là rất quan trọng trong MySQL để bảo mật và phân quyền rõ ràng.
Dưới đây là hướng dẫn chi tiết về câu lệnh GRANT
trong MySQL, bao gồm các trường hợp từ cơ bản đến nâng cao.
quyền
Câu lệnh trên sẽ cấp tất cả các quyền cho người dùng user1
để thực hiện bất kỳ thao tác nào trên tất cả các cơ sở dữ liệu từ bất kỳ máy chủ nào.
Để cấp quyền SELECT
, INSERT
, và UPDATE
cho người dùng user2
chỉ trên cơ sở dữ liệu shop
:
user2
Người dùng user3
sẽ chỉ có thể đọc và xóa dữ liệu trong bảng employees
của cơ sở dữ liệu company
.
Bạn cũng có thể cấp quyền chỉ trên một hoặc nhiều cột trong bảng.
Cấp quyền SELECT
cho người dùng user4
chỉ trên cột first_name
và last_name
của bảng customers
:
user4
Người dùng user5
sẽ có quyền thực thi tất cả các thủ tục lưu trữ và hàm trong cơ sở dữ liệu finance
.
Sử dụng WITH GRANT OPTION
để cho phép người dùng được cấp quyền có thể cấp lại quyền đó cho người dùng khác.
Cấp tất cả các quyền cho người dùng admin
và cho phép họ cấp quyền lại cho người dùng khác:
admin
Người dùng user6
sẽ chỉ có thể đọc dữ liệu khi họ kết nối từ địa chỉ IP 192.168.1.100
.
Để xem quyền của một người dùng cụ thể, bạn có thể sử dụng câu lệnh:
user7
Kết quả sẽ hiển thị tất cả các quyền mà người dùng user7
đã được cấp.
Nếu bạn muốn thu hồi các quyền đã cấp, bạn có thể sử dụng câu lệnh REVOKE
.
Thu hồi quyền SELECT
từ người dùng user7
trên cơ sở dữ liệu sales
:
SELECT
GRANT
là câu lệnh được sử dụng để cấp quyền cho người dùng hoặc nhóm người dùng trong MySQL.WITH GRANT OPTION
cho phép người dùng cấp quyền cho người dùng khác.REVOKE
.Với những thông tin trên, bạn có thể quản lý và phân quyền người dùng trong MySQL một cách chi tiết và hiệu quả.
Các ví dụ cấp quyền nâng cao sẽ tập trung vào việc kiểm soát chi tiết và chuyên sâu hơn, bao gồm việc cấp quyền trên nhiều cấp độ đối tượng khác nhau, phân quyền cho cột và điều khiển truy cập nâng cao.
Bạn có thể cấp quyền cho một người dùng chỉ trên một số bảng cụ thể trong một cơ sở dữ liệu. Ví dụ, nếu bạn muốn cấp quyền SELECT
và INSERT
cho người dùng user1
chỉ trên bảng employees
và departments
trong cơ sở dữ liệu
user1
Người dùng user2
sẽ chỉ có thể xem dữ liệu từ các cột first_name
và last_name
, không có quyền truy cập vào các cột khác trong bảng employees
.
Trong trường hợp bạn muốn cấp quyền cho người dùng thực hiện các thủ tục lưu trữ (stored procedures) hoặc hàm (functions), bạn cần cấp quyền EXECUTE
.
Cấp quyền EXECUTE
cho người dùng user3
trên tất cả các thủ tục và hàm trong cơ sở dữ liệu sales
:
user3
Người dùng admin1
không chỉ có toàn bộ quyền trên cơ sở dữ liệu company
mà còn có thể cấp các quyền này cho những người dùng khác.
Bạn có thể hạn chế quyền của người dùng chỉ từ một địa chỉ IP hoặc dải địa chỉ IP nhất định. Điều này giúp tăng cường bảo mật, chỉ cho phép truy cập từ những địa chỉ cụ thể.
Cấp quyền SELECT
cho người dùng user4
chỉ khi họ truy cập từ địa chỉ IP 192.168.1.50
:
user4
user5
Người dùng user6
chỉ có thể đọc dữ liệu từ tất cả các bảng trong cơ sở dữ liệu inventory
, mà không có quyền sửa đổi.
Bạn có thể thu hồi các quyền đã cấp cho một người dùng bằng cách sử dụng câu lệnh REVOKE
.
Thu hồi quyền INSERT
của người dùng user7
trên bảng orders
trong cơ sở dữ liệu shop
:
user7
Người dùng user8
sẽ chỉ có thể truy cập dữ liệu nếu họ sử dụng kết nối bảo mật SSL.
Bạn có thể giới hạn quyền của người dùng trong một khoảng thời gian cụ thể bằng cách sử dụng lệnh CREATE USER
với các tùy chọn giới hạn thời gian truy cập.
CREATE USER 'temp_user'@'localhost' IDENTIFIED BY 'password' WITH MAX_CONNECTIONS_PER_HOUR 500; GRANT ALL PRIVILEGES ON project_db.* TO 'temp_user'@'localhost';
Người dùng temp_user
sẽ có quyền truy cập đầy đủ vào cơ sở dữ liệu project_db
, nhưng bị giới hạn số kết nối tối đa mỗi giờ là 500, và có thể kết nối trong thời gian quy định.