Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 当每个用户使用单个应用程序时,他们是否应该获得自己的数据库用户/密码?_Mysql_Database_Security_Database Design_Odbc - Fatal编程技术网

Mysql 当每个用户使用单个应用程序时,他们是否应该获得自己的数据库用户/密码?

Mysql 当每个用户使用单个应用程序时,他们是否应该获得自己的数据库用户/密码?,mysql,database,security,database-design,odbc,Mysql,Database,Security,Database Design,Odbc,我想问的是 用户只能通过我的应用程序访问数据库。应用程序本身允许管理员用户创建/修改/删除用户,并授予他们某些权限。因此,我有一个表,其中包含每个用户的登录名和密码 我仍在开发该应用程序,因此它目前以root用户身份登录,没有密码。显然,我会改变这一点,但最好的做法是什么?我应该拥有应用程序使用的单个数据库用户和密码,还是应该在每次创建(或修改)应用程序的用户时为数据库创建单独的用户?后者似乎需要更多的工作。没有理由为每个用户创建数据库登录。真正与数据库交互的是你的应用程序,而不是用户。创建额外

我想问的是

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


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

没有理由为每个用户创建数据库登录。真正与数据库交互的是你的应用程序,而不是用户。创建额外的登录只会使您的数据库更加不安全。

简短回答:在使用internet之前,是的。互联网之后:没有人这样做,但这仍然是完全可以接受的

互联网时代的普遍做法是将你的应用程序视为用户,并给应用程序一个登录。唯一的实际好处是连接池的一些性能提升。可感知但虚幻的好处是安全

理解安全性的角度需要认识到,所有的安全性最终都归结为谁可以从哪些表、行和列中读写。要了解这是如何工作的,考虑一个被授权操作高度安全表的用户,以及另一个用户甚至看不到该表。权限较低的用户成功地管理了SQL注入攻击,试图清除安全表,但失败了,因为数据库阻止该用户访问该表


值得注意的是,除了连接池非常重要外,没有任何技术理由使用单一登录。许多互联网时代的程序员对数据库了解甚少,因此解释如何使用其内置的安全性是一场艰苦的战斗,与许多预先设想的和不正确的想法相比。

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

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


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

每个应用程序使用不同的数据库用户/密码,就像我所想的那样。我只是好奇这是否违背了人们的智慧。谢谢-1这不是常见做法,但与安全性无关。注释应该是这样的:使用本机数据库登录不是常见做法,但与安全性无关。@Ken Downs-我不同意。然而,我真的不想讨论这个问题。@Sk8erPeter-Jay就这个话题写了一个很好的答案。回想起来,这本身可能不会增加您的安全风险-但是,必须管理额外的数据库登录将需要相当数量的额外代码;如果做得不对,很容易造成安全漏洞。特别是当您计划依赖每个用户的数据库表级权限时。