Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

mysql- Làm thế nào để áp dụng các khoản trợ cấp cho cột?

Tôi không chắc mình hiểu câu hỏi chính xác nhưng có vẻ như nó đang yêu cầu khả năng hạn chế người chọn dữ liệu từ bảng Người để họ không thể nhìn thấy giá trị trong cột Bí mật, nhưng họ nên được phép để sử dụng cột Bí mật bên trong truy vấn (trong mệnh đề WHERE, v.v.).

CREATE TABLE Person
(
    Id      ...,
    Secret  ...,
    ...
);
REVOKE ALL ON Person FROM PUBLIC;
GRANT SELECT(id) ON Person TO SomeOne;

Vì vậy, nếu giải thích của tôi là đúng, khi SomeOne chọn dữ liệu:

SELECT Id     FROM Person;    -- Works (as required)
SELECT Secret FROM Person;    -- Fails (as required)
SELECT Id
  FROM Person
 WHERE Secret = 1;            -- Fails (but we want it to work)

SQL không cho phép điều đó, và vì lý do chính đáng. Về cơ bản, nếu bạn có thể điều kiện kết quả truy vấn trên Bí mật, bạn có thể xác định giá trị của Bí mật với các truy vấn lặp lại, vì vậy những gì được cho là bí mật sẽ không còn là bí mật. Rất dễ bị rò rỉ thông tin.

Nhìn vào truy vấn không thành công nhưng "không nên" ... từ kết quả của nó, bạn biết rằng mọi Id trả về đều có giá trị Bí mật là 1, vì vậy đối với các giá trị Id đó, Bí mật không còn là bí mật.

Nếu bạn xem xét Cơ sở dữ liệu thống kê, nơi bạn chỉ được phép tìm kiếm trên dữ liệu tổng hợp, bạn sẽ thấy có những thứ được gọi là Công cụ theo dõi duy nhất về cơ bản cho phép bạn xác định các đặc điểm của một người, ngay cả khi bạn chỉ được phép xem tổng hợp ( Giá trị SUM, COUNT, ...) trong tập kết quả. Đây là một kịch bản phức tạp hơn bạn đang phải đối mặt (nhưng là một kịch bản hấp dẫn). C J Date's (lâu hết bản in) "Giới thiệu về Hệ thống cơ sở dữ liệu, Tập II" thảo luận về Cơ sở dữ liệu thống kê và Trình theo dõi duy nhất. (Tìm kiếm của Google trên 'trình theo dõi duy nhất cơ sở dữ liệu thống kê' cho thấy thông tin hữu ích dễ tiếp cận hơn.)

Vì vậy, nếu tôi hiểu điều mong muốn, tôi tin rằng mong muốn đó là sai lầm - và tiêu chuẩn SQL không cho phép những gì bạn tìm kiếm.

Có bất kỳ giải pháp thay thế nào không?

Nếu truy vấn có thể được tạo thành một dạng xem, người tạo dạng xem có thể truy cập dữ liệu chi tiết cơ bản và cấp quyền truy cập vào dạng xem, nhưng những người sử dụng dạng xem không thể thực hiện truy vấn thô; điều này có thể cung cấp cho bạn sự bảo vệ mà bạn tìm kiếm. Các nhận xét tương tự áp dụng cho các thủ tục được lưu trữ và cho phép truy vấn được tham số hóa tốt hơn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thủ tục được lưu trữ, MySQL và PHP

  2. Cách tạo cột ảo bằng MySQL SELECT?

  3. PHP Thử và Bắt cho Chèn SQL

  4. Lỗi khi cài đặt đá quý mysql2 qua Bundler

  5. Số tham số không hợp lệ:tham số không được xác định Chèn dữ liệu