Chinaunix首页 | 论坛 | 博客
  • 博客访问: 310898
  • 博文数量: 85
  • 博客积分: 1508
  • 博客等级: 上尉
  • 技术积分: 791
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-06 11:49
文章分类

全部博文(85)

文章存档

2013年(22)

2012年(63)

我的朋友

分类: Mysql/postgreSQL

2012-10-29 17:49:31

导读

MySQL的权限系统架构已经通过一篇完整文章的方式,给大家讲述了,本篇文章将会讲述MySQL的权限校对规则、权限项列表,以及会从数据库帐号和权限的设置层面,讲述如何使我们的数据库访问或数据操纵更安全。

n  帐号信息校验规则

    客户端向mysql数据库服务器端发送的连接请求是否成功,除了网络、防火墙等因素制约其能否访问到服务器外,最重要的是必须提供五个参数信息:客户端的 IP地址或主机名称、数据库服务器的IP地址或网络域名、数据库访问的帐号和对应的密码,以及数据库服务运行的端口号。

u  User表的host字段值

字段host的值要求存储的字符串长度不得超过60个字符,且我们可以发现该字段的类型为CHAR,主要因表user存储引擎是:MyISAM,为保持行长固定,从而以空间换取数据的操纵性能提高。

u  User表的user字段值

字段user存储的值为访问数据库的帐号名称,要求存储的字符串长度不得超过16个字符且我们同样可以发现该字段的类型为CHAR,也是为了保持行场固定。

u  User表的password字段值

    字段password的值为函数PASSWORD()加密过的暗语,暗语长度为固定的41个字符,字段类型也是CHAR,为定长类型,只有符合字段host和user值得校验通过之后,才会进行密码字段值得验证。

u  总述

mysql根据提供的客户端IP地址或主机名称,以及数据库帐号名称,判断是否存在对应的符合host字段和user字 段值匹配规则的记录行,系统表user的联合主键:host、user,可以确定记录得唯一性,那么我们重点介绍host字段和user字段组合的校对规 则,以示例的方式给大家阐述:

 

n  权限项列表

u  权限项

MySQL提供的权限项,可依据用处和作用范围,分为三类:

l  数据库服务管理级别的权限项,此类权限为全局范围的;

l  数据库或数据库内所有对象上的权限项,作用范围为数据库级别或数据库全局性质;

l  作用于某个数据库内的对象:表、索引、视图、存储过程;

 

通过GRANT 和REVOKE子句可操纵的权限项信息,图1-1:

1-1 来源于mysql手册

数据库的三种实体:表、字段、存储过程,可提供操作权限项信息,如表1-2:

 

1-2

u  表: user、db、host

表user、db存储的权限信息项,可以发现这2张表会有很多相同的列,而且表user会比表db的列更多,同时可以发现权限范围更大的权限表db 中是没有的,图表中没有列出表host的字段信息,主要是因为表host只比表db少一个字段:user,详细信息看表1-3:

1-3

u  表:tables_priv、columns_priv

 

1-4

u  表:procs_priv

表procs_priv包含了存储过程和函数二类对象的权限登记信息,如表1-5:

1-5

n  权限管理

u  mysql帐号信息的初始化

l  表user初始化

mysql自动生成的系统数据库表user中包含了一些匿名的用户,以及数据库的root帐号允许远程访问的记录行,为此我们必须清楚SQL语句:

DELETE FROM mysql.user WHERE `user`=’’ OR `host`=’’;FLUSH PRIVILEGES;

l  表db初始化

    任何已成功通过mysql服务登陆验证的账号,除对test或test开头的数据库对象,及其内部对象无删除、修改和执行存储过程权限,以及无授予其他帐 号权限的能力之外,将拥有数据库级别,及其内部对象的其他任何操纵权限,为让test数据库或test开头的数据库继续存在,而且不存在安全隐患,我们可 以做如下操作:

DELETE FROM mysql.db WHERE `db` LIKE ‘test%’; FLUSH PRIVILEGES;

u  数据库访问帐号分类和授权

我们针对数据库访问和数据操纵数据或对象的不同需求,要尽量只给予帐号需要的权限项,绝对不能多给予其无关的权限项,我们大致会有几大类应用的帐户:

l  权限系统默认的root除设置密码之外,其他的不变化,保留三条帐号名称为root的权限信息;

l  搭建mysql复制的帐号权限信息:GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’%’ ….;

l  用于数据库管理、备份等用处的帐号权限信息:GRANT SELECT, RELOAD, PROCESS, FILE, SUPER, LOCK TABLES ON *.* TO ‘admin’@'localhost’ IDENTIFIED….;

l  应用程序访问数据库的帐号,一般只授予四种权限:SELECT、INSERT、UPDATE和DELETE,例如:GRANT SELECT, INSERT, UPDATE, DELETE ON `test3312`.* TO ‘xn_lw_3312′@’%'…;

l  内部用于拉取数据的应用程序访问数据库的帐号,一般只授予其只读权限:SELECT,例如:GRANT SELECT ON  `littlewar3312`.* TO ‘rnd_xn_lw_3312′@’%'…;

备注:

某著名电子商务公司对于DBA是分为产品DBA和应用DBA,也即外部很多公司分类:系统DBA和开发DBA,主要是基 于不同工作侧重性质而划分的,但是对MySQL没有这个必要,使用MySQL的理念,与Oracle、DB2、SQL Server等都不一样,必须深入到业务需求或称数据流产生和流向等,但是也曾经因为MySQL DBA无人手,而同时开发或从Oracle转向MySQL的项目太多,有一段时间尝试让Oracle 应用DBA也兼任MySQL DBA的数据库表结构变更和数据订正的 工作,为此也设置了另外一类帐号,且限制从某一服务器上登陆访问,对其负责的数据库拥有以下权限:SELECT、INSERT、UPDATE、 DELETE、CREATE、ALTER、DROP,例如:GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,ALTER,DROP,ON cn_news.* TO ‘app_dba_cn_news’%’10.10.1.110′… ;

后续

    本文只是从mysql提供的权限服务角度出发阐述的数据库访问安全,并没有涉及数据安全性的问题,毕竟数据安全性又是另外一个新的话题,而且不只是涉及数据库级别,还涉及操作系统、存储、网络等各个方面,后续有机会的话,再单独阐述。

推荐关联性文章:

文章地址:

阅读(1083) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~