gpt4 book ai didi

postgresql - 保护 SELECT 调用中的列/键

转载 作者:行者123 更新时间:2023-11-29 14:34:51 25 4
gpt4 key购买 nike

假设我有一个(过度简化、不安全的)表格,如下所示:

CREATE TABLE users (id SERIAL PRIMARY KEY, user VARCHAR(25), _password VARCHAR(25), email VARCHAR(80));

我想在列 _password 上添加额外的故障保护这可以防止它在 SELECT * FROM users 上返回调用,这在 PostgreSQL 中是否可行?如果可行,如何实现?

我尝试了一些版本的 https://stackoverflow.com/a/7250991/929999 ,但这可能不是我要找的。但这让我想到可能会创建一个约束。我找不到任何人尝试过这个或以前问过这个问题,所以我有点迷失了方向,因为我无论如何都不是数据库专家。

所以现在我使用一个名为 .safe_dump() 的函数将数据库中的所有结果转储到 Python 中的自定义字典占位符中删除所有以 _<key> 开头的键.

而且我想我可以创建一个包含敏感键列表的单独表,并匹配每个 SELECT 上的那些通过 JOIN 声明或类似的,但这只会转移从 SELECT 中意外检索敏感 key 的风险呼吁保持“JOIN 表”更新。

PostgreSQL 中是否有一个标志可以过滤掉试图访问 key 的 block 调用,同时仍然允许它在 WHERE x=y 上使用?条款?

最佳答案

您可以拒绝该列的权限:

CREATE TABLE users (
id SERIAL PRIMARY KEY,
"user" VARCHAR(25),
_password VARCHAR(25),
email VARCHAR(80)
);

REVOKE ALL ON users FROM laurenz;

GRANT SELECT (id, "user", email) ON users TO public;

test=> SELECT * FROM users;
ERROR: permission denied for relation users
test=> SELECT id, "user", email FROM users;
id | user | email
----+------+-------
(0 rows)

如果您希望从输出中排除该列,请使用 View :

CREATE VIEW users_v AS SELECT id, "user", email FROM users;

GRANT SELECT ON users_v TO PUBLIC;

关于postgresql - 保护 SELECT 调用中的列/键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46743121/

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