我想在PostgreSQL中创建一个用户,只能从特定的数据库中进行select。在MySQL中,命令是:
GRANT SELECT ON mydb.* TO 'xxx'@'%' IDENTIFIED BY 'yyy';
PostgreSQL中等价的命令或命令系列是什么?
我试着…
postgres=# CREATE ROLE xxx LOGIN PASSWORD 'yyy';
postgres=# GRANT SELECT ON DATABASE mydb TO xxx;
但是,似乎您可以在数据库上授予的权限只有CREATE、CONNECT、TEMPORARY和TEMP。
摘自回复despesz的链接。
Postgres 9。X似乎有能力完成所请求的事情。参见Grant On Database Objects段落:
http://www.postgresql.org/docs/current/interactive/sql-grant.html
它说:“还有一个选项可以授予一个或多个模式中相同类型的所有对象的特权。该功能目前仅支持表、序列和函数(但请注意,ALL tables被认为包括视图和外部表)。”
本页还讨论了角色和称为“ALL PRIVILEGES”的特权的使用。
同时还介绍了GRANT功能与SQL标准的比较情况。
摘自回复despesz的链接。
Postgres 9。X似乎有能力完成所请求的事情。参见Grant On Database Objects段落:
http://www.postgresql.org/docs/current/interactive/sql-grant.html
它说:“还有一个选项可以授予一个或多个模式中相同类型的所有对象的特权。该功能目前仅支持表、序列和函数(但请注意,ALL tables被认为包括视图和外部表)。”
本页还讨论了角色和称为“ALL PRIVILEGES”的特权的使用。
同时还介绍了GRANT功能与SQL标准的比较情况。
我阅读了所有可能的解决方案,这些都很好,如果你记得在你授予这些东西之前连接到数据库;)无论如何,感谢所有其他解决方案!!
user@server:~$ sudo su - postgres
创建PSQL用户:
postgres@server:~$ createuser --interactive
Enter name of role to add: readonly
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
启动PSQL命令行,为创建的用户设置密码:
postgres@server:~$ psql
psql (10.6 (Ubuntu 10.6-0ubuntu0.18.04.1), server 9.5.14)
Type "help" for help.
postgres=# alter user readonly with password 'readonly';
ALTER ROLE
连接到目标数据库:
postgres=# \c target_database
psql (10.6 (Ubuntu 10.6-0ubuntu0.18.04.1), server 9.5.14)
You are now connected to database "target_database" as user "postgres".
授予所有需要的特权:
target_database=# GRANT CONNECT ON DATABASE target_database TO readonly;
GRANT
target_database=# GRANT USAGE ON SCHEMA public TO readonly ;
GRANT
target_database=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly ;
GRANT
修改目标db public shema的默认权限:
target_database=# ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;
ALTER DEFAULT PRIVILEGES