2017-06-14 311 views
1

我的Heroku Postgres數據庫用於我的應用程序。我可以很容易地使用從Heroku的Heroku Postgres數據庫的只讀訪問

psql $(heroku config:get DATABASE_URL -a my_app) 
psql (9.6.1) 
SSL connection (protocol: TLSv1.2, cipher: ECDSE-RSA-AES256-GCM-SHA384, bits: 256, compression: off) 
Type "help" for help. 

d5i032ahpfiv07=> 

,默認情況下提供DATABASE_URL,該用戶似乎有充分的機會來更新和刪除表

d5i032ahpfiv07=> SELECT 
    table_name, 
    string_agg(privilege_type, ', ') as privileges 
FROM information_schema.role_table_grants 
WHERE table_schema = 'public' 
    AND grantee = current_user 
GROUP BY 1 
; 

      table_name    |       privileges 
-----------------------------------+--------------------------------------------------------------- 
articles       | INSERT, TRIGGER, REFERENCES, TRUNCATE, DELETE, UPDATE, SELECT 
comment_flags      | TRIGGER, INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES 
comment_likes      | TRUNCATE, REFERENCES, TRIGGER, INSERT, SELECT, UPDATE, DELETE 
comments       | INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER 
communities      | TRIGGER, REFERENCES, TRUNCATE, DELETE, UPDATE, SELECT, INSERT 
..... 

訪問psql殼我很想成立數據庫中的「只讀」用戶,這樣人們可以查看這些數據,而不必擔心運行「DROP TABLE」或其他破壞性命令。

我該如何設置Heroku Postgres上的只讀用戶?

謝謝!

回答

3

創建Heroku Postgres Follower Database

數據庫追隨者是領導者數據庫的只讀副本 都能保持最新與領導者數據庫中的數據。隨着寫入和其他 數據修改在領導者數據庫中提交, 的變化實時流式傳輸到跟隨者數據庫。

然後,只需針對追隨者運行您的分析,dataclips和其他只讀應用程序。這是一個非常標準的配置,可以保護您的主數據庫,並增加了性能優勢:您可以使用查詢(通常密集且具有不同的緩存配置文件),而不會影響面向用戶的應用程序。

+0

謝謝,這是一個不錯的解決方案。小型後續行動:如果有人不小心對追隨者發出了破壞性命令,我將不得不重建它的數據?如果發生這種情況,我該如何提醒(或手動檢查)?我確信有一些方法可以將追隨者的狀態與領導者進行比較? – user2490003

+0

我猜測這是不可能的,因爲它是隻讀的,因此破壞性的命令可以在追隨者上運行,但我也只是想知道同樣的事情。 – manisha

2

你不能。
Heroku僅爲您提供單個postgresql用戶,並且您的桌上擁有完全訪問權限。