Các quyền được triển khai trong MySQL như thế nào

Kết nối với MySQL với tư cách người dùng bằng Create_user_priv và Grant_priv. Xác định người dùng nào có các đặc quyền này bằng cách chạy truy vấn sau. Người dùng của bạn sẽ cần có đặc quyền CHỌN trên MySQL. người dùng để chạy truy vấn

SELECT User, Host, Super_priv, Create_user_priv, Grant_priv from mysql.user WHERE Create_user_priv = 'Y' AND Grant_Priv = 'Y';

  • Chạy truy vấn sau để tạo câu lệnh GRANT cho người dùng bị hạn chế của bạn. Thay thế 'cơ sở dữ liệu', 'người dùng' và 'máy chủ lưu trữ' bằng thông tin cụ thể cho cơ sở dữ liệu của bạn

    Lưu ý rằng các trích dẫn xung quanh myuser và mypassword là hai trích dẫn đơn, không phải kép. Các ký tự xung quanh myhost và, TABLE_NAME, là dấu ngược (phím nằm bên dưới phím thoát trên bàn phím của bạn)

    SELECT CONCAT('GRANT SELECT, SHOW VIEW ON mydatabase.`', TABLE_NAME, '` to ''myuser''@`myhost`;')
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'mydatabase';
    

    Ví dụ: nếu bạn muốn kết nối người dùng 'chartio_read_only' với cơ sở dữ liệu 'Báo cáo' của mình bằng ứng dụng khách chartio_connect, bạn sẽ chạy như sau

    SELECT CONCAT('GRANT SELECT, SHOW VIEW ON Reports.`', TABLE_NAME, '` to ''chartio_read_only''@`localhost`;')
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'Reports';
    

    Nếu bạn muốn kết nối người dùng 'chartio_direct_connect' với cơ sở dữ liệu 'Analytics' của mình bằng kết nối trực tiếp từ máy chủ của Chartio, bạn sẽ chạy như sau

    SELECT CONCAT('GRANT SELECT, SHOW VIEW ON Analytics.`', TABLE_NAME, '` to ''chartio_direct_connect''@`52.6.1.1`;')
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'Analytics';
    

  • Truy vấn sẽ có kết quả tương tự như sau

    GRANT SELECT, SHOW VIEW ON mydatabase.`Activity` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Marketing` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Operations` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Payments` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Plans` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Services` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Subscriptions` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Users` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Visitors` to 'myuser'@`myhost`;
    

  • Chỉ chọn các câu lệnh cho các bảng bạn muốn cấp quyền truy cập và chạy các truy vấn đó. Ví dụ: nếu chúng tôi chỉ muốn cấp quyền truy cập vào bảng Người dùng và Khách truy cập, chúng tôi sẽ chạy

    GRANT SELECT, SHOW VIEW ON mydatabase.`Users` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Visitors` to 'myuser'@`myhost`;
    

  • Cung cấp cho người dùng một mật khẩu an toàn

    SET PASSWORD FOR 'chartio_read_only'@`localhost` = PASSWORD('top$secret');
    

    hoặc là

    SET PASSWORD FOR 'chartio_direct_connect'@`52.6.1.1` = PASSWORD('top$secret');
    

  • Bây giờ bạn có thể truy cập cơ sở dữ liệu của mình một cách an toàn với người dùng này và yên tâm rằng nó chỉ có quyền đối với các bảng được chỉ định

    Cấp quyền cấp cột

    Quy trình cấp quyền cấp cột trên một bảng cụ thể rất giống với cấp quyền cấp bảng

    1. Tạo các câu lệnh GRANT cho các quyền cấp cột bằng truy vấn sau

      ________số 8_______

      Ví dụ: nếu bạn muốn kết nối người dùng 'chartio_read_only' với các cột cụ thể trong bảng 'Người dùng' của cơ sở dữ liệu 'Báo cáo' bằng ứng dụng khách chartio_connect, bạn sẽ chạy như sau

      SELECTCONCAT('GRANT SELECT (`', COLUMN_NAME, '`), SHOW VIEW ON Reports.`', TABLE_NAME, '` to ''chartio_read_only''@`localhost`;')
      FROM INFORMATION_SCHEMA.COLUMNS
      WHERE TABLE_SCHEMA = 'Reports' AND TABLE_NAME = 'Users';
      

    2. Truy vấn sẽ dẫn đến kết quả tương tự như sau

      SELECT CONCAT('GRANT SELECT, SHOW VIEW ON mydatabase.`', TABLE_NAME, '` to ''myuser''@`myhost`;')
      FROM INFORMATION_SCHEMA.TABLES
      WHERE TABLE_SCHEMA = 'mydatabase';
      
      0

    3. Chỉ chọn các câu lệnh cho các cột bạn muốn cấp quyền truy cập và chạy các truy vấn đó. Ví dụ: nếu chúng tôi chỉ muốn cấp quyền truy cập vào cột 'User_ID' và 'Công ty', chúng tôi sẽ chạy

      Người mới sử dụng MySQL thường gặp vấn đề với hệ thống kiểm soát truy cập MySQL. Nhưng một khi bạn đã quen với nó, tôi nghĩ bạn sẽ thấy nó linh hoạt và dễ sử dụng, vì vậy tháng này chúng ta sẽ xem xét cách bắt đầu với quyền của MySQL

      bảng NGƯỜI DÙNG

      Truy cập MySQL được kiểm soát bởi cơ sở dữ liệu mysql. Chúng ta hãy xem các bảng được tìm thấy trong cơ sở dữ liệu này. Danh sách sau đây đến từ MySQL 5 – các phiên bản trước của MySQL sẽ khác, nhưng trong hướng dẫn này, tôi chỉ tập trung vào các bảng có sẵn cho phiên bản ổn định hiện tại 4. 0. x

      mysql> SHOW TABLES;
      +-----------------+
      | Tables_in_mysql |
      +-----------------+
      | columns_priv    |
      | db              |
      | func            |
      | help_category   |
      | help_keyword    |
      | help_relation   |
      | help_topic      |
      | host            |
      | proc            |
      | tables_priv     |
      | user            |
      +-----------------+
      

      Khi người dùng cố gắng kết nối với cơ sở dữ liệu, MySQL sẽ kiểm tra xem tổ hợp tên người dùng/máy chủ/mật khẩu cụ thể đó có quyền kết nối không. Khi kết nối đã được thực hiện, trước khi thực hiện bất kỳ thao tác nào, MySQL sẽ kiểm tra lại để xem liệu tổ hợp người dùng/máy chủ có cấp quyền truy cập phù hợp để thực hiện thao tác đó hay không

      Bảng người dùng là bảng đầu tiên MySQL kiểm tra. Tất cả các kết hợp người dùng/máy chủ/mật khẩu phải được liệt kê trong bảng này trước khi có thể cấp bất kỳ quyền truy cập nào. Hãy xem bảng chi tiết hơn

      mysql> DESC user;
      +-----------------+---------------+------+-----+---------+-------+
      | Field           | Type          | Null | Key | Default | Extra |
      +-----------------+---------------+------+-----+---------+-------+
      | Host            | char(60)      |      | PRI |         |       |
      | User            | char(16)      |      | PRI |         |       |
      | Password        | char(16)      |      |     |         |       |
      | Select_priv     | enum('N','Y') |      |     | N       |       |
      | Insert_priv     | enum('N','Y') |      |     | N       |       |
      | Update_priv     | enum('N','Y') |      |     | N       |       |
      | Delete_priv     | enum('N','Y') |      |     | N       |       |
      | Create_priv     | enum('N','Y') |      |     | N       |       |
      | Drop_priv       | enum('N','Y') |      |     | N       |       |
      | Reload_priv     | enum('N','Y') |      |     | N       |       |
      | Shutdown_priv   | enum('N','Y') |      |     | N       |       |
      | Process_priv    | enum('N','Y') |      |     | N       |       |
      | File_priv       | enum('N','Y') |      |     | N       |       |
      | Grant_priv      | enum('N','Y') |      |     | N       |       |
      | References_priv | enum('N','Y') |      |     | N       |       |
      | Index_priv      | enum('N','Y') |      |     | N       |       |
      | Alter_priv      | enum('N','Y') |      |     | N       |       |
      +-----------------+---------------+------+-----+---------+-------+ 
      

      Điều quan trọng là phải hiểu rằng máy chủ và người dùng cùng nhau xác định quyền riêng lẻ để kết nối. Người dùng Nosipho có thể có quyền truy cập từ máy chủ A chứ không phải từ máy chủ B. Trên thực tế, người dùng Nosipho trên máy chủ B có thể là một người dùng hoàn toàn khác

      Máy chủ có thể là tên máy chủ của máy hoặc IP và có thể là hoặc bao gồm ký tự đại diện (dấu %), nghĩa là bất kỳ máy chủ nào. Hiếm khi cho phép truy cập từ bất kỳ máy chủ nào. Ví dụ: các ứng dụng web thường chỉ cho phép truy cập vào máy chủ cơ sở dữ liệu từ máy chủ web (hoặc máy chủ cục bộ đối với các thiết lập nhỏ, khi chúng ở trên cùng một máy). Mật khẩu được lưu trữ ở định dạng được mã hóa bằng hàm PASSWORD(). Hãy xem một tập hợp con mẫu từ bảng người dùng

      mysql> SELECT host,user FROM user;
      +---------------+------+
      | host          | user |
      +---------------+------+
      | localhost     | mysql|
      | localhost     | mark |
      | 192.168.5.42  | tiki |
      | 192.168.5.%   | mpho |
      | 192.168.5.42  |      |
      | %             | wiki |
      +---------------+------+
      

      Trong ví dụ này, người dùng mysql và mark chỉ có thể kết nối từ localhost, trong khi người dùng tiki và bất kỳ người dùng nào khác có thể kết nối từ IP 192. 168. 5. 42. Người dùng mpho có thể kết nối từ bất kỳ IP nào bắt đầu bằng 192. 168. 5 (như được biểu thị bằng ký tự đại diện trong đó chữ số cuối cùng sẽ là). Cuối cùng, wiki người dùng có quyền truy cập từ bất kỳ máy nào. Điều này không nhất thiết có nghĩa là họ có thể làm bất cứ điều gì, chỉ là họ có thể kết nối

      Để quyết định xem người dùng có quyền truy cập để thực hiện một thao tác cụ thể hay không, MySQL sẽ kiểm tra lại bảng người dùng trước. Các trường còn lại, tất cả đều được đặt tên khá rõ ràng, sẽ phát huy tác dụng. Select_priv xác định liệu người dùng có thể chạy các truy vấn SELECT, truy vấn Insert_priv INSERT, v.v.

      QuyềnMô tảSelect_privQuyền chạy truy vấn CHỌNInsert_privQuyền chạy câu lệnh INSERTUpdate_privQuyền chạy câu lệnh CẬP NHẬTDelete_privQuyền chạy câu lệnh DELETECreate_privQuyền TẠO bảng và cơ sở dữ liệuDrop_privQuyền DROP bảng và cơ sở dữ liệuReload_privQuyền TẢI TẢI cơ sở dữ liệu (ví dụ: câu lệnh FLUSH)Shutdown_privQuyền thành SHUTDOWN máy chủ cơ sở dữ liệuQuyền hủy chế độ xem hoặc PROcessESQuy trình tắt máy chủ cơ sở dữ liệu. File_privQuyền đọc và ghi TẬP TIN (ví dụ: LOAD DATA INFILE)Grant_privQuyền CẤP quyền có sẵn cho người dùng khácReferences_privQuyền tạo, sửa đổi hoặc xóa INDEXesIndex_privKhông được sử dụng bởi MySQL 4. 0. xAlter_privPermission để THAY ĐỔI cấu trúc bảng

      Tất cả đều là kiểu liệt kê, giá trị Y cho phép thao tác và giá trị N có thể không cho phép thao tác đó. Chỉ có thể, bởi vì bảng người dùng là loại quyền ngắn gọn nhất. Giá trị Y trong một trong các trường này luôn cho phép thao tác đó được thực hiện trên tất cả các cơ sở dữ liệu trong bảng. Cách tốt nhất là đặt các giá trị thành N trong bảng người dùng, sau đó chỉ cho phép chúng đối với cơ sở dữ liệu thích hợp, như chúng ta sẽ thấy bây giờ. mẫu khác

      mysql> SELECT host,user,select_priv,insert_priv FROM user;
      +-----------+------+-------------+-------------+
      | host      | user | select_priv | insert_priv |
      +-----------+------+-------------+-------------+
      | %         | mark | Y           | N           |
      | localhost | mpho | N           | N           |
      +-----------+------+-------------+-------------+
      

      Ở đây người dùng đánh dấu luôn có thể thực hiện truy vấn CHỌN, còn các thao tác khác thì MySQL sẽ cần kiểm tra các bảng khác trước để xem, bắt đầu từ bảng db

      bảng DB

      Nếu bảng người dùng cho phép truy cập, nhưng không cho phép thực hiện một thao tác cụ thể, thì bảng tiếp theo cần lo lắng là bảng db. Điều này đặt quyền cho cơ sở dữ liệu cụ thể

      mysql> DESC db;
      +-----------------+---------------+------+-----+---------+-------+
      | Field           | Type          | Null | Key | Default | Extra |
      +-----------------+---------------+------+-----+---------+-------+
      | Host            | char(60)      |      | PRI |         |       |
      | Db              | char(32)      |      | PRI |         |       |
      | User            | char(16)      |      | PRI |         |       |
      | Select_priv     | enum('N','Y') |      |     | N       |       |
      | Insert_priv     | enum('N','Y') |      |     | N       |       |
      | Update_priv     | enum('N','Y') |      |     | N       |       |
      | Delete_priv     | enum('N','Y') |      |     | N       |       |
      | Create_priv     | enum('N','Y') |      |     | N       |       |
      | Drop_priv       | enum('N','Y') |      |     | N       |       |
      | Grant_priv      | enum('N','Y') |      |     | N       |       |
      | References_priv | enum('N','Y') |      |     | N       |       |
      | Index_priv      | enum('N','Y') |      |     | N       |       |
      | Alter_priv      | enum('N','Y') |      |     | N       |       |
      +-----------------+---------------+------+-----+---------+-------+
      

      Máy chủ và Người dùng xuất hiện theo cùng một cách trong bảng này, nhưng được đính kèm với cơ sở dữ liệu, không phải mật khẩu. Sự kết hợp máy chủ/người dùng tương tự xuất hiện, với mật khẩu, trong bảng người dùng, cho phép người dùng kết nối, nhưng nếu họ không có quyền thực hiện một thao tác, MySQL sẽ kiểm tra điều này
      bảng để xem liệu họ có thể thực hiện nó trên một cơ sở dữ liệu cụ thể không. Một ví dụ

      mysql> SELECT host,db,user,select_priv,insert_priv FROM db;
      +-----------+----------+-------+-------------+-------------+
      | host      | db       | user  | select_priv | insert_priv |
      +-----------+----------+-------+-------------+-------------+
      | localhost | news     | mark  | Y           | Y           |
      | localhost | archives | mpho  | N           | N           |
      | localhost | news     | mpho  | Y           | Y           |
      +-----------+----------+-------+-------------+-------------+
      

      So sánh mẫu này với mẫu trước mà chúng tôi đã xem xét từ bảng người dùng. Đánh dấu người dùng đã có quyền Chọn trên tất cả các cơ sở dữ liệu, nhưng không có quyền Chèn. Tại đây, anh ta chỉ được cấp quyền chèn trên cơ sở dữ liệu tin tức, trong khi người dùng mpho được cấp quyền chọn và chèn trên cơ sở dữ liệu tin tức. Hầu hết các cài đặt MySQL trong bất kỳ loại kịch bản nhiều người dùng nào sẽ được phục vụ tốt nhất bằng cách từ chối các quyền toàn cầu và chỉ cấp chúng ở cấp cơ sở dữ liệu

      Một khả năng khác tồn tại. Đã tìm thấy tổ hợp cơ sở dữ liệu và người dùng, nhưng máy chủ bị bỏ trống. Trong trường hợp này, MySQL kiểm tra bảng máy chủ. Hãy nhìn vào những gì trong đó

      mysql> DESC host;
      +-----------------+---------------+------+-----+---------+-------+
      | Field           | Type          | Null | Key | Default | Extra |
      +-----------------+---------------+------+-----+---------+-------+
      | Host            | char(60)      |      | PRI |         |       |
      | Db              | char(32)      |      | PRI |         |       |
      | Select_priv     | enum('N','Y') |      |     | N       |       |
      | Insert_priv     | enum('N','Y') |      |     | N       |       |
      | Update_priv     | enum('N','Y') |      |     | N       |       |
      | Delete_priv     | enum('N','Y') |      |     | N       |       |
      | Create_priv     | enum('N','Y') |      |     | N       |       |
      | Drop_priv       | enum('N','Y') |      |     | N       |       |
      | Grant_priv      | enum('N','Y') |      |     | N       |       |
      | References_priv | enum('N','Y') |      |     | N       |       |
      | Index_priv      | enum('N','Y') |      |     | N       |       |
      | Alter_priv      | enum('N','Y') |      |     | N       |       |
      +-----------------+---------------+------+-----+---------+-------+
      

      Chính xác là cùng một loại kiểm tra xảy ra ở đây. Một ví dụ

       mysql> SELECT host,db,select_priv,insert_priv FROM host;
      +---------------+----------+-------------+-------------+
      | host          | db       | select_priv | insert_priv |
      +---------------+----------+-------------+-------------+
      | localhost     | news     | Y           | Y           |
      | localhost     | archives | Y           | N           |
      | 192.168.5.42  | news     | Y           | N           |
      +---------------+----------+-------------+-------------+
      

      Nếu máy chủ bị bỏ trống, các quyền được xác định tại đây. Người dùng từ máy chủ cục bộ sẽ có cả quyền chọn và quyền chèn vào cơ sở dữ liệu tin tức, trong khi người dùng từ máy chủ 192. 168. 5. 42 sẽ chỉ có quyền chọn đối với cơ sở dữ liệu này. Từ máy chủ cục bộ, người dùng sẽ chỉ có các đặc quyền được chọn trên cơ sở dữ liệu lưu trữ

      Nhưng vẫn có thể tinh chỉnh nhiều hơn. Bạn có thể chỉ định quyền cho người dùng trên một bảng hoặc thậm chí ở cấp độ cột, với các bảng table_priv và column_priv, được mô tả bên dưới

      Các quyền được triển khai trong cơ sở dữ liệu MySQL như thế nào?

      Người dùng MySQL được tạo hiện không có bất kỳ đặc quyền nào để truy cập và sửa đổi cơ sở dữ liệu. Để cấp quyền, hãy chỉ định cơ sở dữ liệu và bảng nào mà người dùng có thể giao tiếp . Cú pháp lệnh như sau. CẤP TẤT CẢ CÁC ĐẶC QUYỀN TRÊN *.

      Quyền được cấp trong MySQL như thế nào?

      Để phù hợp với việc cấp quyền cho người dùng từ các máy chủ tùy ý, MySQL hỗ trợ chỉ định giá trị người dùng ở dạng ' user_name '@' host_name ' . Bạn có thể chỉ định ký tự đại diện trong tên máy chủ. Ví dụ: ' user_name '@'%. ví dụ. com' áp dụng cho user_name cho bất kỳ máy chủ nào trong ví dụ. com và ' user_name '@'198. 51.

      Các quyền được triển khai trong SQL như thế nào?

      Mọi Máy chủ SQL có thể bảo mật đều có các quyền liên quan có thể được cấp cho hiệu trưởng. Các quyền trong Công cụ cơ sở dữ liệu được quản lý ở cấp máy chủ được gán cho thông tin đăng nhập và vai trò máy chủ, đồng thời ở cấp cơ sở dữ liệu được gán cho người dùng cơ sở dữ liệu và vai trò cơ sở dữ liệu .

      Làm cách nào để đặt quyền của người dùng cho MySQL?

      Câu lệnh GRANT cho phép bạn đặt quyền truy cập MySQL bằng cú pháp sau. mysql> CẤP đặc quyền TRÊN cấp_đặc quyền CHO tên_tài_khoản ; . mysql> LỰA CHỌN CẤP, CHÈN TRÊN Strongdm.