oracle 在PostgreSQL中向用户授予ALTER权限/CREATE特定对象

tyky79it  于 2023-11-17  发布在  Oracle
关注(0)|答案(1)|浏览(187)

我曾经与Oracle合作,在那里对我来说很明显如何做这件事,但我不知道如何在PostgreSQL中实现同样的功能。

1)假设USER1是在模式USER1中创建的TEST_TABLE的所有者。我希望USER2能够ALTER user1.test_table(仅此权限,仅此而已)。

CREATE user1; 
CREATE TABLE test_table(a INT);
CREATE user2;

字符串
在Oracle中足以作为USER1执行:

GRANT ALTER ON test_table TO user2;


那么PostgreSQL呢?
这里的解决方案不起作用,因为common role能够做的不仅仅是ALTER:ALTER postgres table owned by user from the same group

2)如何授予USER1仅创建其schema中特定对象的权限?例如:

如Oracle中的数据库:

GRANT CREATE TABLE TO USER1;


现在在Oracle中,用户1只能在他的模式中创建表,而不能创建SEQUENCES、VIEWS等。
Postgres怎么样?

GRANT CREATE ON SCHEMA USER1 TO USER1;


更强大,我不需要它

8e2ybdfx

8e2ybdfx1#

下面是如何在PostgreSQL中实现你提到的功能:
1.授予备用权限:要使给予USER2仅修改USER1拥有的单个表的权限,必须执行两个步骤。首先,通过授予USER2 USAGE权限,使给予USER2访问该表的架构的权限,从而使其能够查看该架构中的对象。其次,给予USER2对该特定表的ALTER权限。

-- Grant USAGE on schema
GRANT USAGE ON SCHEMA user1 TO user2;

-- Grant ALTER on the specific table
GRANT ALTER ON TABLE user1.test_table TO user2;

字符串
通过这种配置,可以保证USER2能够修改test_table,但不能在模式中获得更多特权。
1.仅允许USER1创建表:为USER1创建一个不同的方案,并将其设为默认方案,以便仅允许他们创建表,而不允许创建其他对象类型,如序列或视图。接下来,为USER1提供对该方案的CREATE权限。

-- Create a schema for USER1
CREATE SCHEMA user1;

-- Set USER1's default schema
ALTER USER user1 SET search_path = user1;

-- Grant CREATE privilege on the schema
GRANT CREATE ON SCHEMA user1 TO user1;


USER1能够使用此配置在其模式中构造表,但无法构建其他对象类型,如视图或序列。

相关问题