mysql - PostgreSQL 与 MySQL 等相比的安全性

标签 mysql security postgresql sql-injection

面对一些关于 PostgreSQL 不安全的大胆声明(同时称赞 MySQL 的安全性),我想听听其他人的意见:

  • “PostgreSQL 由于多选而变得不安全”——我假设“多选”就是我所说的“子选择”,但我可能错了。当前的 MySQL 版本支持子选择,但根据 [1] 某些库可能不支持或可能已禁用它们。这可能是 claim 的原因,还是我忽略了这里的某些内容?
  • “使用 PostgreSQL 最容易利用 SQL 注入(inject)”- 恕我直言,SQL 注入(inject)是一个应用程序/库问题,只是有效的 SQL 查询,所以数据库之间没有真正的区别,对吧?!
  • “我喜欢 PostgreSQL 获得 root 权限,因为它有太多的安全漏洞”——首先我假设 PostgreSQL 的安全跟踪记录与 MySQL 的一样好(在这方面真的找不到太多)?其次,以 root 身份运行 PostgreSQL 是一个愚蠢的想法。或者这其中有什么道理吗?

我说过 PostgreSQL 比 MySQL 更安全(支持角色、更多身份验证方法……),但数据库本身对应用程序安全性的影响通常非常有限。还是我忽略了这里的任何论点?

[1] Is MySQL more resistant to SQL injection attack than PostgreSQL (under Perl/DBI)?

PS:MySQL 和 PostgreSQL 都是很棒的产品——不需要任何与安全无关的讨论;-)

最佳答案

"By default, PostgreSQL is probably the most security-aware database available ..."

Database Hacker's Handbook

PostgreSQL 并非因为多查询语句而不安全,这是正常功能,但它在旧的 MySQL 驱动程序中不可用。 MySQLi 驱动程序还支持多查询语句。 SQL Server、Oracle、DB2 和几乎所有其他数据库都有这个选项,MySQL 只是很晚才实现它。迟到,并不意味着“安全”。

SQL注入(inject)是程序员犯下的重大错误,不是数据库造成的。主要问题出在键盘后面,这是罪魁祸首。

使用准备好的语句并停止信任用户输入,这就是避免 SQL 注入(inject)和其他安全问题的方法。存储过程还可以帮助降低 SQL 注入(inject)的影响,这些在 PostgreSQL 中非常易于使用。也检查 quote_ident()当您的 SQL 中有动态表名或列名时。 MySQL 缺少这样的功能。

PostgreSQL 有 ROLES 和继承的角色来设置和维护权限。如果您将 super 用户权限 (root) 授予所有人,就会产生问题。如果你不这样做,你就安全了。 super 用户权限中没有已知的错误,关于这些权限中的安全漏洞的说法听起来像是 FUD,因为没有证据。

你查了吗SE PostgreSQL ?这是更高级别的安全性。 PostgreSQL 9.1 版(目前为 beta 版)也有新的 SE 选项。 MySQL 只能梦想这种安全级别。

关于mysql - PostgreSQL 与 MySQL 等相比的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6475228/

相关文章:

mysql - 如果列名/字段名存在于 mySQL 的表中,则搜索数据库

security - 为什么 Chrome 浏览器会自动向 http ://loadingpages. me/jo/is 发送跨源请求

mysql - 如何按具有空值的表进行分组

java - 检查数据库结构是否正确

sql - SQL 中的完整集

security - 散列密码和加密密码之间的区别

java - 尝试使用 ESAPI 但出现错误

postgresql - 创建一个用字典表替换 varchar 的函数?

Postgresql - 只执行某些 IF 语句

php - "Follow user"数据库表设计