如何限制 MySQL 用户对行执行更新或删除? [复制]

Posted

技术标签:

【中文标题】如何限制 MySQL 用户对行执行更新或删除? [复制]【英文标题】:How can I restrict a MySQL user to perform update or delete on rows? [duplicate] 【发布时间】:2020-10-16 13:53:20 【问题描述】:

好的,所以我问这个问题可能是错误的。但是我有一个场景,一个表被多个团队使用,所以我们遇到了一个问题,用户正在更新其他团队的记录,这当然是错误的。

所以我想我们可以在我的表中添加 一个额外的列,其值为 团队名称,并且当任何用户更新记录时,他们需要提供他们的 团队名称 在 where 子句中,通过创建与团队数量一样多的用户帐户并授予这些用户更新删除权限特定于该团队列。有可能吗?

或者有人有其他想法吗?

【问题讨论】:

多个团队使用同一张表如何限制他们更新其他人的记录**使我的问题更具体。 创建一个只选择当前用户行的视图。授予视图而不是表的权限。 谢谢@jarlh 我明白了。这是我已经实现的:创建了一个额外的列作为团队,其中值将是团队名称,我创建了与团队一样多的视图,然后创建了与团队一样多的用户。然后仅授予这些用户对其各自团队视图的 SELECT、INSERT、UPDATE、DELETE 权限,以便现在他们将仅在其视图中运行查询,这将影响其团队数据的实际表,即使他们运行了一些错误的查询 【参考方案1】:

mysql 中没有基于行权限的功能(您可以对列拥有特定权限),据我所知,没有任何关系数据库具有此功能。基于行的权限不是关系数据库模型的一部分,就像大多数汽车来自没有鱼缸的工厂一样。

在最低级别,有人必须让球队“打得好”。好消息是您不必更改任何其他使用数据库的内容。坏消息是一些用户只是混蛋。下一个级别是以某种方式让某人在进入数据库之前批准更新/删除,这在实施/使用/管理后是一个痛苦。您可以使用视图来混淆用户的表​​详细信息,但您将更改基础架构。

最简单的答案是让每个团队的人负责更新/删除,使用触发器记录更改的人员和内容(将更改的内容保存在辅助表中),并在每次采取行动时通知他们的管理层另一个团队的数据。需要更改基础架构,需要更改文化,数据丢失最少,但仍然很痛苦(欢迎来到 DBA 生活)。

【讨论】:

据我所知,没有任何关系数据库具备这种能力”——嗯,Postgres、Oracle、SQL Server 和 DB 确实具备这种能力。 mysql 通过视图也是如此。 谢谢你们!!我能够实现它。

以上是关于如何限制 MySQL 用户对行执行更新或删除? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

数据库部分

MySQL:如果值存在,则对行进行更新,如果值不存在,则插入 [重复]

Parse.com 限制帖子?

如何在 MySQL 中对行进行求和

Ansible 从MySQL数据库添加或删除用户

带有内部连接和限制的mysql删除