分配合理的数据库权限对于维护系统安全相当重要。尤为是,必定要将网络应用程序和数据库管理功能所需的权限分开,以确保系统安全。咱们看到有些客户,误设帐号权限或将全部权限分配给一个帐号(GRANT ALL in MySQL),这真的是没有见识,缘由以下:mysql
首先,很明显的一个缘由就是,每一个帐号或用户仅授予其所需的权限,很少受权。这在安全设计中,是一个很关键的因素。这意味着,用户仅在其所用的数据库中,有选、改、增的权限,必要时,可赋予删除权限。而不是将用户权限设置为*.*,由于这样的话,他即可以阅读用户表及密码等。sql
其次,数据库管理员帐号能够删除数据库、更改表、更改服务器配置等等。请记住若是有SQL注入***或您的应用程序有bug的话,那么***便可以轻易地经过该帐号链接到数据库,因此,要一直假设该用户帐号可能会被窃取,这样能够减小系统安全危害。数据库
再次,为每一个应用程序或子系统分设独立帐号,这样不但能轻易地排除故障,还有利于分配不一样的安全权限。这样,您的搜索引擎、备份监控等均可以采用不一样的帐号和不一样的随机密码。您还应该分设独立的数据库管理员帐号,使每一个数据库管理员用户有单独帐户,这样能够提升可审计性、可追踪性,便于了解谁作了什么事情。若是员工离职,也可以轻易地应付。安全
第四,数据库管理员帐号能够逾越咱们在MySQL从机上设置的只读权限,进而更改本地数据。(而数据修改仅容许在主机器上操做)。可是,任何有超级权限的用户都不受只读权限的限制,当有人使用这些帐号更改数据、致使双重键值错误或致使从机停运等等,客户便碰到麻烦了。服务器
最后,DBA帐号还能够运行一些危害性很大的命令,如LOAD INFILE,只要是MySQL所链接的服务器上的文件,它都能阅读获得。举例来讲,咱们看到过***使用该命令阅读/etc/password文件,这是当某位用户使用本身的DBA帐号登录运行网络应用程序时,***便加以利用,经过SQL注入进攻来阅读该文件。网络
总结,请在每一个层次上留心您的数据库安全设置,包括配置和文件权限,可是,最重要的是,合理设置数据库用户及其权限。分设独立的数据库管理员帐号,每人一个账号。每一个应用程序和系统都设置独立的帐号。app
(Authored by Steve Mushero / ChinaNetCloud CEO & CTO 本博客英文原文请点击查看)ide