当安装一个Web应用程序,其中一个用户被用来与单个数据库交谈(比如MySQL,但是这也可以应用于其他的RDBMS),你通常会有一系列的事件:
CREATE DATABASE wordpress CHARACTER SET utf8; GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY 'hunter2';
有些指南build议对数据库名称使用不同的用户名, 其他人build议使用不同的名称,例如用户名为“appuser”,数据库名称为“app”。
使用相同的名称是否有明显的技术缺陷? 有没有这样做可能会造成混乱?
编辑:我知道,这是可疑的安全实践,你应该命名您的数据库fhqwhgads和您的用户flobadob ; 然而,(a)默默无闻是一个值得怀疑的工具,(b)这是每个Web应用程序在其文档中给出的例子。
使用与数据库名称相同的用户名称的缺点就是它太明显了。 如果你看看访问日志,你会发现攻击者会经常试用这个组合,如果你的名字是正确的,那么你已经参与进来了。除此之外,你使用什么名字并没有多大区别,尽pipe有些东西可以说因为不使用字典单词。
混淆数据库提供约15-30秒的防御,如果妥协和约1234783562387561235小时的挫折。
我认为你把angular色绑定到用户名。 就像是:
app_role
要么:
wordpress_www wordpress_dba wordpress_cron
如果我看到一个wordpress用户,我知道一些事情是不对的。 使用*_dba约定有助于使Web用户不应拥有数据库对象,只有*_dba应该这样做。 对于用户,您只需使用他们的网站用户名。 这样简单的约定使得pipe理权限变得容易,特别是当与SCHEMA结合使用时。
这是我正在做的一个示例项目,完全是这样的:
https://github.com/sean-/flask-skeleton/blob/master/sql/create_roles.sql
https://github.com/sean-/flask-skeleton/blob/master/sql/perms.sql
我认为缺点不在技术层面,而更多的是pipe理和/或安全层面。 你可以认为,用户名==数据库名称是pipe理简单,知道什么帐户访问什么数据库,但也使入侵者更容易猜测有效的帐户名称与更好的成功率。 通常我会在目标和应用程序后缀帐户。 像_wp这样的东西可以减less直观的访问,但对于数据库pipe理员来说仍然是可见的,可以快速确定帐户的性质。