mysql - 每个用户在使用单个应用程序时是否应该获得自己的数据库用户/密码?

标签 mysql database security database-design odbc

我想问的是......

用户只能通过我的应用程序访问数据库。应用程序本身允许管理员用户创建/修改/删除用户并授予他们某些权限。因此,我有一个包含每个用户登录名和密码的表。

我仍在开发该应用程序,因此它当前以 root 身份登录,无需密码。显然,我会改变这一点,但最好的做法是什么?我应该有应用程序使用的单个数据库用户和密码,还是应该在每次创建(或修改)应用程序用户时为数据库创建一个单独的用户?后者似乎需要更多工作。

最佳答案

您的应用程序当然应该为每个用户提供单独的用户 ID 和密码。鉴于此,应用程序在与数据库通信时没有理由拥有多个用户 ID。只要应用程序的安全性得到正确实现,拥有多个数据库用户 ID 就不会带来任何好处。

为每个用户提供自己的数据库用户 ID 肯定会是一个巨大的痛苦,因为它可能涉及各种特殊情况和异常(exception)。例如,要登录您的应用程序,应用程序必须验证用户的 ID 和密码。如果用户无权访问密码表,它将如何做到这一点?但如果有什么需要防止未经授权的访问,那就是密码表。因此,您必须使用一个用户 ID 进行登录,然后将其删除并提供另一个用户 ID。很可能存在允许给定用户在一个上下文中访问但在另一上下文中不允许访问的其他表。会计部门可能需要查看当年支付的工资总额,但也许他们看不到个别员工的工资。员工可能能够访问有关自己利益的数据,但无法访问其他员工的利益数据。等等

我能想到的唯一异常(exception)是如果您允许对数据库进行某种通用访问。以最极端的情况为例,如果您有一个屏幕,用户可以在其中输入任意 SQL 查询,然后您将执行该查询。在这种情况下,理论上您可以让应用程序分析查询并尝试应用安全规则,但这需要您的应用程序嵌入大量有关 SQL 的知识。在这种情况下,您最好为每个用户提供自己的数据库用户 ID,并将安全规则放入数据库引擎中。

关于mysql - 每个用户在使用单个应用程序时是否应该获得自己的数据库用户/密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5986580/

相关文章:

php - 删除重复记录而不创建临时表

php - 如何让 Zend_Db 仅从大型查询中选择一列?

java - tomcat ssl客户端握手java错误

php - 阻止外部访问 PHP 脚本但允许 AJAX

phpMyAdmin ("This type of clause was previously parsed"中的 MySQL 解析错误)

php - 为网页存储图像

MySQL 与 Microsoft SQL

mysql - 如何创建具有一列作为其他列总和的表?

sql - 生产BoM爆破演练幻影BoM

javascript - 使用 AJAX 调用恢复 session