MySQL - 数据库安全

标签 mysql database security

我正在创建一个网络应用程序,该应用程序从每个用户那里收集大量个人信息,这些信息可能会被黑客攻击。关于数据库安全我应该注意哪些约定和做法?例如,我是否应该为应用程序的每个用户创建一个单独的 MySQL 用户帐户,并使用唯一的用户名和密码,以防止用户检索他人的信息?

最佳答案

硬件级安全性

确保硬件位于安全设施中,最好是具有冗余电源、 Backbone 连接等的设施。我居住的城市有一个洞穴网络,那里有一个数据中心。该中心与城市电网有六个不同的连接,并连接到多个 Backbone 提供商——非常酷。

应用程序级安全性

您需要使用parameterized queries以避免 SQL 注入(inject)。如果您使用 PHP,我建议使用 PDO .

您还需要使用“白名单”——仅允许预定义的有效值列表中的值。例如,当允许某人输入名字时,您可以将有效字符限制为仅 [a-zA-Z](仅限大写和小写字母)。正则表达式在这里派上用场。

您需要设置与此类似的表来处理安全性:

actions
    id          unsigned int(P)
    description     varchar(50) // Delete users, edit account, etc.

roles
    id          unsigned int(P)
    description     varchar(50) // Billing admin, web developer, etc.

roles_actions
    id          unsigned int(P)
    role_id     unsigned int(F roles.id)
    action_id       unsigned int(F actions.id)

users
    id          unsigned int(P)
    username        varchar(32)
    password        varbinary(255)
    …

users_roles
    id          unsigned int(P)
    user_id     unsigned int(F users.id)
    role_id     unsigned int(F roles.id)

这将允许与每个角色关联的无限数量的操作以及与每个用户关联的无限数量的角色。使得管理用户之间的权限变得相当容易。

如果您正在考虑存储信用卡信息,您需要首先进行大量研究。围绕此存在一些严重的问题。

出于安全原因,您可能希望记录对页面的每次“访问”(IP 地址、用户 ID – 如果是未登录的人,则为 NULL,等等)

您可能希望维护对数据库中每个表所做的每项更改的审计跟踪。触发器可以很方便地实现这一点。

数据库级安全性

您需要关注Principle of Least Privilege 。您还需要查看 Stored Procedures .

这只是我脑子里的一些事情。

关于MySQL - 数据库安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17116904/

相关文章:

mysql - 2 个站点 - 2 个 DB,其中 1 个的主控是其他的从属?

database - 自动更新 Access 数据库(无法链接)

python - 在 python 中控制 SSL 握手的模块?

c# - 在 Internet 中加密并在专用网络中解密的最佳方法是什么?

mysql - 无法在 MySql 5.5.27 中创建带有 if 条件的触发器

MySQL链内JOIN错误

java - JDBC 回滚方法的行为与预期不同

database - 自适应基数树

android - MySQL 数据库连接

security - https(TLS)是否加密从服务器到客户端的数据?