MySQL数据库中的安全设置方案

随着网络的普及,基于网络的应用也越来越多。网络数据库就是其中之一。通过一台或几台服务器可以为很多客户提供服务,这种方式给人们带来了很多方 便,但也给不法分子造成了可乘之机。由于数据都是通过网络传输的,这就可以在传输的过程中被截获,或者通过非常手段进入数据库。由于以上原因,数据库安全 就显得十分重要。因此,本文就以上问题讨论了MySQL数据库在网络安全方面的一些功能。

帐户安全

帐户是MySQL最简单的安全措施。每一帐户都由用户名、密码以及位置(一般由服务器名、IP或通配符)组成。如用户john从server1进行登录可能和john从server2登录的权限不同。

MySQL的用户结构是用户名/密码/位置。这其中并不包括数据库名。下面的两条命令为database1和database2设置了SELECT

用户权限。

GRANT SELECT ON database1.* to 'abc'@'server1' IDENTIFIED BY 'password1';
GRANT SELECT ON database2.* to 'abc'@'server1' IDENTIFIED BY 'password2';

第一条命令设置了用户abc在连接数据库database1时使用password1。第二条命令设置了用户abc在连接数据库database2时使用password2。因此,用户abc在连接数据库database1和database2的密码是不一样的。

上面的设置是非常有用的。如果你只想让用户对一个数据库进行有限的访问,而对其它数据库不能访问,这样可以对同一个用户设置不同的密码。如果不这样做,当用户发现这个用户名可以访问其它数据库时,那将会造成麻烦。

MySQL使用了很多授权表来跟踪用户和这些用户的不同权限。这些表就是在mysql数据库中的MyISAM表。将这些安全信息保存在MySQL中是非常有意义的。因此,我们可以使用标准的SQL来设置不同的权限。

一般在MySQL数据库中可以使用3种不同类型的安全检查:

登录验证

也就是最常用的用户名和密码验证。一但你输入了正确的用户名和密码,这个验证就可通过。

授权

在登录成功后,就要求对这个用户设置它的具体权限。如是否可以删除数据库中的表等。

访问控制

这个安全类型更具体。它涉及到这个用户可以对数据表进行什么样的操作,如是否可以编辑数据库,是否可以查询数据等等。
访问控制由一些特权组成,这些特权涉及到所何使用和操作MySQL中的数据。它们都是布尔型,即要么允许,要么不允许。下面是这些特权的列表:

SELECT

SELECT是设定用户是否可以使用SELECT来查询数据。如果用户没有这个特权,那么就只能执行一些简单的SELECT命令,如计算表达式(SELECT 1+2),或是日期转换(SELECT Unix_TIMESTAMP(NOW( )))等。

·INSERT
  ·UPDATE
  ·INDEX
INDEX决定用户是否可以对表的索引进行设置。如果用户没有这个权限,那么将无法设置表中的索引。

·ALTER
  ·CREATE
  ·GRANT
如果一个用户拥有这个GRANT权限,那么他就可以将自己的权限授给别的用户。也就是说,这个用户可以和其它用户共享自己的权限。

·REFERENCES
有了REFERENCES权限,用户就可以将其它表的一个字段作为某一个表的外键约束。
除了以上的权限外,MySQL还有一些权限可以对整个MySQL进行操作。

·Reload
这个权限可以使用户有权执行各种FLUSH命令,如FLUSH TABLES, FLUSH STATUS等。

·Shutdown
这个权限允许用户关闭MySQL

·Process
通过这个权限,用户可以执行SHOW PROCESSLIST和KILL命令。这些命令可以查看MySQL的处理进程,可以通过这种方式查看SQL执行的细节。

·File
这个权限决定用户是否可以执行LOAD DATA INFILE命令。给用户这个权限要慎重,因为有这个权限的用户可以将任意的文件装载到表中,这样对MySQL是十分危险的。

·Super
这个权限允许用户终止任何查询(这些查询可能并不是这个用户执行的)。
以上几种权限是非常危险的,在给用户授权限时要非常谨慎。

MySQL中的SSL

以上的帐户安全只是以普通的Socket进行数据传输的,这样非常不安全。因此,MySQL在4.1版以后提供了对SSL(Secure Scokets Layer)的支持。MySQL使用的是免费的OpenSSL库。

由于MySQL的Linux版本一般都是随Linux本身一起发布,因此,它们默认时都不使用SSL进行传输数据。如果要打开SSL功能,需要对hava_openssl变量进行设置:

MySQL的Windows版本已经将OpenSSL加入了。也面的命令是查看你的MySQL是否打开了SSL功能。

SHOW VARIABLES LIKE 'have_openssl';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_openssl | NO |
+---------------+-------+
1 row in set (0.00 sec)

如果返回的是NO,那么说明你需要将OpenSSL编译进自己的MySQL

在有时你可能需要将用户名和密码进行加密传输。在这时可以使用下面GRANT命令:

代码如下:

GRANT ALL PRIVILEGES ON ssl_only_db.* to 'abc'@'%' IDENTIFIED BY "password!" REQUIRE SSL;

还可以通过 REQUIRE x509 选项进行SSL传输:

代码如下:

GRANT ALL PRIVILEGES ON ssl_only_db.* to 'abc'@'%' IDENTIFIED BY "password!" REQUIRE x509;

你还可以使用REQUIRE SUBJECT来指定一个特定的客户端证书来访问数据库。

代码如下:

GRANT ALL PRIVILEGES ON ssl_only_db.* to 'abc'@'%'
IDENTIFIED BY "password!"
REQUIRE SUBJECT "/C=US/ST=New York/L=Albany/O=Widgets Inc./CN=client-ray. 
example.com/emailAddress=raymond@example.com";

也许你并不关心使用的是什么客户许可,而仅仅关心的是你的证书。那么你可以使用REQUIRE ISSUER来实现:

代码如下:

GRANT ALL PRIVILEGES ON ssl_only_db.* to 'abc'@'%' IDENTIFIED BY "password!"
REQUIRE ISSUER "/C=US/ST=New+20York/L=Albany/O=Widgets Inc./CN=cacert.example. 
com/emailAddress=admin@example.com";

SSL还可以直接通过密码进行加密。可以使用REQUIRE CIPHER设置密码。

代码如下:

GRANT ALL PRIVILEGES ON ssl_only_db.* to 'abc'@'%' IDENTIFIED BY "password!"
REQUIRE CIPHER "EDH-RSA-DES-CBC3-SHA";

上面使用了GRANT命令对用户权限进行设置。而这些信息都是保存在授权表中,这些表是安全系统的心脏。在这些表中保存了每一个用户和客户机所具有的权限。如果正确地操作这些表,将会对数据库的安全起到积极的作用,而如果使用不慎,将是非常危险的。

以上所述就是本文的全部内容了,希望大家能够喜欢。

(0)

相关推荐

  • MySQL的安全问题从安装开始说起

    当你安装 MySQL 完后.会有个提示: [root@localhost Desktop]# rpm -ivh MySQL-server-5.5.28-1.rhel5.i386.rpmPreparing... ########################################### [100%]1:MySQL-server ########################################### [100%] PLEASE REMEMBER TO SET A PASS

  • MySQL数据库安全配置介绍第1/2页

    1.前言: MySQL数据库是完全网络化的跨平台关系型数据库系统,同时是具有客户机/服务器体系结构的分布式数据库管理系统.它具有功能强.使用简便.管理方便.运行速度快.安全可靠性强等优点,用户可利用许多语言编写访问MySQL数据库的程序,特别是与PHP更是黄金组合,运用十分广泛.MySQL数据库的安全配置也是很有必要的,现在的MySQL数据库中信息的安全性常常受到威胁,故安全配置必不可少. 由于MySQL是多平台的数据库,它的默认配置要考虑各种情况下都能适用,所以在我们自己的使用环境下应该进行进

  • 关于加强MYSQL安全的几点建议

    通常我们在连接MySQL的服务器时,要使用到口令.这个口令在网络上传输的时候是加过密的.可是其它的内容都是以明文的方式来进行传输的. 当然如果担心这个不安全的话,可以使用压缩协议(MySQL3.22和以上版本),这样可以让其它的内容不那么容易就被看到.甚至为了让它更加安全,可以考虑下安装ssh.装上它之后,你就能在MySQL服务器与MySQL客户之间,搭建一条加密的TCP/IP连接. 为了使你的MySQL系统更安全,强烈建议考虑以下建议: 1.为每个MySQL用户使用口令.如果你不加设口令的话,

  • Ubuntu上安装MySQL+问题处理+安全优化

    0.说明 当然,MySQL的安装方法多种多样,在Ubuntu上,你可以采用apt-get的方式安装,这样的好处是:快速方便.基本上,它会帮你解决所有的函数库依赖问题,正常情况下,只要apt-get执行完成,那么MySQL也就可以使用了. 但我更倾向于使用源码的方式来安装MySQL,原因也很简单:除了有详细的官方文档外,你还可以非常清楚地知道你自己在做什么,这点在以后MySQL运行出现问题时将会有很大的帮助! 但即便是按照官方文档来安装,你也会遇到各种各样的问题,这里,我将呈现一个完整的过程给大家

  • 新安装的MySQL数据库需要注意的安全知识

    在Unix(Linux)上,在按照手册的指令安装好MySQL后,你必须运行mysql_install_db脚本建立包含授权 表的mysql数据库和初始权限.在Windows上,运行分发中的Setup程序初始化数据目录和mysql数据库.假 定服务器也在运行. 当你第一次在机器上安装MySQL时,mysql数据库中的授权表是这样初始化的: 你可以从本地主机(localhost)上以root连接而不指定口令.root用户拥有所有权限(包括管理权限) 并可做任何事情.(顺便说明,MySQL超级用户与U

  • MySQL安全设置图文教程

    复制代码 代码如下: 解压mysql到d:\mysql,编辑my.ini [mysqld] port=3306 basedir="D:/mysql/" datadir="D:/mysql/Data/" tmpdir="d:/mysql/tmp/" default-character-set=utf8 default-storage-engine=MYISAM skip-bdb skip-innodb skip-locking key_buffer

  • MySQL数据库安全之防止撰改的方法

    MySQL数据库可以通过触发器,使之无法修改某些字段的数据,同时又不会影响修改其他字段. DROP TRIGGER IF EXISTS `members`; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=''; DELIMITER // CREATE TRIGGER `members` BEFORE UPDATE ON `members` FOR EACH ROW BEGIN set new.name = old.name; set new.cellphone =

  • Win2003服务器安装及设置教程 MySQL安全设置图文教程

    为什么要将MySQL数据库必须运行在"普通用户"的状态下呢?与MSSQL SERVER一样,因为如果使用了"超级管理员"或者"本地系统用户"来运行"MySQL数据库",就会被黑客利用,利用SYSTEM用户权限入侵服务器.因此,为了服务器安全,务必将MySQL运行在"普通用户"的状态下.同时,要对硬盘的权限做好对应的权限设置MySQL才能正常运行. 建立普通用户:单击"开始"-"

  • MySQL数据库安全设置与注意事项小结

    当你第一次在机器上安装MySQL时,mysql数据库中的授权表是这样初始化的: 你可以从本地主机(localhost)上以root连接而不指定口令.root用户拥有所有权限(包括管理权限) 并可做任何事情.(顺便说明,MySQL超级用户与Unix超级用户有相同的名字,他们彼此毫无关系.) 匿名访问被授予用户可从本地连接名为test和任何名字以test_开始的数据库.匿名用户可对数据库做任 何事情,但无管理权限. 从本地主机多服务器的连接是允许的,不管连接的用户使用一个localhost主机名或真

  • MySQL安全策略(MySQL安全注意事项)

    导读 MySQL被运用于越来越多的业务中,在关键业务中对数据安全性的要求也更高,如何保证MySQL的数据安全? 数据安全如果只靠MySQL应用层面显然是不够的,是需要在多个层面来保护的,包括网络.系统.逻辑应用层.数据库层等. 下面是我们可借鉴的一些安全策略. 1.网络.系统层面 在这个层面可以做很多的事情,我们可以把这些安全要求作为新系统安装时的标准要求,放到自动化装机方案中. 把运行MySQL的服务器放在内网中,不要启用公网: 迫不得已启用公网的话,修改sshd端口到10000以上: 设置防

  • 浅析MySQL的注入安全问题

    如果把用户输入到一个网页,将其插入到MySQL数据库,有机会离开了发生安全问题被称为SQL注入敞开.这一课将教如何帮助防止这种情况的发生,并帮助保护脚本和MySQL语句. 注入通常发生在处理一个用户输入,如他们的名字,而不是一个名字,他们给一个会在不知不觉中你的数据库上运行的MySQL语句. 永远不要信任用户提供的数据,只能验证后处理这些数据,作为一项规则,这是通过模式匹配.在下面的例子中,用户名被限制为字母数字字符加下划线的长度在8到20个字符之间 - 根据需要修改这些规则. if (preg

随机推荐