Postgresql的数据库权限

Postgresql的数据库权限,sql,postgresql,permissions,Sql,Postgresql,Permissions,是否可以通过指定数据库而不是表来限制用户对postgresql数据库的访问 我明白这句话: GRANT ALL ON tableName TO joeuser 允许此用户访问此表并执行任何他们想要的操作。但是,我希望允许用户访问包含tableName(以及databaseName中的所有表)的数据库databaseName,但不是我的postgresql server上的所有数据库。不是真的,不是。向数据库授予权限: GRANT ALL ON DATABASE databaseName TO

是否可以通过指定数据库而不是表来限制用户对postgresql数据库的访问

我明白这句话:

GRANT ALL ON tableName TO joeuser

允许此用户访问此表并执行任何他们想要的操作。但是,我希望允许用户访问包含
tableName
(以及
databaseName
中的所有表)的数据库
databaseName
,但不是我的postgresql server上的所有数据库。

不是真的,不是。向数据库授予权限:

GRANT ALL ON DATABASE databaseName TO joeuser;

不会自动授予数据库中对象的权限;授予数据库中当前每个对象的权限不会自动授予将来可能创建的任何对象的权限。

不清楚您到底想要什么。这可能是因为您正试图找到一条SQL语句来处理您现在和将来的所有特权。SQL特权通常不是这样工作的

根据版本的不同,您可以通过两种方式控制与数据库的连接

  • 通过编辑pg_hba.conf。(可能不适合您的情况。)
  • 通过一项声明。(自8.2版起)
您可以为表、视图、序列和函数创建。(版本9.0+)


alterdefaultprivileges
是对SQL的PostgreSQL扩展。

谢谢@ruakh。我希望用户也能够创建表;所以我想我必须允许他们完全访问服务器。@celenius:事实上,创建表的能力对你来说可能不会有问题;为此,您只需要给joeuser模式的CREATE特权,然后他就可以在该模式上创建表。问题在于让他/她访问其他用户创建的表(和模式)。顺便说一句,无论您采取什么方法,您都会发现有帮助。这是否意味着我需要创建一个新的模式,而不是
public
?目前,我只是使用默认设置,不一定需要一条SQL语句来完成。我想要的是允许用户对服务器上的一个数据库拥有完全权限,而不能编辑该服务器上的任何其他数据库。我无法通过
pg_hba.conf
控制它,因为我无法控制ip地址。要获得表、视图、序列和函数的完全权限,可以创建新数据库,更改默认权限,断开旧数据库与所有用户的连接,将其所有对象加载到新数据库,重命名旧数据库(稍后删除),并重命名新数据库。您可能需要撤销其他数据库上的连接。其中可能有几个“陷阱”,因为我建议的想法没有测试它。请自己测试它,并让我们知道它是如何工作的。