摘要:基于当今计算机网络中资源共享中信息安全性存在的隐患,数据库系统中主要的网络数据库系统MySQL的基于授权表的安全机制,以及如何在应用中就文件系统保护、口令保护、权限表设置和运行选项的采用来提高安全性能的问题。
关键词:网络安全性 内部安全性 外部安全性 MySQL权限系统
MySQL作为一种快速、多用户、多线程的SQL数据库服务器,可以通过Intemet方便地获取和升级,属免费软件,这使它成为B/S系统开发的首选数据库。作为一个网络数据库,其安全性尤其重要。作为MySQL管理员有责任保证数据库系统、内容的安全性,使得这些数据记录只能被正确授权的用户访问,这涉及到数据库系统的内部安全性和外部安全性,内部安全性关心的是文件系统的问题,外部安全性关心的是外部通过网络连接服务器的客户问题。MySQL有一套先进但非标准的安全,权限机制。
1.网络安全性
1.1物理划分
为提高数据库安全,可以通过物理介质和对应的软件将Intemet访问MySQL划分为若干区域,包括内网机制、中介机制和外网机制。访问的整体路径如图1所示。
在建立数据库时,将数据库建立在一个小型内网范围内,为避免空间浪费,可以同时放置多个数据库。
在内网与外网之间建立中介机制,作为内网和外网的连接区和隔离带。无论从外网访问数据库或从内网访问数据库,均须先访问这个中介机制,待中介机制进行信息处理后才能实施访问。中介机制为一个独立的设置,既与内网和外网相互联系,又有相对的独立性。
1.2 内网机制
在内网中放置数据库,需要增加相关安全插件才能保障数据库在内网中的安全,以正确地对数据库执行查询、显示、修改、编辑、删除等操作。
1.2.1数据库用户
在连接数据库过程中,增加限制用户机制,给内网配置一个普通用户ID,给予访问数据库的权限,每次中介机制转接进来的请求都通过这个ID登陆数据库进行相关操作。 增加密码管理工具,加入数据库密码修改(在mysql/bin):mysqladmin -u用户名-p旧密码password新密码),在相应间隔时间内执行,如图2所示。
1.2.2服务器设置
为保证数据的安全性,可以通过启动服务器和停止服务器来阻止外部数据入侵,防止数据泄露。在内网得到请求时,需要向数据库中查询数据信息时执行插件启动数据库服务器( mysql server start),在内网停止对数据库的访问时,自动执行插件停止服务器(mysql server stop)。
1.2.3自动备份
通过启动数据库服务器之后的时间间隔,建立自动备份系统,以及时备份录入和更改的数据。
1.3中介机制
通过在内网中设置中介机制,避免外网用户直接得到数据库使用权限,隔绝外网用户使用触发器来制造数据库后门,而留下数据安全隐患。在中介机制中设置自动判断数据机制和内外网的连接机制,如图3所示。
1.4外网机制
MySQL被广泛地应用在Internet上的中小型网站中,因此出现了通过远程网络访问数据库中的共享资源,但是基于对数据库中信息的安全保护,外网则被中介机制和内网机制与数据库隔离,不能够直接连接数据库,以确保数据库的安全,是以外网机制最为简单,只负责接收和发送。
在网络访问MySQL过程中三个阶段虽然会延长访问数据库的时间,但是在现今数据的高效性下,依旧能够弥补这一缺点,同时能够达到极大程度的提高网络中访问数据库时对数据的安全保护。
2.内部安全性
在MySQL中,一个数据库(包括存放用户权限信息的mysql库)对应着文件系统的一个目录,数据库中的表则对应着此目录中3个后缀分别为frm、MYD、MYI的与表同名的文件,而这些文件可直接转移到其它MySQL服务器的数据目录下,所以对于数据文件系统的保护也就是数据安全的重要一环。
3.外部安全性
3.1 密码的保护
当客户想要登陆一个MySQL服务器时,MySQL客户程序一般要求客户指定连接参数:想要联接的主机、用户名和口令。如果连接参数以多种方法被指定,在命令行上被指定的值优先于在配置文件和环境变量中指定的值,而在配置文件指定的值优先于在环境变量中指定的值。无论哪种方式的连接,其参数指定,重点在于密码的保护。
1)避免在命令行中输入明文显示的口令。
2)避免配置文件是全体或组可读的。当采用非交互式方式登陆服务器时,需要事先在配置文件中存储口令,已备系统登陆时调用。
3)避免在环境变量MYSQL PWD中存储口令。
4)避免口令明文在命令行中出现、在连接上传输。
总之,最安全的方法是让客户程序提示口令或在一个受保护的文件中指定口令。
3.2权限系统的设置保护
MySQL的安全/权限控制信息主要存放在mysql库User、Db、Host表中,这3个表中字段分为范围字段和权限字段。
MySQL存取权限控制包含2个阶段。
1)服务器验证客户的身份,确定是否允许连接。客户的身份是根据客户连接的主机、指定的用户名和密码来惟一确定的。当客户试图连接一个MySQL服务器时,服务器会用mysql库中User表的3个字段(Host、User、Password)检查客户的身份,如果与User表中的某一条记录完全匹配,MySQL接受这次连接;如果匹配多条记录,将以MySQL对User表读入时排序的顺序浏览条目,第一个匹配的条目被使用;否则终止这个连接请求。
2)假定能连接,服务器检查客户发出的每个请求,看是否有足够的权限实施它。阶段2中请求确认是由被存储在mysql数据库中user、db、host、ta2bles priv和columns priv授权表中的权限内容来验证的。MySQL的安全,权限系统是很灵活的,它允许以多种不同的方式设置用户权限:既可以使用标准的SQL语句CRANT和REVOKE来修改授权表,也可以用Update、In-sert等语句直接修改授权表。在MySQL启动时和在权限修改生效时,服务器读一文些数据表内容。
4.MySQL、系统的作用
MySQL权限系统的主要功能是验证连接到一台MySQL服务器主机的一个用户是否合法,并且赋予该用户在一个数据库表上读取、插入、更新、删除记录的权限。另外,还有是否允许匿名访问数据库,以及是否允许从外部文件批量向数据表中追加记录等操作的能力。
MySQL提供以下权限:
1) select、insert、update和delete权限允许用户在一个数据库现有的表上实施读取、插入、更新、删除记录的操作。
2) index权限允许用户在数据表上建立或删除索引。
3) alter权限允许用户使用ALTER TABLE命令来修改现有数据表的结构。
4) create和drop权限允许创建新的数据库和表,或删除现存的数据库和表。
注意:如果将mysql数据库的drop权限授予一个用户,该用户能删除存储了MySQL系统权限的数据库!
5) grant权限允许用户把自己拥有的权限授予其它的用户。
6) file权限允许被授予该权限的用户都能读或写MySQL服务器能读或写的任何文件。
7) reload权限允许用户使用reload命令通知MySQL服务器再次读入授权表;使用refresh命令刷新所有表、打开和关闭日志记录文件。
8) shutdown权限允许用户使用shutdown命令关掉服务器。
9) process权限允许用户使用。
processlist命令显示在服务器内执行的进程的信息;使用kill命令杀死服务器进程。用户总是能显示或杀死自己的进程,但是,显示或杀死其它用户启动的进程需要process权限。
5.MySQL权限更改后的生效
mysqld启动时将所有的授权表内容读入内存,所以任何权限都会在这时生效。
服务器启动后,修改的权限何时生效:
1)用GRANT、REVOKE或SET PASSWORD语句对授权表实行的修改会立即生效。
2)如果使用INSERT、UPDATE等语句手工修改授权表,权限不会立刻生效,而是在下一次启动服务器时生效。如果想使修改的权限立即生效,应该执行FLUSH PRIVILECES语句或运行mysqladmin flush - privileges或mysqladmin reload告诉服务器重新装载授权表。
3)当服务器注意到授权表更改时,对已经存在的用户连接有以下影响:
表和列权限的修改,在用户的下一次请求时生效;
数据库权限的修改,在下一个执行USE db -name命令时生效。
4)全局权限的修改和口令的修改,在下一次用户连接时生效。
6.小结
MySQL作为被广泛采用的网络数据库,它具有先进但非标准的安全/权限机制,这就要求系统管理员在他的安全性规划方面不能完全遵循常规,但如果做好文件系统保护、口令保护和权限表的设置,一样可以使数据系统、数据处于安全的境地。另外,作为MySQL管理员,要订阅MySQL邮件列表,能及时地知道bug和补丁的下载升级。
参考文献:
【1】陈小辉,文佳,邓杰英.MySQL数据库的权限及其安全缺陷【J】.计算机安全,2008,(2).
【2】朱洪江.MYSQL数据库的安全漏洞及防范方法【J】.黑龙江科技信息.2009.
【3】刘兆风,汤茂斌.MySQL安全机制及应对措施探讨【N】.广州大学学报(自然科学版),2003.