在设置数据库时(例如在MySQL中),数据库名称的长度有多重要?
my_database_has_a_really_long_name
和my_db
之间是否存在任何(可衡量的)差异?
特别是关于安全性和查询效果?
答案 0 :(得分:7)
1)数据库通常对名称值的字符长度有限制,而我的cPanel MySQL限制为16个字符。
2)该名称的唯一原因是识别数据库。您应该能够识别具有16-32个字符的数据库。
对于具有不同名称的查询或证券的性能没有影响,因为
i)查询的性能意味着如果数据库名称的长度影响性能 - 好吧 - 它就不会发生,它是字母数字字符的静态字符串引用。而已。处理器每秒处理数百万/十亿比特,每秒钟,为此调用添加一些额外的比特是绝对可以忽略不计的。
ii)安全性方面,数据库的名称永远不会被放到浏览器或最终用户的任何地方。如果存在涉及该名称的安全问题,那是因为无论您的数据库名称有多长,都已被破坏。
答案 1 :(得分:2)
您应该拥有一个简短,有意义的数据库名称。它只标识您的数据库。如果它可能违反某些限制,则长度很重要,但查询性能不会受到影响,也不会受到安全性的影响。如果已经有一个与数据库的连接,那么他/她可以使用
获取数据库名称show databases;
命令。因此,您的架构将有助于您的表现。您需要一个良好的数据库密码才能获得安全性,并且需要加密用户密码。
答案 2 :(得分:0)
从MySQL版本5开始,MySQL包含一个名为INFORMATION_SCHEMA的数据库,其中包含用户可以访问的所有数据库名,表名和列名。
因此,即使攻击者无法按@Lajos Arpad的建议执行show databases
,因为他们没有直接连接,只有SQL注入,他们可以获取所有数据库名称无论如何他们都可以访问。
对于以前版本的MySQL,创建一个难以猜测名称的数据库可能会增加一点点安全性。例如,如果攻击者在数据库boring_stuff
中进行了SQL注入,并且猜到了数据库名称user
(包含相关表等),则可能已将数据库重命名为something_secret
攻击者访问它。但是,更好的访问控制(为boring_stuff
和something_secret
创建单独的数据库用户)也是如此,这比默默无闻的安全性要好。
tl; dr :不,长数据库名称从未真正提高过安全性,而且自MySQL5以来它们肯定没有,因为所有数据库用户都可以访问所有数据库用户。表名和列名也一样。