这可能是一个愚蠢的问题,但我真的没有在网上找到答案。多年来,我总是将一个新的mysql数据库命名为一些神秘的东西。通常每个站点只有一个数据库,使用一个神秘的命名实践 - “x7s9u3or8wj”并不是很难。我总是担心安全性,但从来没有任何具体的数据表明必须以神秘的方式命名数据库。
现在我正在构建一个需要多个数据库的网站。使用神秘的命名会比使用_users _content _common这样的命名方案更难。
用常用词命名我的数据库是否存在安全风险?我的用户名和密码总是神秘而且安全。
谢谢!
答案 0 :(得分:5)
使用有意义的名称命名数据库。隐藏名称不会解决您可能遇到的任何安全问题,也不会使代码不易受SQL注入攻击。一旦我可以注入你的SQL调用,我就可以找到你的数据库名称,无论你做多么愚蠢。
使用非常广泛传播的CMS系统的人有时会重命名DMS和表来尝试混淆尝试着名漏洞的抓取工具,但这不会成为您的一次性系统的问题。
答案 1 :(得分:0)
以密码方式命名您的数据库只能通过模糊处理来增加安全性,并且因为这不是一个可靠的安全功能,所以它没有多大帮助。
无论如何,正如Ray所说,如果你的代码有任何可能授予你访问数据库的漏洞,那么数据库名称'仍然是已知的。
您的安全度量仅适用于您与其他用户共享MySQL服务器的地方,并且您不希望他们知道您在那里存储的内容。
使用安全密码非常好。
请注意,您的脚本将以明文形式存储数据库密码。 因此,如果您与其他用户共享应用程序空间,请确保他们无法访问存储数据库密码的文件。 此外,您可以尝试其他安全措施,例如在建立数据库连接后删除运行时的密码信息。
即在PHP中:
$db = "someCrypticPassword";
$conn = mysql_connect($host, $user, $pass, ...);
$db = "no-real-password";
答案 2 :(得分:0)
我在master数据库中有一个表(masterDB),它包含所有单独的DB的ID,Name和其他数据。每次设置新数据库时,都会使用新记录更新主数据库表。然后,该记录ID将附加到新数据库名称。
masterDB.acct_id=1
masterDB.acct_id=2
etc, this table would hold the account name as well as the ID which is auto_incremented with each new record.
然后,每个新帐户数据库名称都使用标准前缀动态命名,并附加主数据库ID。
acctDBName_1, acctDBName_2 etc..
查找有关潜艇的数据时可以参考主数据库; sub可以只包含与每个子目的相关的数据。 祝你好运。