gpt4 book ai didi

postgresql - Postgres 中的不变性

转载 作者:行者123 更新时间:2023-11-29 14:28:22 27 4
gpt4 key购买 nike

我想创建一个不可变的 Postgres 数据库,用户可以在其中插入和选择(写入和读取)数据,但不能更新或删除数据。

我知道 FOR UPDATE 锁,但我不知道如何使用它。

例如,我有下表,我怎样才能让它不可变(或者,如果我理解正确,我怎样才能永久使用 FOR UPDATE 锁)

CREATE TABLE account(
user_id serial PRIMARY KEY,
username VARCHAR (50) UNIQUE NOT NULL,
password VARCHAR (50) NOT NULL,
email VARCHAR (355) UNIQUE NOT NULL,
created_on TIMESTAMP NOT NULL,
last_login TIMESTAMP
);

最佳答案

解决方案是只授予访问数据库的用户对涉及的表的INSERTSELECT 权限。

锁不是拒绝某人访问的工具,而是防止同时发生冲突数据修改的短期屏障。

这是一个例子:

CREATE TABLE sensitive (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
available text,
restricted text
);

现在我想允许 someuser 插入数据并读取和更新除 restricted 之外的所有列,我想防止自己删除该表中的数据:

/* the CREATE TABLE above was run by user "laurenz" */
REVOKE DELETE ON sensitive FROM laurenz;

GRANT INSERT ON sensitive TO someuser;
GRANT SELECT (id, available), UPDATE (id, available) ON sensitive TO someuser;

关于postgresql - Postgres 中的不变性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55229171/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com