“如何阻止”;选择*”;但同时,在PostgreSQL中应授予选择/读取权限

“如何阻止”;选择*”;但同时,在PostgreSQL中应授予选择/读取权限,sql,postgresql,grant,Sql,Postgresql,Grant,我不是数据库专家,也不是fullstack开发人员。 我在PostgreSQL中有一个数据库,我需要以只读模式向开发人员提供数据库访问权限,但如果我授予他们选择/只读权限,从编程的角度讲,他们将能够运行查询SELECT*fromtable name,并且他们还将以JSON格式获取整个数据,因为他们也在处理API 所以我需要给他们只读/选择权限,同时我需要阻止SELECT*from Tablename我认为这是不可能的,而且可能不是,但你可以非常接近 如果您不是在表本身上授予select,而是在该

我不是数据库专家,也不是fullstack开发人员。 我在PostgreSQL中有一个数据库,我需要以只读模式向开发人员提供数据库访问权限,但如果我授予他们选择/只读权限,从编程的角度讲,他们将能够运行查询
SELECT*fromtable name
,并且他们还将以JSON格式获取整个数据,因为他们也在处理API


所以我需要给他们只读/选择权限,同时我需要阻止
SELECT*from Tablename

我认为这是不可能的,而且可能不是,但你可以非常接近

如果您不是在表本身上授予select,而是在该表拥有的列的适当子集上授予开发人员select。他们将无法发出
select*
查询

因此,您需要添加一个额外的列,该列不用于数据,但可以拒绝来自devs的访问。(可选)可以添加检查约束,以确保未使用的列始终为null

grant命令如下所示:

GRANT SELECT ( list,of,"column",names) ON "table name" TO developers;

它必须是一个子集,如果您授予所有列,它们将被允许
选择*

您自相矛盾。为
select*
授予特权和“读取/选择”特权有什么区别?是否只向某些列授予选择权限?因此,如果它们
select column1,column2。。从tablename
只是不
从tablename
选择*?Hello a_horse_与_no_name,我想在所有列中授予SELECT权限,但是开发人员应该不能从nodejs脚本查询整个数据,如果他们能够使用SELECT*,那么他们可以获得JSON格式的整个数据。这些问题的目的是开发团队不应该能够使用SELECT*,同时他也不应该能够在表中执行CRUD操作,所以这就是为什么要使用只读/选择权限。您好,Martin Navarro,如果他们使用SELECT column1,column2,而不仅仅是从tablename中选择*,这完全可以。“我想向所有列授予select权限”与“他们不应该能够使用
select*
”这句话相矛盾。如果您授予他们访问所有列的权限,他们就无法阻止
select*
,因为这意味着“所有列”“嗨,Jasen,当我在实验室进行测试时,你提供的解决方案运行良好。还有一件事,现在SELECT*不显示数据“很棒”,但当我只选择我授予SELECT权限的各个列时,它仍然会显示整个数据,所以只想检查是否有可能限制显示/生成的行数。假设在200行中,当发出SELECT Columns命令时,开发人员只能看到120行。也许您可以授予他们访问视图的权限?