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

Chính xác thì CẤP SỬ DỤNG TRÊN SCHEMA làm gì?

GRANT s trên các đối tượng khác nhau là riêng biệt. GRANT nhập vào cơ sở dữ liệu không GRANT quyền đối với lược đồ bên trong. Similiarly, GRANT nhập vào một lược đồ không cấp quyền trên các bảng bên trong.

Nếu bạn có quyền đối với SELECT từ một bảng, nhưng không có quyền xem nó trong lược đồ chứa nó thì bạn không thể truy cập vào bảng.

Các bài kiểm tra quyền được thực hiện theo thứ tự:

Do you have `USAGE` on the schema? 
    No:  Reject access. 
    Yes: Do you also have the appropriate rights on the table? 
        No:  Reject access. 
        Yes: Check column privileges.

Sự nhầm lẫn của bạn có thể nảy sinh do public giản đồ có GRANT mặc định tất cả các quyền đối với vai trò public , mà mọi người dùng / nhóm đều là thành viên. Vì vậy, mọi người đã có cách sử dụng trên lược đồ đó.

Cụm từ:

(giả sử rằng các yêu cầu đặc quyền riêng của đối tượng cũng được đáp ứng)

Có nghĩa là bạn phải có USAGE trên một lược đồ để sử dụng các đối tượng bên trong nó, nhưng có USAGE trên một lược đồ tự bản thân nó không đủ để sử dụng các đối tượng trong lược đồ, bạn cũng phải có quyền đối với chính các đối tượng đó.

Nó giống như một cây thư mục. Nếu bạn tạo một thư mục somedir với tệp somefile bên trong nó, sau đó đặt nó để chỉ người dùng của riêng bạn có thể truy cập vào thư mục hoặc tệp (mode rwx------ trên dir, mode rw------- trên tệp) thì không ai khác có thể liệt kê thư mục để biết rằng tệp tồn tại.

Nếu bạn cấp quyền đọc trên toàn thế giới đối với tệp (mode rw-r--r-- ) nhưng không thay đổi quyền của thư mục sẽ không có gì khác biệt. Không ai có thể nhìn thấy để đọc được tệp, vì họ không có quyền liệt kê thư mục.

Nếu thay vào đó bạn đặt rwx-r-xr-x trên thư mục, đặt nó để mọi người có thể liệt kê và xem qua thư mục nhưng không thay đổi quyền đối với tệp, mọi người có thể danh sách tệp nhưng không thể đọc vì họ không có quyền truy cập vào tệp.

Bạn cần đặt cả hai quyền để mọi người thực sự có thể xem tệp.

Điều tương tự trong Pg. Bạn cần cả hai giản đồ USAGE quyền và quyền đối tượng để thực hiện một hành động trên một đối tượng, chẳng hạn như SELECT từ một bảng.

(Tương tự giảm xuống một chút là PostgreSQL chưa có bảo mật cấp hàng, vì vậy người dùng vẫn có thể "thấy" rằng bảng tồn tại trong lược đồ bằng cách SELECT ing từ pg_class trực tiếp. Tuy nhiên, họ không thể tương tác với nó theo bất kỳ cách nào, vì vậy nó chỉ là phần "danh sách" không hoàn toàn giống nhau.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 3 cách để định dạng một số dưới dạng phần trăm trong PostgreSQL

  2. Postgres UUID JDBC không hoạt động

  3. Làm thế nào để cấu hình postgresql lần đầu tiên?

  4. múi giờ mặc định của postgres

  5. Trả lại một truy vấn từ một hàm?