分配合理的数据库权限对于维护系统安全至关重要。尤其是,一定要将网络应用程序和数据库管理功能所需的权限分开,以确保系统安全。我们看到有些客户,误设账号权限或将所有权限分配给一个账号(GRANT ALL in MySQL),这真的是没有见识,原因如下:

首先,很明显的一个原因就是,每个账号或用户仅授予其所需的权限,不多授权。这在安全设计中,是一个很关键的因素。这意味着,用户仅在其所用的数据库中,有选、改、增的权限,必要时,可赋予删除权限。而不是将用户权限设置为*.*,因为这样的话,他便可以阅读用户表及密码等。

其次,数据库管理员账号可以删除数据库、更改表、更改服务器配置等等。请记住如果有SQL注入攻击或您的应用程序有bug的话,那么黑客便能够轻易地通过该账号连接到数据库,所以,要一直假设该用户账号可能会被窃取,这样可以减少系统安全危害。

再次,为每个应用程序或子系统分设独立账号,这样不但能轻易地排除故障,还有利于分配不同的安全权限。这样,您的搜索引擎、备份监控等都可以采用不同的账号和不同的随机密码。您还应该分设独立的数据库管理员账号,使每个数据库管理员用户有单独账户,这样可以提高可审计性、可追踪性,便于了解谁做了什么事情。如果员工离职,也能够轻易地应付。

第四,数据库管理员账号可以逾越我们在MySQL从机上设置的只读权限,进而更改本地数据。(而数据修改仅允许在主机器上操作)。但是,任何有超级权限的用户都不受只读权限的限制,当有人使用这些账号更改数据、导致双重键值错误或导致从机停运等等,客户便碰到麻烦了。

最后,DBA账号还可以运行一些危害性很大的命令,如LOAD INFILE,只要是MySQL所连接的服务器上的文件,它都能阅读得到。举例来说,我们看到过黑客使用该命令阅读/etc/password文件,这是当某位用户使用自己的DBA账号登陆运行网络应用程序时,黑客便加以利用,通过SQL注入进攻来阅读该文件。

总结,请在每个层次上留心您的数据库安全设置,包括配置和文件权限,但是,最重要的是,合理设置数据库用户及其权限。分设独立的数据库管理员账号,每人一个帐号。每个应用程序和系统都设置独立的账号。您若使用的是MySQL数据库,我们可随时提供咨询服务及安全审计意见,以帮助您实现系统安全。