APostgreSQL10897_11149
11212_11389Joe
Trong hai cơ sở dữ liệu trong cùng một cụm; Nhưng hệ thống có thể được cấu hình để cho phépJoe
Chỉ truy cập vào một số cơ sở dữ liệu.
Cơ sở dữ liệu chứa một hoặc nhiều tênSchemas, lần lượt chứa các bảng. Các kèo bóng đá c1 đồ cũng chứa các loại đối tượng được đặt tên khác, bao gồm các kiểu dữ liệu, chức năng và toán tử. Tên đối tượng giống nhau có thể được sử dụng trong các kèo bóng đá c1 đồ khác nhau mà không có xung đột; Ví dụ, cả haiSchema1
vàMyschema
Có thể chứa kèo bóng đá c1 bảng có tênMyTable
. Không giống như cơ sở dữ liệu, các kèo bóng đá c1 đồ không được phân tách một cách cứng nhắc: người dùng có thể truy cập các đối tượng trong bất kỳ kèo bóng đá c1 đồ nào trong cơ sở dữ liệu mà chúng được kết nối, nếu chúng có đặc quyền làm như vậy.
Có một số lý do tại sao người ta có thể muốn sử dụng các kèo bóng đá c1 đồ:
Để cho phép nhiều người dùng sử dụng một cơ sở dữ liệu mà không can thiệp vào nhau.
Để tổ chức kèo bóng đá c1 đối tượng cơ sở dữ liệu thành kèo bóng đá c1 nhóm logic để làm cho chúng dễ quản lý hơn.
Các ứng dụng của bên thứ ba có thể được đưa vào các kèo bóng đá c1 đồ riêng biệt để chúng không va chạm với tên của các đối tượng khác.
Các kèo bóng đá c1 đồ tương tự như các thư mục ở cấp hệ điều hành, ngoại trừ các kèo bóng đá c1 đồ không thể được lồng.
Để tạo kèo bóng đá c1 đồ, sử dụngTạo kèo bóng đá c1 đồlệnh. Đặt cho kèo bóng đá c1 đồ một tên của sự lựa chọn của bạn. Ví dụ:
Tạo kèo bóng đá c1 đồ myschema;
Để tạo hoặc truy cập các đối tượng trong kèo bóng đá c1 đồ, viết ATên đủ điều kiệnBao gồm tên kèo bóng đá c1 đồ và tên bảng được phân tách bằng một dấu chấm:
kèo bóng đá c1 đồ
.
Bảng
13958_14244
Trên thực tế, cú pháp thậm chí còn chung hơn
Cơ sở dữ liệu
.
kèo bóng đá c1 đồ
.
Bảng
cũng có thể được sử dụng, nhưng hiện tại đây chỉ là để tuân thủ pro forma với tiêu chuẩn SQL. Nếu bạn viết tên cơ sở dữ liệu, nó phải giống như cơ sở dữ liệu bạn được kết nối.
Vì vậy, để tạo một bảng trong kèo bóng đá c1 đồ mới, sử dụng:
Tạo bảng myschema.mytable ( ... );
Để bỏ một kèo bóng đá c1 đồ nếu nó trống (tất cả các đối tượng trong đó đã bị loại bỏ), sử dụng:
Drop Schema myschema;
Để bỏ một kèo bóng đá c1 đồ bao gồm tất cả các đối tượng chứa, sử dụng:
Drop Schema MySchema Cascade;
xemPostgresql:Để mô tả về cơ chế chung đằng sau điều này.
Thường thì bạn sẽ muốn tạo một kèo bóng đá c1 đồ thuộc sở hữu của người khác (vì đây là một trong những cách để hạn chế các hoạt động của người dùng của bạn đối với các không gian tên được xác định rõ). Cú pháp cho đó là:
Tạo kèo bóng đá c1 đồSchema_name
ủy quyềnuser_name
;
Bạn thậm chí có thể bỏ qua tên kèo bóng đá c1 đồ, trong trường hợp đó, tên kèo bóng đá c1 đồ sẽ giống như tên người dùng. Nhìn thấyPhần 5.9.6Vì làm thế nào điều này có thể hữu ích.
Tên kèo bóng đá c1 đồ bắt đầu bằngPG_
được dành riêng cho mục đích hệ thống và không thể được tạo bởi người dùng.
Trong các phần trước, chúng tôi đã tạo các bảng mà không chỉ định bất kỳ tên kèo bóng đá c1 đồ nào. Theo mặc định, các bảng như vậy (và các đối tượng khác) được tự động đưa vào một kèo bóng đá c1 đồ có têncông khaiKhăn. Mỗi cơ sở dữ liệu mới đều chứa một kèo bóng đá c1 đồ như vậy. Do đó, những điều sau đây tương đương:
Tạo sản phẩm bảng (...);
và:
Tạo bảng công khai.products (...);
Tên đủ điều kiện là tẻ nhạt để viết, và tốt nhất là không nên không đưa một tên kèo bóng đá c1 đồ cụ thể vào các ứng dụng. Do đó, các bảng thường được đề cập bởiTên không đủ tiêu chuẩn17559_17659Đường dẫn tìm kiếm, đây là danh sách các kèo bóng đá c1 đồ để xem xét. Bảng phù hợp đầu tiên trong đường dẫn tìm kiếm được coi là người bị truy nã. Nếu không có khớp trong đường dẫn tìm kiếm, một lỗi được báo cáo, ngay cả khi các tên bảng khớp tồn tại trong các kèo bóng đá c1 đồ khác trong cơ sở dữ liệu.
Khả năng tạo các đối tượng giống như có tên trong các kèo bóng đá c1 đồ khác nhau làm phức tạp việc viết một truy vấn tham khảo chính xác cùng một đối tượng mỗi lần. Nó cũng mở ra tiềm năng cho người dùng thay đổi hành vi của các truy vấn của người dùng khác, một cách độc hại hoặc vô tình. Do sự phổ biến của các tên không đủ tiêu chuẩn trong các truy vấn và việc sử dụng chúng trongPostgreSQLbên trong, thêm một kèo bóng đá c1 đồ vàosearch_path
Tin tưởng hiệu quả tất cả người dùng cóTạo
Đặc quyền trên kèo bóng đá c1 đồ đó. Khi bạn chạy một truy vấn thông thường, một người dùng độc hại có thể tạo các đối tượng trong kèo bóng đá c1 đồ đường dẫn tìm kiếm của bạn có thể kiểm soát và thực thi các hàm SQL tùy ý như thể bạn đã thực thi chúng.
kèo bóng đá c1 đồ đầu tiên có tên trong đường dẫn tìm kiếm được gọi là kèo bóng đá c1 đồ hiện tại. Bên cạnh việc tìm kiếm kèo bóng đá c1 đồ đầu tiên được tìm kiếm, nó còn là kèo bóng đá c1 đồ trong đó các bảng mới sẽ được tạo nếuTạo bảng
Lệnh không chỉ định tên kèo bóng đá c1 đồ.
Để hiển thị đường dẫn tìm kiếm hiện tại, hãy sử dụng lệnh sau:
show search_path;
Trong thiết lập mặc định này trả về:
search_path -------------- "$ user", công khai
Phần tử đầu tiên chỉ định rằng một kèo bóng đá c1 đồ có cùng tên với người dùng hiện tại sẽ được tìm kiếm. Nếu không có kèo bóng đá c1 đồ như vậy tồn tại, mục nhập bị bỏ qua. Phần tử thứ hai đề cập đến kèo bóng đá c1 đồ công khai mà chúng ta đã thấy.
kèo bóng đá c1 đồ đầu tiên trong đường dẫn tìm kiếm tồn tại là vị trí mặc định để tạo các đối tượng mới. Đó là lý do mà các đối tượng mặc định được tạo trong kèo bóng đá c1 đồ công khai. Khi các đối tượng được tham chiếu trong bất kỳ ngữ cảnh nào khác mà không có trình độ kèo bóng đá c1 đồ (sửa đổi bảng, sửa đổi dữ liệu hoặc lệnh truy vấn), đường dẫn tìm kiếm được đi qua cho đến khi tìm thấy đối tượng phù hợp. Do đó, trong cấu hình mặc định, bất kỳ truy cập không đủ tiêu chuẩn nào lại chỉ có thể tham khảo kèo bóng đá c1 đồ công khai.
Để đặt kèo bóng đá c1 đồ mới của chúng tôi vào đường dẫn, chúng tôi sử dụng:
Đặt search_path thành myschema, công khai;
(Chúng tôi bỏ qua$ user
Ở đây vì chúng tôi không có nhu cầu ngay lập tức.) Và sau đó chúng tôi có thể truy cập bảng mà không cần trình độ học vấn:
Drop Table myTable;
Ngoài ra, kể từMyschema
là phần tử đầu tiên trong đường dẫn, kèo bóng đá c1 đối tượng mới theo mặc định sẽ được tạo trong đó.
Chúng tôi cũng có thể đã viết:
Đặt search_path thành myschema;
Sau đó, chúng tôi không còn quyền truy cập vào kèo bóng đá c1 đồ công khai mà không có trình độ rõ ràng. Không có gì đặc biệt về kèo bóng đá c1 đồ công khai ngoại trừ nó tồn tại theo mặc định. Nó cũng có thể được bỏ.
Xem thêmPhần 9.26cho các cách khác để thao tác đường dẫn tìm kiếm kèo bóng đá c1 đồ.
Đường dẫn tìm kiếm hoạt động theo cùng một cách cho tên kiểu dữ liệu, tên chức năng và tên toán tử như đối với tên bảng. Kiểu dữ liệu và tên chức năng có thể đủ điều kiện theo cách tương tự như tên bảng. Nếu bạn cần viết một tên toán tử có trình độ trong một biểu thức, có một điều khoản đặc biệt: bạn phải viết
toán tử (
kèo bóng đá c1 đồ
.
Nhà điều hành
)
Điều này là cần thiết để tránh sự mơ hồ của cú pháp. Một ví dụ là:
Chọn 3 toán tử (pg_catalog.+) 4;
21805_21924
Theo mặc định, người dùng không thể truy cập bất kỳ đối tượng nào trong các kèo bóng đá c1 đồ mà họ không sở hữu. Để cho phép điều đó, chủ sở hữu của kèo bóng đá c1 đồ phải cấpsử dụng
Đặc quyền trên kèo bóng đá c1 đồ. Theo mặc định, mọi người đều có đặc quyền đó trên kèo bóng đá c1 đồcông khai
. Để cho phép người dùng sử dụng các đối tượng trong kèo bóng đá c1 đồ, các đặc quyền bổ sung có thể cần phải được cấp, khi thích hợp cho đối tượng.
Người dùng cũng có thể được phép tạo các đối tượng trong kèo bóng đá c1 đồ của người khác. Để cho phép điều đó,Tạo
Đặc quyền về kèo bóng đá c1 đồ cần được cấp. Trong cơ sở dữ liệu được nâng cấp từPostgreSQL14 hoặc sớm hơn, mọi người đều có đặc quyền đó trên kèo bóng đá c1 đồcông khai
. Một sốmẫu sử dụngGọi cho việc thu hồi đặc quyền đó:
Thu hồi Creat trên kèo bóng đá c1 đồ công khai từ công khai;
(lần đầu tiênHồicông khaiVoilà kèo bóng đá c1 đồ, thứ haiHồicông khaicó nghĩa làMỗi người dùng. Theo nghĩa đầu tiên, nó là một định danh, theo nghĩa thứ hai, nó là một từ khóa, do đó vốn hóa khác nhau; Nhớ lại kèo bóng đá c1 hướng dẫn từPhần 4.1.1.)
Ngoàicông khai
và các kèo bóng đá c1 đồ do người dùng tạo, mỗi cơ sở dữ liệu chứa mộtpg_catalog
kèo bóng đá c1 đồ, chứa các bảng hệ thống và tất cả các loại dữ liệu, chức năng và toán tử tích hợp.pg_catalog
luôn là một phần hiệu quả của đường dẫn tìm kiếm. Nếu nó không được đặt tên rõ ràng trong đường dẫn thì nó được tìm kiếm ngầmtrướcTìm kiếm các kèo bóng đá c1 đồ của đường dẫn. Điều này đảm bảo rằng các tên tích hợp sẽ luôn luôn có thể tìm thấy. Tuy nhiên, bạn có thể đặt rõ ràngpg_catalog
Ở cuối đường dẫn tìm kiếm của bạn nếu bạn thích có tên do người dùng xác định ghi đè tên tích hợp.
Vì tên bảng hệ thống bắt đầu bằngpg_
24833_25199pg_
25229_25325PG_
tiền tố.
Các kèo bóng đá c1 đồ có thể được sử dụng để sắp xếp dữ liệu của bạn theo nhiều cách. MỘTmẫu sử dụng kèo bóng đá c1 đồ an toànNgăn chặn người dùng không tin tưởng thay đổi hành vi của các truy vấn của người dùng khác. Khi cơ sở dữ liệu không sử dụng mẫu sử dụng kèo bóng đá c1 đồ an toàn, người dùng muốn truy vấn an toàn rằng cơ sở dữ liệu sẽ có hành động bảo vệ ở đầu mỗi phiên. Cụ thể, họ sẽ bắt đầu mỗi phiên bằng cách đặtsearch_path
26039_26133search_path
. Có một vài mẫu sử dụng dễ dàng được hỗ trợ bởi cấu hình mặc định:
CRALAIN Người dùng thông thường đối với các kèo bóng đá c1 đồ người dùng-tư. Để thực hiện mẫu này, trước tiên hãy đảm bảo rằng không có kèo bóng đá c1 đồ nào có công khaiTạo
26545_26683Tạo kèo bóng đá c1 đồ Alice Alice Alice
. (Nhớ lại rằng đường dẫn tìm kiếm mặc định bắt đầu bằng$ user
, giải quyết cho tên người dùng. Do đó, nếu mỗi người dùng có một kèo bóng đá c1 đồ riêng biệt, họ sẽ truy cập các kèo bóng đá c1 đồ của riêng họ theo mặc định.) Mẫu này là mẫu sử dụng kèo bóng đá c1 đồ an toàn trừ khi người dùng không tin cậy là chủ sở hữu cơ sở dữ liệu hoặc giữcreaterole
Đặc quyền, trong trường hợp đó không có mẫu sử dụng kèo bóng đá c1 đồ an toàn tồn tại.
inPostgreSQL15 trở lên, cấu hình mặc định hỗ trợ mẫu sử dụng này. Trong kèo bóng đá c1 phiên bản trước hoặc khi sử dụng cơ sở dữ liệu đã được nâng cấp từ phiên bản trước, bạn sẽ cần phải xóa công khaiTạo
Đặc quyền từcông khai
kèo bóng đá c1 đồ (sốThu hồi Creat trên kèo bóng đá c1 đồ công khai từ công khai
). Sau đó xem xét kiểm toáncông khai
kèo bóng đá c1 đồ cho các đối tượng có tên giống như đối tượng trong kèo bóng đá c1 đồpg_catalog
.
Xóa kèo bóng đá c1 đồ công khai khỏi đường dẫn tìm kiếm mặc định, bằng cách sửa đổiPostgreSql.conf
hoặc bằng cách phát hànhVai trò thay đổi tất cả kèo bóng đá c1 set search_path = "$ user"
. Sau đó, cấp đặc quyền để tạo trong kèo bóng đá c1 đồ công khai. Chỉ có tên đủ điều kiện sẽ chọn các đối tượng kèo bóng đá c1 đồ công khai. Trong khi các tài liệu tham khảo bảng đủ điều kiện là tốt, các cuộc gọi đến các chức năng trong kèo bóng đá c1 đồ công khaiPostgresql: Tài liệu: kèo tỷ số bóng. Nếu bạn tạo các chức năng hoặc tiện ích mở rộng trong kèo bóng đá c1 đồ công khai, hãy sử dụng mẫu đầu tiên thay thế. Mặt khác, giống như mẫu đầu tiên, điều này là an toàn trừ khi người dùng không tin cậy là chủ sở hữu cơ sở dữ liệu hoặc giữcreaterole
Đặc quyền.
Giữ đường dẫn tìm kiếm mặc định và cấp đặc quyền để tạo trong kèo bóng đá c1 đồ công khai. Tất cả người dùng truy cập vào kèo bóng đá c1 đồ công khai ngầm. Điều này mô phỏng tình huống mà các kèo bóng đá c1 đồ hoàn toàn không có sẵn, tạo ra một sự chuyển đổi suôn sẻ từ thế giới không nhận thức được. Tuy nhiên, đây không bao giờ là một mô hình an toàn. Chỉ chấp nhận được khi cơ sở dữ liệu có một người dùng hoặc một vài người dùng tin tưởng lẫn nhau. Trong cơ sở dữ liệu được nâng cấp từPostgreSQL14 hoặc sớm hơn, đây là mặc định.
Đối với bất kỳ mẫu nào, để cài đặt các ứng dụng được chia sẻ (các bảng được sử dụng bởi mọi người, các chức năng bổ sung được cung cấp bởi các bên thứ ba, v.v.), đưa chúng vào các kèo bóng đá c1 đồ riêng biệt. Hãy nhớ cấp các đặc quyền thích hợp để cho phép người dùng khác truy cập họ. Sau đó, người dùng có thể tham khảo các đối tượng bổ sung này bằng cách đủ điều kiện các tên với tên kèo bóng đá c1 đồ hoặc họ có thể đặt các kèo bóng đá c1 đồ bổ sung vào đường dẫn tìm kiếm của họ, khi họ chọn.
29969_30416
. Đây là cáchPostgreSQLsẽ hoạt động hiệu quả nếu bạn tạo kèo bóng đá c1 đồ trên mỗi người dùng cho mọi người dùng.user_name
.Table_Name
Ngoài ra, không có khái niệm về Acông khai
kèo bóng đá c1 đồ trong tiêu chuẩn SQL. Để phù hợp tối đa với tiêu chuẩn, bạn không nên sử dụngcông khai
kèo bóng đá c1 đồ.
Tất nhiên, một số hệ thống cơ sở dữ liệu SQL có thể không thực hiện các kèo bóng đá c1 đồ hoặc cung cấp hỗ trợ không gian tên bằng cách cho phép (có thể hạn chế) truy cập cơ sở dữ liệu chéo. Nếu bạn cần làm việc với các hệ thống đó, thì tính di động tối đa sẽ đạt được bằng cách không sử dụng các kèo bóng đá c1 đồ.
32146_32372Mẫu nàyĐể báo cáo vấn đề tài liệu.