PostgreSQL:仅在一个数据库中授予CRUD操作

PostgreSQL:仅在一个数据库中授予CRUD操作,postgresql,Postgresql,是否有任何方法仅在特定数据库上向用户授予CRUD操作? 让我们假设我的服务器上有两个数据库:database\u allowed和database\u bankeen 我已在postgreSQL上创建了一个用户,并授予此权限: CREATE ROLE crud_user LOGIN PASSWORD '###'; --Next commands are executed connected to the database GRANT CONNECT ON DATABASE database_

是否有任何方法仅在特定数据库上向用户授予CRUD操作? 让我们假设我的服务器上有两个数据库:
database\u allowed
database\u bankeen

我已在postgreSQL上创建了一个用户,并授予此权限:

CREATE ROLE crud_user LOGIN PASSWORD '###';


--Next commands are executed connected to the database
GRANT CONNECT ON DATABASE database_allowed TO crud_user ;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
   GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO crud_user;
但是,在执行命令后,我只得到一个错误:

致命:不允许角色“crud_用户”登录

我知道我可以执行:
ALTER ROLE crud\u user WITH LOGIN
,但是,尽管用户只能在
database\u allowed
上执行crud操作,但他可以连接两者,并查看表名等


是否有方法阻止在所有数据库上授予登录权限?

您的
crud\u用户可以访问其他数据库,因为其
公共
权限:

在创建对象时,PostgreSQL默认将某些类型对象的权限授予
PUBLIC
。默认情况下,在表、表列、序列、外部数据包装器、外部服务器、大型对象、架构或表空间上,不对
PUBLIC
授予任何权限。对于其他类型的对象,授予
PUBLIC
的默认权限如下:
CONNECT
TEMPORARY
(创建临时表)数据库权限<代码>执行
功能和程序特权;以及语言和数据类型(包括域)的
用法
特权。当然,对象所有者可以撤销默认权限和明确授予的权限

()

所以你会想跑的

REVOKE CONNECT ON DATABASE database_forbidden FROM PUBLIC

您的
crud_用户
可以访问其他数据库,因为其
PUBLIC
权限:

在创建对象时,PostgreSQL默认将某些类型对象的权限授予
PUBLIC
。默认情况下,在表、表列、序列、外部数据包装器、外部服务器、大型对象、架构或表空间上,不对
PUBLIC
授予任何权限。对于其他类型的对象,授予
PUBLIC
的默认权限如下:
CONNECT
TEMPORARY
(创建临时表)数据库权限<代码>执行
功能和程序特权;以及语言和数据类型(包括域)的
用法
特权。当然,对象所有者可以撤销默认权限和明确授予的权限

()

所以你会想跑的

REVOKE CONNECT ON DATABASE database_forbidden FROM PUBLIC

您是否
撤销了数据库上的连接\u禁止公开
?@Bergi,这真是个骗局。在默认情况下,他可以登录所有数据库,而我们必须撤销每个数据库上的连接,这有点令人困惑。默认情况下,丹尼似乎更符合逻辑。不管怎样,如果你把评论作为一个答案,我会接受的。感谢您的帮助。您是否
撤销了数据库上的连接\u禁止公开
?@Bergi,这真是个骗局。在默认情况下,他可以登录所有数据库,而我们必须撤销每个数据库上的连接,这有点令人困惑。默认情况下,丹尼似乎更符合逻辑。不管怎样,如果你把评论作为一个答案,我会接受的。谢谢你的帮助。