Mysql cấp đặc quyền cấp

Xin chào, tôi đã sử dụng mã này để có siêu người dùng trong mysql

GRANT EXECUTE, PROCESS, SELECT, SHOW DATABASES, SHOW VIEW, ALTER, ALTER ROUTINE,
    CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP,
    EVENT, INDEX, INSERT, REFERENCES, TRIGGER, UPDATE, CREATE USER, FILE,
    LOCK TABLES, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHUTDOWN,
    SUPER
        ON *.* TO mysql@'%'
    WITH GRANT OPTION;

và sau đó

FLUSH PRIVILEGES;

Quản lý đặc quyền là một phần quan trọng của hệ thống và. Quyết định ai nên 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

SHOW GRANTS FOR ''@'';

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

đ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

SHOW GRANTS FOR ''@'';

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

đặ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

  • SHOW GRANTS FOR ''@'';

    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
  • bất kỳ đặc quyền nào bạn muốn gán cho người dùng khác
  • SHOW GRANTS FOR ''@'';

    8 trên

    SHOW GRANTS FOR ''@'';

    9. được sử dụng để thực hiện

    GRANT <privileges> ON <database>.<object> TO ''@'';

    0 cho các tài khoản khác

Để 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

SHOW GRANTS FOR ''@'';

6). Đây có thể là người dùng chung

GRANT <privileges> ON <database>.<object> TO ''@'';

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

Đặ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

GRANT <privileges> ON <database>.<object> TO ''@'';

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 <privileges> ON <database>.<object> TO ''@'';

    4. Bảng

    GRANT <privileges> ON <database>.<object> 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 <privileges> ON <database>.<object> TO ''@'';

    6. Bảng

    GRANT <privileges> ON <database>.<object> 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 <privileges> ON <database>.<object> TO ''@'';

    8. Bảng

    GRANT <privileges> ON <database>.<object> TO ''@'';

    8 xác định các đặc quyền cấp cơ sở dữ liệu. Bảng

    GRANT <privileges> ON <database>.<object> TO ''@'';

    8 khớp với các giá trị

    GRANT SELECT ON *.* TO 'sally'@'localhost';

    1 và

    GRANT SELECT ON *.* TO 'sally'@'localhost';

    2 của người dùng giống như bảng

    GRANT <privileges> ON <database>.<object> TO ''@'';

    4 nhưng cũng có một cột có tên là

    GRANT SELECT ON *.* TO 'sally'@'localhost';

    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 <privileges> ON <database>.<object> TO ''@'';

    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 SELECT ON *.* TO 'sally'@'localhost';

    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 accounting.* TO 'meredith'@'localhost';

    2. Xa hơn một bước so với bảng

    GRANT SELECT ON *.* TO 'sally'@'localhost';

    5, bảng

    GRANT SELECT ON accounting.* TO 'meredith'@'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 *.* TO 'sally'@'localhost';

    5
  • GRANT SELECT ON accounting.* TO 'meredith'@'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 *.* TO 'sally'@'localhost';

    1,

    GRANT SELECT ON *.* TO 'sally'@'localhost';

    2,

    GRANT SELECT ON *.* TO 'sally'@'localhost';

    4,

    GRANT UPDATE ON accounting.revenue TO 'frank'@'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 SELECT ON *.* TO 'sally'@'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 UPDATE ON accounting.revenue TO 'frank'@'localhost';

    9 và

    GRANT UPDATE (due_by) ON library.loans TO 'autorenew'@'localhost';

    0 để xác định người dùng phù hợp có thể hành động như thế nào

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 [email protected] |

+--------------------------------------------------------------------+

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

GRANT UPDATE (due_by) ON library.loans TO 'autorenew'@'localhost';

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 SELECT,INSERT,UPDATE,DELETE ON library.* TO 'librarymanager'@'localhost' WITH GRANT OPTION;

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

Nếu tài khoản người dùng mà bạn đăng nhập có đặc quyền

SHOW GRANTS FOR ''@'';

8 trên cơ sở dữ liệu

GRANT <privileges> ON <database>.<object> TO ''@'';

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

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 SHOW GRANTS FOR ''@'';0 như thế nào?

Lệnh To

SHOW GRANTS FOR ''@'';

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

Cú pháp cơ bản

Cú pháp cơ bản của lệnh

SHOW GRANTS FOR ''@'';

0 để gán đặc quyền khá đơn giản. Nó tuân theo định dạng này

GRANT <privileges> ON <database>.<object> 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

GRANT SELECT,INSERT,UPDATE,DELETE ON library.* TO 'librarymanager'@'localhost' WITH GRANT OPTION;

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 <privileges> ON <database>.<object> TO ''@'';

3 nơi các đặc quyền mới sẽ được ghi lại

Để 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 quyền

SHOW GRANTS FOR ''@'';

8 trên toàn cầu cho

SHOW GRANTS;

01, bạn sẽ nhập

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

SHOW GRANTS;

02 trong bảng

SHOW GRANTS;

03, bạn có thể nhập

GRANT UPDATE (due_by) ON library.loans TO 'autorenew'@'localhost';

Sử dụng mệnh đề SHOW GRANTS;04

Một điều khoản bổ sung, được gọi là

SHOW GRANTS;

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 trợ cấ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

Chẳng hạn, ở đây, chúng tôi có thể cấp đặc quyền cho tài khoản

SHOW GRANTS;

06

SHOW GRANTS FOR ''@'';

8,

SHOW GRANTS;

08,

SHOW GRANTS;

09 và

SHOW GRANTS;

10, cũng như khả năng chuyển các đặc quyền của nó trong cơ sở dữ liệu

SHOW GRANTS;

11 cho người dùng khác

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

SHOW GRANTS;

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 FOR ''@'';

6 cho phạm vi này, nên nếu chúng tôi cung cấp cho

SHOW GRANTS;

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 đó

Mặc dù bạn có thể sử dụng mệnh đề

SHOW GRANTS;

04 như minh họa ở trên để cho phép một 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

Khi bạn xử lý

SHOW GRANTS FOR ''@'';

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;

1

Trong bất kỳ trường hợp nào trong số này, kết quả là tài khoản

SHOW GRANTS;

06 sẽ có thể cấp bất kỳ đặc quyền nào mà nó có đố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 FOR ''@'';

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

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

SHOW GRANTS;

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

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ý

SHOW GRANTS;

26 hoặc

GRANT SELECT,INSERT,UPDATE,DELETE ON library.* TO 'librarymanager'@'localhost' WITH GRANT OPTION;

0

SHOW GRANTS;

2

Đ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

SHOW GRANTS;

25 cho người dùng

SHOW GRANTS;

29, với một vài ngoại lệ quan trọng. Gói đặc quyền

GRANT SELECT,INSERT,UPDATE,DELETE ON library.* TO 'librarymanager'@'localhost' WITH GRANT OPTION;

0 không bao gồm các đặc quyền

SHOW GRANTS FOR ''@'';

6 hoặc

SHOW GRANTS;

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

Để gán tất cả các đặc quyền ngoại trừ

SHOW GRANTS FOR ''@'';

6 và

SHOW GRANTS;

32 trên toàn cầu, hãy sử dụng phạm vi

GRANT UPDATE (due_by) ON library.loans TO 'autorenew'@'localhost';

8

SHOW GRANTS;

3

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

SHOW GRANTS FOR ''@'';

6 trong câu lệnh. Ví dụ: để cung cấp cho tài khoản

SHOW GRANTS;

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

Sau đó, tài khoản sẽ không chỉ có toàn quyền truy cập vào cơ sở dữ liệu

SHOW GRANTS;

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

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

GRANT UPDATE (due_by) ON library.loans TO 'autorenew'@'localhost';

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 đủ

SHOW GRANTS;

5

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

SHOW GRANTS FOR ''@'';

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;

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

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

SHOW GRANTS;

25, nhưng họ không thể thực hiện bất kỳ thay đổi nào

Như thường lệ, tương đương toàn cầu sử dụng phạm vi

GRANT UPDATE (due_by) ON library.loans TO 'autorenew'@'localhost';

8

SHOW GRANTS;

7

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

SHOW GRANTS FOR ''@'';

8,

SHOW GRANTS;

08,

SHOW GRANTS;

09 và

SHOW GRANTS;

10 trên đối tượng. Ví dụ

SHOW GRANTS;

8

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

SHOW GRANTS FOR ''@'';

8 và

SHOW GRANTS;

08

SHOW GRANTS;

9

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 có chọn lọc, bạn có thể cấp thêm cho họ đặc quyền

SHOW GRANTS;

09 trên các cột thích hợp

+--------------------------------------------------------------------+

Grants for [email protected] |

+--------------------------------------------------------------------+

GRANT USAGE ON *.* TO `exampleuser`@`localhost` |

GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |

+--------------------------------------------------------------------+

2 rows in set (0.00 sec)

0

Bạn sử dụng lệnh SHOW GRANTS FOR ''@'';1 như thế nào?

Bây giờ chúng ta đã xem xét lệnh

SHOW GRANTS FOR ''@'';

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

Cú pháp cơ bản

Lệnh

SHOW GRANTS FOR ''@'';

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

Cú pháp cơ bản trông như thế này

+--------------------------------------------------------------------+

Grants for [email protected] |

+--------------------------------------------------------------------+

GRANT USAGE ON *.* TO `exampleuser`@`localhost` |

GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |

+--------------------------------------------------------------------+

2 rows in set (0.00 sec)

1

Như với

SHOW GRANTS FOR ''@'';

0, nhiều đặc quyền có thể được đặt tên, 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.

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

SHOW GRANTS FOR ''@'';

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

Để xóa một đặc quyền ở cấp độ toàn cầu, hãy sử dụng ký tự đại diện

GRANT UPDATE (due_by) ON library.loans TO 'autorenew'@'localhost';

8 để khớp với mọi cơ sở dữ liệu và mọi đối tượng cơ sở dữ liệu

+--------------------------------------------------------------------+

Grants for [email protected] |

+--------------------------------------------------------------------+

GRANT USAGE ON *.* TO `exampleuser`@`localhost` |

GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |

+--------------------------------------------------------------------+

2 rows in set (0.00 sec)

2

Để 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

+--------------------------------------------------------------------+

Grants for [email protected] |

+--------------------------------------------------------------------+

GRANT USAGE ON *.* TO `exampleuser`@`localhost` |

GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |

+--------------------------------------------------------------------+

2 rows in set (0.00 sec)

3

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

+--------------------------------------------------------------------+

Grants for [email protected] |

+--------------------------------------------------------------------+

GRANT USAGE ON *.* TO `exampleuser`@`localhost` |

GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |

+--------------------------------------------------------------------+

2 rows in set (0.00 sec)

4

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

+--------------------------------------------------------------------+

Grants for [email protected] |

+--------------------------------------------------------------------+

GRANT USAGE ON *.* TO `exampleuser`@`localhost` |

GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |

+--------------------------------------------------------------------+

2 rows in set (0.00 sec)

5

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 một 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

GRANT <privileges> ON <database>.<object> TO ''@'';

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. 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 đó

Để kích hoạt hủy bỏ 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)

+--------------------------------------------------------------------+

Grants for [email protected] |

+--------------------------------------------------------------------+

GRANT USAGE ON *.* TO `exampleuser`@`localhost` |

GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |

+--------------------------------------------------------------------+

2 rows in set (0.00 sec)

6

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

+--------------------------------------------------------------------+

Grants for [email protected] |

+--------------------------------------------------------------------+

GRANT USAGE ON *.* TO `exampleuser`@`localhost` |

GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |

+--------------------------------------------------------------------+

2 rows in set (0.00 sec)

7

Ở đâ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

GRANT <privileges> ON <database>.<object> TO ''@'';

3. Sau đó, chúng tôi cấp lại đặc quyền

SHOW GRANTS FOR ''@'';

8 để tài khoản vẫn có thể đọc các giá trị từ cơ sở dữ liệu

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ị

+--------------------------------------------------------------------+

Grants for [email protected] |

+--------------------------------------------------------------------+

GRANT USAGE ON *.* TO `exampleuser`@`localhost` |

GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |

+--------------------------------------------------------------------+

2 rows in set (0.00 sec)

8

+--------------------------------------------------------------------+

Grants for [email protected] |

+--------------------------------------------------------------------+

GRANT USAGE ON *.* TO `exampleuser`@`localhost` |

GRANT ALL PRIVILEGES ON `exampledb`.* TO `exampleuser`@`localhost` |

+--------------------------------------------------------------------+

2 rows in set (0.00 sec)

9

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ý

GRANT SELECT,INSERT,UPDATE,DELETE ON library.* TO 'librarymanager'@'localhost' WITH GRANT OPTION;

0 được áp dụng trên toàn cầu (sử dụng

GRANT UPDATE (due_by) ON library.loans TO 'autorenew'@'localhost';

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 SELECT,INSERT,UPDATE,DELETE ON library.* TO 'librarymanager'@'localhost' WITH GRANT OPTION;

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ừ

SHOW GRANTS FOR ''@'';

8 bị thu hồi khỏi cơ sở dữ liệu

GRANT <privileges> ON <database>.<object> TO ''@'';

3

Đặc quyền SHOW GRANTS;71 là gì?

Đặc quyền

SHOW GRANTS;

71 là một đặc quyền có một số khả năng mạnh mẽ và nguy hiểm tiềm tàng 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

Để tìm hiểu về các khả năng mà đặc quyền

SHOW GRANTS;

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

Nếu bạn chưa sử dụng đặc quyền

SHOW GRANTS;

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

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

SHOW GRANTS FOR ''@'';

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 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

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 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