我想创建我的站点并在页面中有它,以便论坛页面将使用对 mydb.forum_table、mydb_forum_table2 具有权限的论坛 mysql 用户。和个人资料页面使用可以访问 mydb.users 和 mydb.profiefields 等的个人资料用户与照片库、博客、聊天......这是正确的方法吗?我正在考虑最低权限原则,但我想知道为什么我没有看到其他知名的 CMS 这样做!
2 回答
数据库的关键资源之一是连接。通常数据库配置有最大连接数,每次进程需要进行查询时,它都需要一个连接来执行此操作。数据库连接是创建成本高昂的对象——它们需要时间和内存,最重要的是,连接是为特定用户建立的。Web 应用程序普遍接受的“最佳实践”是应用程序在需要数据库连接时检查池中是否存在可用连接。如果连接池中有空闲连接,Web 应用程序将拉取该连接,根据需要使用它,然后将其返回连接池以供重复使用。如果没有空闲连接,应用程序将创建一个新连接,使用它,然后将其放入池中以供重复使用。
如果您正在处理使用多个数据库用户(用于权限管理)的应用程序并且您需要使用连接池,您的应用程序将需要建立许多池(每个用户一个),这通常会导致您的应用程序获取它正在使用的每个数据库用户至少有一个连接。这是低效、容易出错且不必要的复杂。
如果您真的打算限制应用程序对数据的访问,那么您可能应该调查您的数据库对视图的支持程度。如果视图得到很好的支持,那么您可以创建一个视图(或多个视图),根据应用程序的任何给定部分的需要进行定制。
我的建议是坚持使用单个数据库用户,然后使用您刚刚腾出的时间对应用程序进行更多调试。您将获得更好的结果,并且会增加更少的 DBA。
如果我理解正确,问题是关于基于模块使用的表的权限实现模块访问控制。
我认为维护(模块和表之间的链接)会很复杂,并且必须检查模块访问的每个表的权限会很慢。