【问题标题】:How to enable users only to view certain rows in a table如何使用户只能查看表中的某些行
【发布时间】:2023-03-15 05:11:01
【问题描述】:

我目前有两张桌子。一个是帐户,一个是 tbl_units_info。我的老板希望我这样做,以便限制帐户读取表格中的某些行。坦率地说,我认为我的老板不知道他在说什么,但我希望这里有人能证明我错了。

例如accountname krikara只能查看tbl_units_info表中TBID列为0909的条目。

这甚至可能吗?让 krikara 只能查看该表中列 TBID = 0909 的行?

【问题讨论】:

  • 创建一个视图怎么样?
  • 是的。视图应该可以完成这项工作。
  • 这取决于他们是否可以访问实际的数据库,或者他们是否只能通过您的代码访问它。如果这不可行,那么每个有权访问(比如说)他的银行账户数据的人都可以查看该表中的所有银行账户。
  • 用户可以访问实际的数据库。另外,有没有办法让用户可以读取/写入具有 TBID 0909 的行

标签: mysql sql


【解决方案1】:

由于SELECT 权限具有表级别,因此无法在 DBMS 级别上简单实现。您不能限制行读取。这很好,我认为 - 因为数据可以更改,所以一般来说行限制没有可靠的条件(因此,在 DBMS 级别上不可能有有效的实现)。

但是,您可以使用 VIEW - 但它是一个中间点,不是常见的解决方案(我仍然认为它不会有助于跟踪行更改,但由于您的应用程序逻辑,我可能错了)

您可以尝试在您的应用程序中实现它,但它仍然存在我上面描述的问题:在表中,数据正在更改。您可能很难跟踪所有更改。我认为你可以在两个(几个)表上分开你的行,然后建立你的权限模型。但是 - 如果一些基本相似的实体必须具有不同的权限 - 也许您应该重新考虑应用程序安全模型?

【讨论】:

  • 您提出了一个有效的观点。 TBID代表单位所在的位置,所以单位切换城市时,会得到一个新的TBID。话虽如此,如果一个单位在一天内旅行了 2 个城市,则负责最后一个城市的用户将是唯一拥有该单位信息读取权限的用户。这整个系统是有缺陷的。至于安全模型,目前还没有安全模型。我的老板不相信安全。事情需要改变
【解决方案2】:

您可以通过仅授予帐户对视图而不是整个表的读取权限来解决此问题。

CREATE VIEW `tbl_units_info_krikara` AS
SELECT * FROM `tbl_units_ino` WHERE `TBID`='0909';

然后将相应的权限分配给您的用户。

【讨论】:

  • 所以 krikara 可以被拒绝访问表 tbl 单元信息,但可以访问 tbl 单元信息视图?
  • @krikara 根据this question,这是可能的。
猜你喜欢
  • 2020-10-09
  • 1970-01-01
  • 2018-05-31
  • 2010-11-14
  • 2020-11-13
  • 1970-01-01
  • 2021-01-02
  • 2017-07-29
  • 1970-01-01
相关资源
最近更新 更多