Quản lý đặc quyền là một phần quan trọng của hệ thống và. Quyết định ai sẽ có quyền truy cập vào thành phần và quyền hạn nào, sau đó thiết kế một triển khai cho phép các chính sách đó đòi hỏi phải suy nghĩ và cẩn thận
MySQL có một hệ thống gán đặc quyền mạnh mẽ cho phép bạn triển khai các chính sách truy cập trên toàn bộ hệ thống cơ sở dữ liệu của mình. Trong hướng dẫn này, chúng tôi sẽ nói về cách sử dụng các lệnh
0 và
SHOW GRANTS FOR ''@'';
1 để thêm và xóa các đặc quyền khỏi tài khoản người dùng MySQL và triển khai các chính sách truy cập phù hợp với yêu cầu của bạn
SHOW GRANTS FOR ''@'';
điều kiện tiên quyết
Để làm theo hướng dẫn này, bạn sẽ cần có một tài khoản trên máy chủ MySQL với các đặc quyền thích hợp
Các lệnh chúng ta sẽ sử dụng
Các lệnh quan trọng nhất mà chúng tôi sẽ sử dụng trong hướng dẫn này là các lệnh
0 và
SHOW GRANTS FOR ''@'';
1
SHOW GRANTS FOR ''@'';
0. sử dụng để gán đặc quyền mới cho tài khoản người dùng
SHOW GRANTS FOR ''@'';
1. sử dụng để xóa các đặc quyền hiện có khỏi tài khoản người dùng
SHOW GRANTS FOR ''@'';
đặc quyền bắt buộc
Để quản lý các đặc quyền cho người dùng MySQL, bạn cần có các đặc quyền sau
6. đặc quyền
SHOW GRANTS FOR ''@'';
6 cho phép bạn cấp hoặc thu hồi bất kỳ đặc quyền nào mà bạn đã được cấp
SHOW GRANTS FOR ''@'';
- bất kỳ đặc quyền nào bạn muốn gán cho người dùng khác
8 trên
SHOW GRANTS FOR ''@'';
9. được sử dụng để thực hiện
SHOW GRANTS FOR ''@'';
0 cho các tài khoản khác
GRANT ON . TO ''@'';
Để làm theo hướng dẫn này, chúng tôi sẽ giả định rằng bạn đang sử dụng tài khoản có đầy đủ đặc quyền quản trị [bao gồm đặc quyền
6]. Đây có thể là người dùng chung
SHOW GRANTS FOR ''@'';
2 được định cấu hình trong quá trình cài đặt hoặc bất kỳ người dùng nào khác có đầy đủ đặc quyền
GRANT ON . TO ''@'';
Đặc quyền hoạt động như thế nào trong MySQL?
Trong MySQL, hệ thống đặc quyền xác định xem người dùng có thể thực thi một lệnh nhất định hay không
Mỗi khi máy khách cố gắng thực hiện một hành động, MySQL sẽ tham khảo thông tin của nó về các đặc quyền của người dùng để xác định xem nó có được phép hay không. Nếu người dùng đã được cấp tất cả các đặc quyền cần thiết để thực hiện hành động, MySQL sẽ thực thi các câu lệnh. Nếu người dùng thiếu bất kỳ đặc quyền nào được yêu cầu, sẽ xảy ra lỗi
MySQL lưu trữ thông tin về người dùng nào có đặc quyền gì trong một số bảng khác nhau trong cơ sở dữ liệu hệ thống
3. Dưới đây là bài đánh giá nơi MySQL lưu giữ các loại thông tin đặc quyền khác nhau như đã được trình bày trong phần giới thiệu về bài viết ủy quyền và xác thực MySQL
GRANT ON . TO ''@'';
4. Bảng
GRANT ON . TO ''@'';
4 xác định các đặc quyền toàn cầu tĩnh của mỗi người dùng. Các đặc quyền này áp dụng cho toàn bộ máy chủ MySQL và không bị ảnh hưởng bởi tính khả dụng của bất kỳ plugin hoặc thành phần nào
GRANT ON . TO ''@'';
6. Bảng
GRANT ON . TO ''@'';
6 xác định các đặc quyền toàn cầu động của mỗi người dùng. Bất kỳ đặc quyền nào được xác định bởi plugin hoặc thành phần đều được đăng ký trong bảng này
GRANT ON . TO ''@'';
8. Bảng
GRANT ON . TO ''@'';
8 xác định các đặc quyền cấp cơ sở dữ liệu. Bảng
GRANT ON . TO ''@'';
8 khớp với các giá trị
GRANT ON . TO ''@'';
1 và
GRANT SELECT ON *.* TO 'sally'@'localhost';
2 của người dùng giống như bảng
GRANT SELECT ON *.* TO 'sally'@'localhost';
4 nhưng cũng có một cột có tên là
GRANT ON . TO ''@'';
4 xác định phạm vi cơ sở dữ liệu cho hàng
GRANT SELECT ON *.* TO 'sally'@'localhost';
5. Bảng
GRANT SELECT ON *.* TO 'sally'@'localhost';
5 xác định các đặc quyền cấp bảng theo cách tương tự mà bảng
GRANT SELECT ON *.* TO 'sally'@'localhost';
8 thực hiện đối với cơ sở dữ liệu. Để kích hoạt phạm vi cấp bảng, một cột có tên là
GRANT ON . TO ''@'';
8 có sẵn ngoài
GRANT SELECT ON *.* TO 'sally'@'localhost';
1,
GRANT SELECT ON *.* TO 'sally'@'localhost';
2 và
GRANT SELECT ON *.* TO 'sally'@'localhost';
4
GRANT SELECT ON *.* TO 'sally'@'localhost';
2. Xa hơn một bước so với bảng
GRANT SELECT ON accounting.* TO 'meredith'@'localhost';
5, bảng
GRANT SELECT ON *.* TO 'sally'@'localhost';
2 xác định quyền truy cập ở cấp độ cột. Để thêm mức độ chi tiết bổ sung này, một cột có tên là
GRANT SELECT ON accounting.* TO 'meredith'@'localhost';
5 được đưa vào ngoài các cột có sẵn trong bảng
GRANT SELECT ON accounting.* TO 'meredith'@'localhost';
5
GRANT SELECT ON *.* TO 'sally'@'localhost';
7. Bảng
GRANT SELECT ON accounting.* TO 'meredith'@'localhost';
7 định nghĩa các đặc quyền để thực thi các thủ tục và chức năng. Nó sử dụng các cột
GRANT SELECT ON accounting.* TO 'meredith'@'localhost';
1,
GRANT SELECT ON *.* TO 'sally'@'localhost';
2,
GRANT SELECT ON *.* TO 'sally'@'localhost';
4,
GRANT SELECT ON *.* TO 'sally'@'localhost';
2 và
GRANT UPDATE ON accounting.revenue TO 'frank'@'localhost';
3 để xác định phạm vi đặc quyền của người dùng đối với các loại quy trình khác nhau
GRANT UPDATE ON accounting.revenue TO 'frank'@'localhost';
4. Bảng
GRANT UPDATE ON accounting.revenue TO 'frank'@'localhost';
4 xác định đặc quyền ủy quyền của người dùng. Ủy quyền cho phép một người dùng hành động như một người dùng khác, kế thừa các đặc quyền của họ. Bảng
GRANT UPDATE ON accounting.revenue TO 'frank'@'localhost';
4 sử dụng các cột
GRANT UPDATE ON accounting.revenue TO 'frank'@'localhost';
1 và
GRANT SELECT ON *.* TO 'sally'@'localhost';
2 để đối sánh một người dùng và sau đó sử dụng các cột riêng biệt có tên là
GRANT SELECT ON *.* TO 'sally'@'localhost';
9 và
GRANT UPDATE ON accounting.revenue TO 'frank'@'localhost';
0 để xác định người dùng phù hợp có thể hành động như thế nào
GRANT UPDATE [due_by] ON library.loans TO 'autorenew'@'localhost';
Những đặc quyền nào có sẵn trong MySQL?
MySQL định nghĩa nhiều đặc quyền phù hợp với các phạm vi hệ thống khác nhau. Một số trong số này hữu ích cho việc sử dụng hàng ngày và quản lý cơ sở dữ liệu, bảng và chức năng, trong khi một số khác được thiết kế cho các tác vụ quản trị như , sao lưu và quản lý kết nối
Bạn có thể tìm thấy danh sách đầy đủ các đặc quyền tĩnh [đặc quyền cốt lõi được tích hợp trong chính MySQL] và phạm vi tương ứng của chúng trong tài liệu về MySQL. Tài liệu liên quan đến MySQL cung cấp tổng quan chi tiết về những gì mỗi đặc quyền cho phép và trong nhiều trường hợp, hướng dẫn về tình huống nào chúng sẽ hữu ích nhất
Đặc quyền động là loại đặc quyền khác. Đặc quyền động được xác định trong plugin hoặc thành phần và được đăng ký với MySQL để kích hoạt chúng. Chúng luôn có phạm vi toàn cầu và cung cấp các khả năng hoặc tính năng bổ sung. Tài liệu MySQL liệt kê từng đặc quyền động và ngữ cảnh của nó. Bạn có thể tìm thấy các mô tả đầy đủ về những gì từng được sử dụng trong phần liên kết của tài liệu MySQL
Để tìm hiểu những đặc quyền nào được bật và có sẵn trên máy chủ MySQL của bạn, cũng như bối cảnh mà chúng có liên quan, bạn có thể sử dụng lệnh sau
SHOW PRIVILEGES
Điều này có thể giúp bạn hiểu những đặc quyền nào phù hợp nhất với trách nhiệm của người dùng
Làm thế nào để bạn thấy những đặc quyền mà một tài khoản có?
Bây giờ chúng ta đã xem xét cách thức hoạt động của các đặc quyền trong MySQL và những đặc quyền nào khả dụng, làm thế nào để bạn tìm ra những đặc quyền nào đã được cấp cho mỗi tài khoản?
Bạn luôn có thể xem các đặc quyền được cấp cho người dùng của mình bằng cách nhập
SHOW GRANTS;
+--------------------------------------------------------------------+
Grants for exampleuser@localhost |
+--------------------------------------------------------------------+
GRANT USAGE ON *.* TO `exampleuser`@`localhost` |
GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |
+--------------------------------------------------------------------+
2 rows in set [0.00 sec]
Ở đây, chúng ta thấy rằng
5 có hai nhóm đặc quyền được xác định. Mục nhập đầu tiên cho thấy rằng nó đã được cấp
GRANT UPDATE [due_by] ON library.loans TO 'autorenew'@'localhost';
6 trên toàn cầu [được biểu thị bằng ký tự đại diện
GRANT UPDATE [due_by] ON library.loans TO 'autorenew'@'localhost';
7 phạm vi của
GRANT UPDATE [due_by] ON library.loans TO 'autorenew'@'localhost';
8]. Mặc dù tên của nó,
GRANT UPDATE [due_by] ON library.loans TO 'autorenew'@'localhost';
6 trong ngữ cảnh này thực sự có nghĩa là "không có đặc quyền nào được cấp". Vì vậy, theo mặc định, người dùng này không được cấp bất kỳ đặc quyền nào. Hồ sơ thứ hai cho thấy rằng họ đã được cấp quyền truy cập
GRANT UPDATE [due_by] ON library.loans TO 'autorenew'@'localhost';
0 hoặc hoàn toàn vào cơ sở dữ liệu
GRANT SELECT,INSERT,UPDATE,DELETE ON library.* TO 'librarymanager'@'localhost' WITH GRANT OPTION;
1
GRANT SELECT,INSERT,UPDATE,DELETE ON library.* TO 'librarymanager'@'localhost' WITH GRANT OPTION;
Nếu tài khoản người dùng mà bạn đã đăng nhập có đặc quyền
8 trên cơ sở dữ liệu
SHOW GRANTS FOR ''@'';
3 nội bộ, bạn có thể xem các đặc quyền được cấp cho các tài khoản người dùng khác. Để hiển thị các đặc quyền của các tài khoản khác, hãy sử dụng định dạng sau
GRANT ON . TO ''@'';
SHOW GRANTS FOR ''@'';
Đầu ra sẽ hiển thị các đặc quyền của tài khoản được cung cấp
Bạn sử dụng lệnh
0 như thế nào?
SHOW GRANTS FOR ''@'';
Lệnh to
0 được sử dụng để gán các đặc quyền mới cho một tài khoản. Đây là cách chính để thêm quyền truy cập vào tài khoản người dùng vào cơ sở dữ liệu, đối tượng hoặc hành động mà trước đây họ không có. Bất cứ khi nào bạn muốn cung cấp quyền truy cập bổ sung vào tài khoản người dùng, lệnh
SHOW GRANTS FOR ''@'';
0 có thể giúp
SHOW GRANTS FOR ''@'';
Cú pháp cơ bản
Cú pháp cơ bản của lệnh
0 để gán đặc quyền khá đơn giản. Nó tuân theo định dạng này
SHOW GRANTS FOR ''@'';
GRANT ON . TO ''@'';
Có thể cung cấp nhiều đặc quyền, được phân tách bằng dấu phẩy
Nhắm mục tiêu cơ sở dữ liệu, bảng, cột, v.v.
Phần
8 của cú pháp trên quy định phạm vi mà các đặc quyền sẽ được cấp. Điều này sẽ xác định đối tượng nào sẽ được cấp đặc quyền và bảng cụ thể trong cơ sở dữ liệu
GRANT SELECT,INSERT,UPDATE,DELETE ON library.* TO 'librarymanager'@'localhost' WITH GRANT OPTION;
3 nơi các đặc quyền mới sẽ được ghi lại
GRANT ON . TO ''@'';
Để cấp đặc quyền trên toàn cầu, cho phép tài khoản người dùng sử dụng đặc quyền trong toàn bộ hệ thống, hãy sử dụng ký tự đại diện cho cả cơ sở dữ liệu và phần đối tượng cơ sở dữ liệu của thành phần phạm vi
Ví dụ: để cấp các đặc quyền của
8 trên toàn cầu cho
SHOW GRANTS FOR ''@'';
01, bạn sẽ nhập
SHOW GRANTS;
GRANT SELECT ON *.* TO 'sally'@'localhost';
Để giới hạn phạm vi cấp cho một cơ sở dữ liệu, hãy thay thế ký tự đại diện ở bên trái dấu chấm bằng tên cơ sở dữ liệu
GRANT SELECT ON accounting.* TO 'meredith'@'localhost';
Nếu một tài khoản chỉ cần truy cập vào một bảng duy nhất trong cơ sở dữ liệu, hãy chỉ định tên bảng ở phía bên phải của dấu chấm
GRANT UPDATE ON accounting.revenue TO 'frank'@'localhost';
Cuối cùng, áp dụng đặc quyền cho các cột cụ thể tuân theo một định dạng hơi khác. Khi xác định phạm vi ở cấp độ cột, bạn phải cung cấp các cột mà đặc quyền sẽ áp dụng trong dấu ngoặc đơn sau tên đặc quyền
Ví dụ: để cấp khả năng cập nhật giá trị của cột
02 trong bảng
SHOW GRANTS;
03, bạn có thể nhập
SHOW GRANTS;
GRANT UPDATE [due_by] ON library.loans TO 'autorenew'@'localhost';
Sử dụng mệnh đề
04
SHOW GRANTS;
Một điều khoản bổ sung, được gọi là
04, có thể được thêm vào các câu lệnh cấp phép để cho phép tài khoản người dùng quản lý các khoản cấp phép cho những người dùng khác ở một phạm vi cụ thể. Thay vì chỉ cấp đặc quyền cho người dùng, bạn cũng cấp khả năng cho người dùng đó chuyển bất kỳ đặc quyền nào họ có ở cùng phạm vi cho người dùng khác
SHOW GRANTS;
Ví dụ: ở đây, chúng tôi có thể cấp cho tài khoản
06
SHOW GRANTS;
8,
SHOW GRANTS FOR ''@'';
08,
SHOW GRANTS;
09 và
SHOW GRANTS;
10, cũng như khả năng chuyển các đặc quyền của tài khoản đó trong cơ sở dữ liệu
SHOW GRANTS;
11 cho người dùng khác
SHOW GRANTS;
GRANT SELECT,INSERT,UPDATE,DELETE ON library.* TO 'librarymanager'@'localhost' WITH GRANT OPTION;
Điều quan trọng là phải nhận ra rằng điều khoản
04 áp dụng cho tài khoản [
SHOW GRANTS;
06] và phạm vi [
SHOW GRANTS;
14], chứ không phải các đặc quyền cụ thể trong tuyên bố. Điều này có nghĩa là mặc dù chúng tôi đã chỉ định bốn đặc quyền mới cho tài khoản
SHOW GRANTS;
06 trong tuyên bố này, nhưng
SHOW GRANTS;
04 cho phép nó chuyển bất kỳ đặc quyền nào của nó ở phạm vi
SHOW GRANTS;
14. Vì tài khoản hiện có
SHOW GRANTS;
6 cho phạm vi này, nên nếu chúng tôi cung cấp cho
SHOW GRANTS FOR ''@'';
19 các đặc quyền bổ sung trong tương lai, tài khoản đó cũng sẽ có thể tự động chuyển các đặc quyền đó
SHOW GRANTS;
Mặc dù bạn có thể sử dụng mệnh đề
04 như minh họa ở trên để cho phép tài khoản chuyển các đặc quyền của mình trong khi bạn cấp cho họ các đặc quyền bổ sung, nhưng sẽ rõ ràng hơn nếu bạn tách hai hành động này, như sau
SHOW GRANTS;
0
SHOW GRANTS;
Khi bạn xử lý
6 như một đặc quyền thông thường, bạn cũng có thể kết hợp nó trong danh sách các đặc quyền mà bạn đang chỉ định
SHOW GRANTS FOR ''@'';
1
SHOW GRANTS;
Trong bất kỳ trường hợp nào trong số này, kết quả là tài khoản
06 sẽ có thể cấp bất kỳ đặc quyền nào mà nó sở hữu đối với cơ sở dữ liệu
SHOW GRANTS;
11, hiện tại và trong tương lai, cho những người dùng khác. Điều này làm cho đặc quyền
SHOW GRANTS;
6 trở nên đặc biệt nguy hiểm nếu được chỉ định một cách bất cẩn, vì nó có thể cho phép người dùng cấp cho tài khoản các đặc quyền bổ sung mà quản trị viên không mong muốn
SHOW GRANTS FOR ''@'';
Cấp đặc quyền chung cho tài khoản người dùng
Bây giờ chúng ta đã nói về cách hoạt động của việc cấp đặc quyền nói chung, chúng ta có thể xem qua một số ví dụ về cách gán các đặc quyền chung khác nhau cho tài khoản người dùng
Làm cách nào để bạn cấp cho người dùng quyền truy cập đầy đủ?
Thông thường, bạn muốn chỉ định quyền sở hữu hoàn toàn cho một người dùng cụ thể đối với cơ sở dữ liệu hoặc thành phần cơ sở dữ liệu. Chẳng hạn, cơ sở dữ liệu
25 của bạn có thể có một người dùng cụ thể được chỉ định để quản lý các bảng, hàm và chỉ mục trong
SHOW GRANTS;
Bạn có thể chỉ định toàn bộ đặc quyền cho người dùng ở một phạm vi cụ thể bằng cách sử dụng tốc ký
26 hoặc
SHOW GRANTS;
0
GRANT SELECT,INSERT,UPDATE,DELETE ON library.* TO 'librarymanager'@'localhost' WITH GRANT OPTION;
2
SHOW GRANTS;
Điều này sẽ cấp mọi đặc quyền mà người dùng của bạn có thể gán trên cơ sở dữ liệu
25 cho người dùng
SHOW GRANTS;
29, với một số ngoại lệ quan trọng. Gói đặc quyền
SHOW GRANTS;
0 không bao gồm các đặc quyền
GRANT SELECT,INSERT,UPDATE,DELETE ON library.* TO 'librarymanager'@'localhost' WITH GRANT OPTION;
6 hoặc
SHOW GRANTS FOR ''@'';
32, các đặc quyền này phải được chỉ định riêng. Điều này giúp dễ dàng hơn trong việc gán toàn bộ đặc quyền mà không chuyển qua đặc quyền quản trị đặc quyền và thay thế người dùng
SHOW GRANTS;
Để gán tất cả các đặc quyền ngoại trừ
6 và
SHOW GRANTS FOR ''@'';
32 trên toàn cầu, hãy sử dụng phạm vi
SHOW GRANTS;
8
GRANT UPDATE [due_by] ON library.loans TO 'autorenew'@'localhost';
3
SHOW GRANTS;
Làm cách nào để bạn cấp cho người dùng toàn quyền truy cập bao gồm cả quản trị đặc quyền?
Để chỉ định toàn bộ đặc quyền và cũng cung cấp cho người dùng khả năng chuyển tiếp bất kỳ đặc quyền nào của họ, hãy bao gồm
6 trong câu lệnh. Ví dụ: để cung cấp cho tài khoản
SHOW GRANTS FOR ''@'';
29 từ ví dụ trước khả năng kiểm soát quyền truy cập của người dùng khác vào cơ sở dữ liệu
SHOW GRANTS;
25, thay vào đó, bạn có thể nhập
SHOW GRANTS;
4
SHOW GRANTS;
Sau đó, tài khoản sẽ không chỉ có quyền truy cập đầy đủ vào cơ sở dữ liệu
25, mà còn có thể ra lệnh cho những người dùng khác có thể thực hiện trên cơ sở dữ liệu
SHOW GRANTS;
Logic tương tự này có thể được áp dụng trên toàn cầu bằng cách sử dụng ngữ cảnh
8. Trong trường hợp này, tài khoản đã cho sẽ trở thành người dùng quản trị đầy đủ
GRANT UPDATE [due_by] ON library.loans TO 'autorenew'@'localhost';
5
SHOW GRANTS;
Làm cách nào để bạn cấp cho người dùng quyền truy cập chỉ đọc?
Thông thường, ở cấp độ cơ sở dữ liệu hoặc bảng, bạn sẽ có một số tài khoản cần có khả năng truy cập thông tin nhưng không có khả năng thay đổi cơ sở dữ liệu hoặc đối tượng theo bất kỳ cách nào. Chúng có thể bao gồm các công cụ báo cáo hoặc bất kỳ tình huống nào mà dữ liệu cần có thể truy cập được nhưng không thể sửa đổi, chẳng hạn như với nhiều trang web không tương tác
Đặc quyền
8 là đủ để cung cấp cho người dùng trên cơ sở dữ liệu hoặc đối tượng. Để cung cấp cho người dùng
SHOW GRANTS FOR ''@'';
42 quyền truy cập chỉ đọc vào cơ sở dữ liệu
SHOW GRANTS;
25, hãy nhập
SHOW GRANTS;
6
SHOW GRANTS;
Người dùng này sẽ có thể truy vấn và trích xuất bất kỳ dữ liệu nào họ yêu cầu từ cơ sở dữ liệu
25, nhưng họ không thể thực hiện bất kỳ thay đổi nào
SHOW GRANTS;
Như thường lệ, tương đương toàn cầu sử dụng phạm vi
8
GRANT UPDATE [due_by] ON library.loans TO 'autorenew'@'localhost';
7
SHOW GRANTS;
Làm cách nào để bạn cấp cho người dùng quyền truy cập đọc và ghi?
Người bạn đồng hành điển hình với trường hợp sử dụng chỉ đọc là người dùng cần quyền truy cập đọc và ghi. Loại truy cập này phù hợp với bất kỳ quy trình nào cần quản lý dữ liệu trong cơ sở dữ liệu hoặc đối tượng. Chẳng hạn, một quy trình tạo hoặc chỉnh sửa hồ sơ người dùng trang web sẽ cần cả đọc và
Để gán quyền truy cập đọc và ghi cho người dùng, hãy cấp cho họ các đặc quyền
8,
SHOW GRANTS FOR ''@'';
08,
SHOW GRANTS;
09 và
SHOW GRANTS;
10 trên đối tượng. Ví dụ
SHOW GRANTS;
8
SHOW GRANTS;
Làm cách nào để bạn cấp cho người dùng quyền truy cập chỉ nối thêm?
Một tình huống phổ biến khác là tạo một tài khoản chỉ có thể nối thêm dữ liệu vào bảng hoặc đối tượng khác. Bằng cách này, quy trình luôn có quyền bổ sung đối với đối tượng, nhưng không thể viết lại hoặc sửa đổi các mục đã có. Điều này có thể hữu ích cho việc ghi nhật ký sự kiện chỉ nối thêm hoặc các tình huống trong đó các bản cập nhật thực sự được lưu trữ dưới dạng bản ghi mới để lưu giữ lịch sử
Để cho phép một tài khoản có các đặc quyền chỉ nối thêm vào một đối tượng cơ sở dữ liệu, chỉ cấp cho họ các đặc quyền
8 và
SHOW GRANTS FOR ''@'';
08
SHOW GRANTS;
9
SHOW GRANTS;
Nếu bạn muốn tài khoản có thể cập nhật một số phần nhất định của hồ sơ một cách chọn lọc, bạn có thể cấp thêm cho họ đặc quyền
09 trên các cột thích hợp
SHOW GRANTS;
0
+--------------------------------------------------------------------+
Grants for exampleuser@localhost |
+--------------------------------------------------------------------+
GRANT USAGE ON *.* TO `exampleuser`@`localhost` |
GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |
+--------------------------------------------------------------------+
2 rows in set [0.00 sec]
Bạn sử dụng lệnh
1 như thế nào?
SHOW GRANTS FOR ''@'';
Bây giờ chúng ta đã xem xét lệnh
0, chúng ta cần giới thiệu đối tác của nó,
SHOW GRANTS FOR ''@'';
1. Trong khi lệnh
SHOW GRANTS FOR ''@'';
0 chỉ định các đặc quyền bổ sung cho người dùng ở một phạm vi cụ thể, thì lệnh
SHOW GRANTS FOR ''@'';
1 cho phép bạn xóa các đặc quyền khỏi tài khoản
SHOW GRANTS FOR ''@'';
Cú pháp cơ bản
Lệnh
1 phản ánh lệnh
SHOW GRANTS FOR ''@'';
0 khá chặt chẽ. Ngoài tên lệnh, bạn thu hồi các đặc quyền từ tài khoản thay vì cấp chúng cho tài khoản
SHOW GRANTS FOR ''@'';
Cú pháp cơ bản trông như thế này
1
+--------------------------------------------------------------------+
Grants for exampleuser@localhost |
+--------------------------------------------------------------------+
GRANT USAGE ON *.* TO `exampleuser`@`localhost` |
GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |
+--------------------------------------------------------------------+
2 rows in set [0.00 sec]
Như với
0, nhiều đặc quyền có thể được đặt tên, phân tách bằng dấu phẩy
SHOW GRANTS FOR ''@'';
Nhắm mục tiêu cơ sở dữ liệu, bảng, cột, v.v.
Vì các đặc quyền được gắn với một phạm vi cụ thể [toàn cầu, cơ sở dữ liệu, bảng, v.v. ], lệnh
1 phải chỉ định phạm vi để loại bỏ đặc quyền, giống như bạn làm khi thêm đặc quyền
SHOW GRANTS FOR ''@'';
Để xóa một đặc quyền ở cấp độ toàn cầu, hãy sử dụng ký tự đại diện
8 để khớp với mọi cơ sở dữ liệu và mọi đối tượng cơ sở dữ liệu
GRANT UPDATE [due_by] ON library.loans TO 'autorenew'@'localhost';
2
+--------------------------------------------------------------------+
Grants for exampleuser@localhost |
+--------------------------------------------------------------------+
GRANT USAGE ON *.* TO `exampleuser`@`localhost` |
GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |
+--------------------------------------------------------------------+
2 rows in set [0.00 sec]
Để xóa đặc quyền khỏi cơ sở dữ liệu cụ thể, hãy chỉ định tên cơ sở dữ liệu ở phía bên trái của dấu chấm
3
+--------------------------------------------------------------------+
Grants for exampleuser@localhost |
+--------------------------------------------------------------------+
GRANT USAGE ON *.* TO `exampleuser`@`localhost` |
GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |
+--------------------------------------------------------------------+
2 rows in set [0.00 sec]
Và cuối cùng, để xóa đặc quyền khỏi đối tượng cơ sở dữ liệu, hãy đặt tên cơ sở dữ liệu và tên đối tượng được phân tách bằng dấu chấm
4
+--------------------------------------------------------------------+
Grants for exampleuser@localhost |
+--------------------------------------------------------------------+
GRANT USAGE ON *.* TO `exampleuser`@`localhost` |
GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |
+--------------------------------------------------------------------+
2 rows in set [0.00 sec]
Bạn nên kiểm tra các đặc quyền khả dụng của người dùng sau khi thu hồi để đảm bảo rằng họ vẫn chưa được cấp quyền truy cập không mong muốn thông qua bất kỳ phương tiện nào khác
5
+--------------------------------------------------------------------+
Grants for exampleuser@localhost |
+--------------------------------------------------------------------+
GRANT USAGE ON *.* TO `exampleuser`@`localhost` |
GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |
+--------------------------------------------------------------------+
2 rows in set [0.00 sec]
Sử dụng thu hồi một phần để tinh chỉnh các đặc quyền
Kể từ MySQL 8. 0. 16, thu hồi một phần được hỗ trợ. Điều này có nghĩa là bạn có thể cấp cho một tài khoản các đặc quyền rộng rãi và sau đó loại bỏ có chọn lọc các đặc quyền đó đối với các phạm vi cụ thể
Ví dụ: bạn có thể thiết lập tài khoản có đầy đủ đặc quyền đối với cơ sở dữ liệu ngoại trừ cơ sở dữ liệu
3, được sử dụng để lưu trữ thông tin hệ thống như đặc quyền, chi tiết xác thực, v.v. cho người dùng. Việc thu hồi một phần sẽ cho phép bạn cấp toàn bộ đặc quyền và sau đó thêm một ngoại lệ đặc biệt cho cơ sở dữ liệu đó
GRANT ON . TO ''@'';
Để kích hoạt thu hồi một phần trong MySQL, bạn cần kích hoạt nó. Bạn có thể bật liên tục bằng cách nhập thông tin sau vào các phiên bản được hỗ trợ [MySQL 8. 0. 16 trở lên]
6
+--------------------------------------------------------------------+
Grants for exampleuser@localhost |
+--------------------------------------------------------------------+
GRANT USAGE ON *.* TO `exampleuser`@`localhost` |
GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |
+--------------------------------------------------------------------+
2 rows in set [0.00 sec]
Bây giờ, để thiết lập tài khoản người dùng được mô tả ở trên, bạn có thể nhập
7
+--------------------------------------------------------------------+
Grants for exampleuser@localhost |
+--------------------------------------------------------------------+
GRANT USAGE ON *.* TO `exampleuser`@`localhost` |
GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |
+--------------------------------------------------------------------+
2 rows in set [0.00 sec]
Ở đây, chúng tôi đã tạo một người dùng và cấp cho họ đầy đủ đặc quyền cho toàn bộ máy chủ MySQL. Sau đó, chúng tôi thu hồi các đặc quyền đó một cách cụ thể trong ngữ cảnh của cơ sở dữ liệu
3. Sau đó, chúng tôi cấp lại đặc quyền
GRANT ON . TO ''@'';
8 để tài khoản vẫn có thể đọc các giá trị từ cơ sở dữ liệu
SHOW GRANTS FOR ''@'';
Nếu bạn nhìn vào các đặc quyền cho tài khoản này, một cái gì đó tương tự như thế này sẽ được hiển thị
8
+--------------------------------------------------------------------+
Grants for exampleuser@localhost |
+--------------------------------------------------------------------+
GRANT USAGE ON *.* TO `exampleuser`@`localhost` |
GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |
+--------------------------------------------------------------------+
2 rows in set [0.00 sec]
9
+--------------------------------------------------------------------+
Grants for exampleuser@localhost |
+--------------------------------------------------------------------+
GRANT USAGE ON *.* TO `exampleuser`@`localhost` |
GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |
+--------------------------------------------------------------------+
2 rows in set [0.00 sec]
Dòng đầu tiên là danh sách mở rộng của tất cả các đặc quyền tĩnh được gói gọn trong tốc ký
0 được áp dụng trên toàn cầu [sử dụng
GRANT SELECT,INSERT,UPDATE,DELETE ON library.* TO 'librarymanager'@'localhost' WITH GRANT OPTION;
8]. Dòng thứ hai hiển thị tất cả các đặc quyền động được gói gọn bởi tốc ký
GRANT UPDATE [due_by] ON library.loans TO 'autorenew'@'localhost';
0, một lần nữa được áp dụng trên toàn cầu. Phần thứ ba hiển thị tất cả các đặc quyền áp dụng ở cấp cơ sở dữ liệu, ngoại trừ
GRANT SELECT,INSERT,UPDATE,DELETE ON library.* TO 'librarymanager'@'localhost' WITH GRANT OPTION;
8 bị thu hồi khỏi cơ sở dữ liệu
SHOW GRANTS FOR ''@'';
3
GRANT ON . TO ''@'';
Đặc quyền
71 là gì?
SHOW GRANTS;
Đặc quyền
71 là một đặc quyền có một số khả năng mạnh mẽ và nguy hiểm tiềm ẩn khác nhau. Kể từ MySQL 8, đặc quyền
SHOW GRANTS;
71 đã không còn được dùng để thay thế bằng các đặc quyền động chi tiết hơn để cho phép mức độ kiểm soát tốt hơn
SHOW GRANTS;
Để tìm hiểu về các khả năng mà đặc quyền
71 cho phép cũng như các đặc quyền động hiện có thể được sử dụng thay thế, hãy xem các tài nguyên này có trong tài liệu MySQL
SHOW GRANTS;
Nếu bạn chưa sử dụng đặc quyền
71, MySQL khuyên bạn nên sử dụng tập hợp con các đặc quyền động mà bạn cần thay vì cấp đặc quyền
SHOW GRANTS;
71 cho các tài khoản mới
SHOW GRANTS;
Phần kết luận
Trong hướng dẫn này, chúng tôi đã nói về cách hệ thống đặc quyền của MySQL cho phép bạn kiểm soát mức độ truy cập mà tài khoản người dùng của bạn có đối với các tài nguyên khác nhau ở các phạm vi khác nhau. Đặc quyền có thể được gán cho tài khoản người dùng trên toàn cầu, ở cấp cơ sở dữ liệu hoặc chi tiết hơn ở cấp đối tượng cơ sở dữ liệu
Chúng tôi đã giới thiệu lệnh
0 để thêm các đặc quyền mới vào tài khoản người dùng nhằm cải thiện mức độ truy cập của họ. Chúng ta đã thảo luận về cách
SHOW GRANTS FOR ''@'';
6 cho phép người dùng chuyển các đặc quyền của họ để quản trị viên có thể phân bổ trách nhiệm quản lý đặc quyền của họ và sau đó nói về cách gán các đặc quyền chung cho tài khoản người dùng. Chúng tôi đã trình bày cách sử dụng lệnh
SHOW GRANTS FOR ''@'';
1 để xóa các đặc quyền được gán cho các tài khoản và cách hủy bỏ một phần có thể cho phép bạn hệ thống hóa các ngoại lệ đối với các khoản cho phép rộng rãi
SHOW GRANTS FOR ''@'';
Hiểu cách phân phối đặc quyền cho tài khoản người dùng của bạn cho phép bạn thiết lập hệ thống quản lý truy cập của mình bằng cách sử dụng nguyên tắc đặc quyền tối thiểu. Bằng cách chỉ cấp cho tài khoản những đặc quyền cụ thể mà họ cần để thực hiện công việc của mình, bạn có thể ngăn chặn hành vi trái phép, giảm thiểu tác động của các sự cố bảo mật và thực hiện các chiến lược cách ly để giữ cho các phần khác nhau trong hệ thống của bạn không ảnh hưởng lẫn nhau
Cấp và thu hồi trong MySQL là gì?
GRANT và REVOKE là các thành viên phổ biến của họ SQL. Đây là các loại lệnh DCL được sử dụng để gán quyền cho người dùng thực hiện một tác vụ khác. Lệnh GRANT được sử dụng để cho phép người dùng trong khi lệnh REVOKE được sử dụng để xóa ủy quyền .Làm cách nào để xóa các khoản trợ cấp trong MySQL?
Để thu hồi tất cả các đặc quyền, hãy sử dụng cú pháp thứ hai, loại bỏ tất cả các đặc quyền chung, cơ sở dữ liệu, bảng, cột và quy trình cho người dùng hoặc vai trò được đặt tên. HỦY BỎ TẤT CẢ CÁC ĐẶC QUYỀN, CẤP TÙY CHỌN TỪ user_or_role [, user_or_role] . THU HỒI TẤT CẢ CÁC ĐẶC QUYỀN, TÙY CHỌN CẤP không thu hồi bất kỳ vai trò nào.Các khoản tài trợ trong MySQL là gì?
Mệnh đề VỚI TÙY CHỌN CẤP CẤP cung cấp cho người dùng khả năng cấp cho người dùng khác bất kỳ đặc quyền nào mà người dùng có ở cấp đặc quyền đã chỉ định . Để cấp đặc quyền GRANT OPTION cho một tài khoản mà không làm thay đổi các đặc quyền của tài khoản đó, hãy làm điều này. SỬ DỤNG CẤP TRÊN *.Thu hồi trong MySQL là gì?
REVOKE xóa đặc quyền nhưng không xóa hàng khỏi mysql. bảng hệ thống người dùng . Để xóa hoàn toàn tài khoản người dùng, hãy sử dụng DROP USER.