web-dev-qa-db-ja.com

postgresqlデータベースにユーザー権限を付与できません(Railsアプリの場合)

http://www.postgresql.org/docs/current/interactive/app-psql.html#APP-PSQL-META-COMMANDSf および https:// www .digitalocean.com/community/articles/how-to-use-roles-and-manage-grant-permissions-in-postgresql-on-a-vps--2 しかし、これを機能させることができませんでした。

Postgresをローカルで動作させるためにこれを行いました: https://askubuntu.com/questions/42013/problem-installing-and-configuring-postgresql

pavan@myUbuntuLaptop% which psql
/usr/bin/psql

これは私を捕まえました:

pavan@myUbuntuLaptop% Sudo su - postgres
[Sudo] password for pavan: 
postgres@myUbuntuLaptop% 

そう...

postgres@myUbuntuLaptop% createuser pavankat
Shall the new role be a superuser? (y/n) y
postgres@myUbuntuLaptop% 

これはすべての役割を取得します

\du

パバンカットを示しているので、役割が作られました

これは動作します:

postgres=# CREATE database lateraldev;
CREATE DATABASE
postgres=# \l

次に、ユーザーpavankatにlateraldevに特権を付与しようとします。

これは機能しません:

GRANT RULE ON lateraldev to pavankat

動作しません:

GRANT ALL ON lateraldev TO pavankat;

動作しません:

postgres=# GRANT ALL ON lateraldev TO pavankat;
ERROR:  relation "lateraldev" does not exist

これは機能しているように見えましたが、\ duは何も表示しませんでした。

postgres=# GRANT ALL ON DATABASE lateraldev TO pavankat;
GRANT

これと同じ、それをしません:

postgres=# GRANT ALL ON ALL TABLES IN SCHEMA public TO pavankat;
GRANT
postgres=# GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO pavankat;
GRANT
postgres=# GRANT ALL ON ALL FUNCTIONS IN SCHEMA public TO pavankat;
GRANT
postgres=# \du

私はこの投稿を使用しました: http://imaginaryrobots.wordpress.com/2010/03/10/grant-all-in-postgres/ とシェルスクリプトをRailsアプリ。

次に実行しました(ファイルを実行可能にするため):

pavan@myUbuntuLaptop% chmod 755 give_permissions_script.sh

そしてそれは動作しません:

postgres@myUbuntuLaptop$ ./give_permissions_script.sh
GRANT ALL ON DATABASE lateraldev TO pavankat;
could not change directory to "/home/pavan/Dropbox/venturelateral"
could not change directory to "/home/pavan/Dropbox/venturelateral"

これを試してみました: http://smokeandumami.com/2009/11/11/grant-permissions-on-all-tables-and-sequences-in-postgresql/ そしてそれは何かをしたようです、しかし機能しません:

pavan@myUbuntuLaptop% chmod 755 give_permissions_script2.sh
pavan@myUbuntuLaptop% ./give_permissions_script2.sh
GRANT SELECT,UPDATE,DELETE,INSERT ON TABLE public.relname to pavankat;

見る:

postgres=# grant all privileges on database lateraldev to pavan;
GRANT
postgres=# \du

これも機能しません:最初にデータベースに接続します:

postgres=# psql lateraldev

lateraldev=# GRANT ALL ON DATABASE lateraldev TO pavankat;
GRANT
lateraldev=# \du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 pavan     | Superuser, Create role, Create DB, Replication | {}
 pavankat  | Superuser, Create role, Create DB, Replication | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}

私はアイデアがありません。お願い助けて?

メリークリスマスとハッピーホリデー!

19
Pavan Katepalli

やってみました:

--Change the database ownership
alter database lateraldev owner to pavan;

--and do the same for all tables
psql -tc "select 'alter table ' || tablename || ' owner to pavan;' from pg_tables where schemaname not in ('pg_catalog', 'information_schema');" lateraldev | psql -a lateraldev
21
Bruno

少し掘り下げた後。これはpostgresウェブサイトで見つけました。基本的に、テーブル名以外は、パーミッションを付与するときに明示的にタイプを呼び出す必要があります。

GRANT ALL PRIVILEGES ON DATABASE my_newly_created_db_name TO my_user_name;

http://www.postgresql.org/message-id/[email protected]

13
user1230795

CREATEDBパーミッションを持つユーザーを作成してみてください。そうすれば、そのユーザーでデータベースを作成できます。ユーザーはそれ以降、そのデータベースに対する権限を持ちます。

CREATE USER myuser CREATEDB;

これは完璧な解決策ではないことは知っていますが、これがあなたに役立つことを願っています

-ブライアン

11
OneChillDude