Heroku Postgres数据库的只读访问
问题描述:
我的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上的只读用户?
谢谢!
答
创建Heroku Postgres Follower Database
数据库追随者是领导者数据库的只读副本 都能保持最新与领导者数据库中的数据。随着写入和其他 数据修改在领导者数据库中提交, 的变化实时流式传输到跟随者数据库。
然后,只需针对追随者运行您的分析,dataclips和其他只读应用程序。这是一个非常标准的配置,可以保护您的主数据库,并增加了性能优势:您可以使用查询(通常密集且具有不同的缓存配置文件),而不会影响面向用户的应用程序。
答
你不能。
Heroku仅为您提供单个postgresql用户,并且您的桌上拥有完全访问权限。
谢谢,这是一个不错的解决方案。小型后续行动:如果有人不小心对追随者发出了破坏性命令,我将不得不重建它的数据?如果发生这种情况,我该如何提醒(或手动检查)?我确信有一些方法可以将追随者的状态与领导者进行比较? – user2490003
我猜测这是不可能的,因为它是只读的,因此破坏性的命令可以在追随者上运行,但我也只是想知道同样的事情。 – manisha