2017-06-14 26 views
1

私のアプリケーション用のHeroku Postgresデータベースを持っています。私が設定してみたい Heroku Postgresデータベースの読み取り専用アクセス

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 $(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=> 

Herokuのから提供 DATABASE_URLを使用して psqlシェルにアクセスすることができ、デフォルトで、このユーザーは、テーブルを更新し、ドロップする完全なアクセス権を持っているようです"DROP TABLE"や他の破壊的なコマンドを実行する恐れがなく、人々がこのデータを見ることができるように、データベース内の "読み取り専用"ユーザ。

Heroku Postgresで読み取り専用ユーザーを設定するにはどうすればよいですか?

ありがとうございました!

答えて

3

データベースフォロワーがリーダーデータベースのデータと最新の 滞在することをリーダーデータベースの読み取り専用コピーであるHeroku Postgres Follower Database

を作成します。書き込みおよび他の のデータ変更がリーダーデータベースでコミットされると、 の変更は、リアルタイムでフォロワーデータベースにストリーミングされます。

その後、フォロワーに対してアナリティクス、データクリップ、およびその他の読み取り専用アプリケーションを実行します。これは、メインDBを保護する非常に標準的な構成であり、パフォーマンス面でのメリットをもたらしました。ユーザーに面したアプリケーションに影響を与えることなくクエリ(頻繁に集中し、キャッシュプロファイルが異なります)でハマーできます。

+0

ありがとう、それは良い解決策です。小さなフォローアップ:誰かが誤ってフォロワーに破壊的なコマンドを実行した場合、データを再構築する必要がありますか?それが起こった場合、どのように警告することができますか?フォロワーの状態をリーダーと比較する方法があると思いますか? – user2490003

+0

私はそれが読み取り専用なのでフォロワで実行される破壊的なコマンドは不可能だと思っていますが、私は同じことをちょうど今に思っていました.... – manisha

2

できません。
Herokuは、単一のpostgresqlユーザーのみを提供し、テーブルにフルアクセスできます。

関連する問題