【问题标题】:Creating a different user for each concern of my application!为我的应用程序的每个关注点创建不同的用户!
【发布时间】:2010-07-30 02:06:22
【问题描述】:

我想创建我的站点并在页面中有它,以便论坛页面将使用对 mydb.forum_table、mydb_forum_table2 具有权限的论坛 mysql 用户。 和配置文件页面使用有权访问 mydb.users 和 mydb.profiefields 的配置文件用户 等等,包括照片库、博客、聊天和...... 这是正确的方法吗!我正在考虑最低权限原则,但我想知道为什么我没有看到其他知名的 CMS 这样做!

【问题讨论】:

  • 这有问题吗?但我认为您正在查看的是创建角色并将它们与您的用户相关联。你的最小特权原则是好的。你绝对可以在你的应用程序中实现它。
  • Àt 17%,您应该更频繁地Accept 回答。或者,如果您经常提出比较笼统的开放性问题,请使用社区 Wiki。
  • 我给了你一个加分先生。100% 现在可以有更多的声望!我不知道程序员的整体完整性围绕着他们的堆栈溢出声誉。
  • @softwaregeek 是的,这是一个问题,Craig trader 得到了它并给了我答案!

标签: sql mysql database-design authorization least-privilege


【解决方案1】:

数据库的关键资源之一是连接。通常数据库配置了最大连接数,每次进程需要进行查询时,它都需要一个连接来执行此操作。创建数据库连接是昂贵的对象——它们需要时间和内存,最重要的是,连接是为特定用户建立的。 Web 应用程序普遍接受的“最佳实践”是应用程序在需要数据库连接时检查池中是否存在可用连接。如果连接池中有空闲连接,Web 应用程序将拉取该连接,根据需要使用它,然后将其返回连接池以供重复使用。如果没有空闲连接,应用程序将创建一个新连接,使用它,然后将其放入池中以供重复使用。

如果您正在处理使用多个数据库用户(用于权限管理)的应用程序并且您需要使用连接池,那么您的应用程序将需要建立许多池(每个用户一个),这通常会导致您的应用程序为其正在使用的每个数据库用户获取至少一个连接。这是低效、容易出错且不必要的复杂。

如果您真的打算限制应用程序对数据的访问,那么您可能应该调查一下您的数据库对视图的支持程度。如果视图得到很好的支持,那么您可以创建一个(或多个)视图,根据应用程序的任何给定部分的需求进行定制。

我的建议是坚持使用单个数据库用户,然后利用您刚刚腾出的时间对应用程序进行更多调试。您将获得更好的结果,并且会增加更少的 DBA。

【讨论】:

    【解决方案2】:

    如果我理解正确,问题是关于基于模块使用的表的权限来实现模块访问控制。

    我认为维护(模块和表之间的链接)会很复杂,并且必须检查模块访问的每个表的权限会很慢。

    【讨论】:

    • 你用这个答案弥补了你的评论!
    • 实际上,任何现代数据库引擎都旨在快速有效地进行此类检查。问题出在其他地方(见我的回答)。
    猜你喜欢
    • 1970-01-01
    • 2015-04-12
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 2019-01-20
    • 2015-03-21
    相关资源
    最近更新 更多