2017-06-14 83 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用户,并且您的桌上拥有完全访问权限。