为我的应用程序的每个问题创建一个不同的用户!

时间:2010-07-30 02:06:23

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

我想创建我的网站,并在页面中有这个,以便论坛页面将使用具有mydb.forum_table,mydb_forum_table2权限的论坛mysql用户。 和配置文件页面使用有权访问mydb.users和mydb.profiefields的配置文件用户 以及照相馆,博客,聊天和... 这是正确的做法!我正在考虑最少特权的原则,但我想知道为什么我没有看到其他知名的CMS做到这一点!

2 个答案:

答案 0 :(得分:1)

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

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

如果您真的想要限制应用程序对数据的访问权限,那么您应该调查数据库对视图的支持程度。如果视图得到良好支持,那么您可以创建一个视图(或多个视图),这些视图可以根据应用程序的任何给定部分进行自定义。

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

答案 1 :(得分:0)

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

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