【问题标题】:MySQL users privilegesMySQL 用户权限
【发布时间】:2011-01-16 00:07:35
【问题描述】:

表上是否有任何权限或授权命令使用户无法删除其他用户插入的记录(行)。但允许他们删除或更新自己的记录?

谢谢, 斯蒂芬

【问题讨论】:

  • 为每个用户创建一个单独的表? (开个玩笑,那太可怕了(但我已经看到了))
  • 哦,她是如何管理 500 个用户的?

标签: mysql permissions


【解决方案1】:

不,这应该由在 MySQL 之上运行的应用程序解决。

【讨论】:

  • 谢谢 Chuck,但是如果这些用户可以绕过应用层访问本地或远程的 mysql 客户端命令呢?
  • 老实说,您可能需要查看其他解决方案。我不知道有任何数据库可以做到这一点,但如果它们确实存在,我不会感到惊讶。也许如果你给我更多的细节,我可以提供更多的帮助。
  • 我的意思是我的用户正在远程使用桌面应用程序。所以这不仅仅是本地主机用户(我希望它始终是本地主机)。我给了他们 UPDATE 和 INSERT,是的,他们也可以 UPDATE 其他用户的记录。
【解决方案2】:

不完全确定以下内容是否适用于您的情况,但我想我不妨建议它——也许它会有所帮助。您可以为每个用户创建一个可更新的视图(使用sql security definer),该视图仅选择那些用户的记录,并授予用户删除视图而不是它从中选择的表的能力——使用sql security definer,用户应该然后能够从导致从表中删除的视图中删除。每次用户创建新记录时,您还必须更新视图(否则视图在创建时被“冻结”)。请参阅 create viewupdatable views 的文档。

【讨论】:

  • 谢谢亚历克斯。这可能是一个尝试,但对我来说太难维护了。是否有某种基于客户端接口的验证?
  • @Stephen,MySQL 有很多“客户端接口”,我知道没有一个可以执行您想要的细粒度授权检查,但即使您找到了一个用户也可以使用另一个并绕过检查.只有服务器端强制执行才能真正提供帮助,或者您可以(使用任何编程语言)编写自己的专用层以专门与服务器共存,这样任何用户都无法真正连接到 MySQL 数据库,只能您的专用层可以执行您想要的所有业务逻辑。如果您选择这条路线,我预计会有大量工作。
  • 这就是我今天早上的感受。这将是一个仅限 Web 浏览器客户端的解决方案。为了其他所有者的记录,根本没有远程客户端。我阅读了有关 oracle 虚拟私有数据库的信息。但这是我正在开发的 FreeBSD 服务器。
  • 在 FreeBSD 或其他任何地方,您可以将 MySql 设置为仅接受来自只有您的 Web 服务器(Apache 或其他)正在运行的特定节点的连接,并采取其他预防措施防止未经授权的访问。如果您正在实施自己的授权方案,您的应用程序的用户不需要与数据库中定义的用户相对应,因为 SQL 不适合您。
  • 这对我来说是美好的一天,至少我发现您使用 CREATE VIEW 的解决方案非常有用。我试过了,现在用户除了自己的,不能查看其他人的记录。
【解决方案3】:

你应该使用编程语言来实现 acl。像zend 这样的一些库会为你完成这项工作(使用 php 语言)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-06
    • 2012-06-12
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2020-10-08
    相关资源
    最近更新 更多