gpt4 book ai didi

mysql-如何将授权应用于列?

转载 作者:太空宇宙 更新时间:2023-11-03 11:16:48 24 4
gpt4 key购买 nike

用户名 - 撤销对数据库的选择。Person

我设置

GRANT SELECT (id) ON database.Person TO 'username'@'localhost'

不是工作->

SELECT secret FROM Person  // Good!

不是工作->

SELECT id FROM Person WHERE secret = 1  // BAD!

我需要 SELECT id FROM Person WHERE secret = 1 起作用!

最佳答案

我不确定我是否正确理解了这个问题,但它似乎要求能够限制从 Persons 表中选择数据的人,以便他们看不到 Secret 列中的值,但是他们应该允许在查询内部(在 WHERE 子句等中)使用 Secret 列。

CREATE TABLE Person
(
Id ...,
Secret ...,
...
);
REVOKE ALL ON Person FROM PUBLIC;
GRANT SELECT(id) ON Person TO SomeOne;

所以,如果我的解释是正确的,当 SomeOne 选择数据时:

SELECT Id     FROM Person;    -- Works (as required)
SELECT Secret FROM Person; -- Fails (as required)
SELECT Id
FROM Person
WHERE Secret = 1; -- Fails (but we want it to work)

SQL 不允许这样做,并且有充分的理由。基本上,如果您可以根据 Secret 条件查询结果,您可以通过重复查询来确定 Secret 的值,因此应该是 secret 的不会成为 secret 。很容易泄露信息。

查看失败但“不应该”的查询...从其结果中,您知道返回的每个 Id 的 Secret 值为 1,因此对于这些 Id 值,Secret 不再是 secret 。

如果你查看统计数据库,在那里你只被允许搜索聚合数据,你会发现有一种叫做独特追踪器的东西,它基本上可以让你识别一个人的特征,即使你只被允许查看结果集中的聚合(SUM、COUNT、...)值。这是一个比您面临的更复杂的场景(但也是一个迷人的场景)。 C J Date's(绝版)"Introduction to Database Systems, Vol II"讨论了统计数据库和唯一跟踪器。 (Google 搜索“统计数据库唯一跟踪器”会显示更易于访问的有用信息。)

因此,如果我理解了想要的东西,我相信这种愿望被误导了——而且 SQL 标准不允许您寻求的东西。

有什么解决方法吗?

如果查询可以构建到 View 中,创建 View 的人可以访问底层的详细数据并授予对 View 的访问权限,但使用 View 的人不能执行原始查询;这可能会为您提供您寻求的保护。类似的注释适用于存储过程并允许更好地参数化查询。

关于mysql-如何将授权应用于列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4531320/

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