我仔细查阅了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%
So...
postgres@myUbuntuLaptop% createuser pavankat
Shall the new role be a superuser? (y/n) y
postgres@myUbuntuLaptop%
这会获取所有的角色
\du
显示 pavankat,因此该角色被创建。
这个可以工作:
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/ 并将 shell 脚本复制到 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 | {}
我没有更多的想法了。请帮帮我?
圣诞快乐和节日愉快!
\du
报告授予的权限,但它不会像\z
或\dn+
等命令一样。请参阅psql的手册。 - Daniel Vérité