2016-03-24 10 views
1

PostgreSQL 9.4'te çok gizli bir yapıya sahip büyük bir veritabanım var. Sürekli değişen birçok veri var. Müşterimden birine bu veritabanındaki belirli görünümlere erişim vermek istiyorum.PostgreSQL - Veritabanı yapısını gizler ama belirli bir rol için seçilmiş görünümleri sorgulamaya izin verir (kullanıcı)

Müşterinin bu veritabanının yapısını görmesini istemiyorum - yalnızca seçili görünümler/tablolar üzerinde salt okunur sorgular yapmak için erişim elde etmelidir. Ben (o müşteriye kalmış) Müşteri bu görünümden verilerle herhangi SELECT sorgusu yapmak istiyorum seçilen görünüme sadece okuma erişimi vermek durumunda

, yani:

SELECT * FROM view_1; 
SELECT MIN(col_a), MAX(col_b) FROM view_1; 

mümkün mü PostgreSQL bunu yapmayı ?

Eğer hayır ... en iyi çözüm ne olurdu?

Müşterinin standart PostgreSQL bağlantısından erişmesi ve standart SQL SELECTlerini yapması gerekir (DB için middleware/api kabul edilemez). Alan çoğaltması nedeniyle tablo çoğaltması mümkün değildir. Belki veri tabanımdaki veriyi bir şekilde alan bazı görüşlerle müşteri için veri tabanı oluşturabilir miyim? Ama böyle bir durumda, müşterinin veritabanına kullanıcı ve şifreyi görebileceğinden korkuyorum.

cevap

0

ayrı şemada görüşlerini konur yapmak ve kullanıcıya bu şema üzerinde KULLANIM (ve yalnızca bu şema) vermek için gereken tek şey:

CREATE SCHEMA tables; 
CREATE TABLE tables.some_table(i int); 
INSERT INTO tables.some_table SELECT generate_series(1,9); 
CREATE ROLE test; 
CREATE SCHEMA views; 
GRANT USAGE ON SCHEMA views TO test; 
CREATE VIEW views.some_view AS SELECT * FROM tables.some_table; 
GRANT SELECT ON views.some_view TO test; 
SET ROLE test; 
SELECT count(*) FROM views.some_view; 
count 
------- 
    9 
(1 row) 

tablo size verecektir seçmek için çalışılıyor Hata:

SELECT count(*) FROM tables.some_table; 
ERROR: permission denied for schema tables 
LINE 1: SELECT count(*) FROM tables.some_table; 
+1

Tablo verilerine sınırlı erişim sorunsuz çalışıyor - teşekkürler. Ancak veritabanı yapısına erişmeye ne dersiniz? Eğer pgadmin ile test olarak giriş yaparsam, tüm şemaları, gizli tablo isimlerini, sütun tanımını vs. görebilirsiniz. – vac

+0

'SELECT relname FROM pg_stat_all_tables WHERE schemaname = 'tables';' şunu gösterir: some_table, secret_table ... – vac

+2

@vac çözüm? – bumpkin

İlgili konular