本篇文章将会讲述MySQL的权限校对规则、权限项列表,以及会从数据库帐号和权限的设置层面,讲述如何使我们的数据库访问或数据操纵更安全。
帐号信息校验规则
客户端向mysql数据库服务器端发送的连接请求是否成功,除了网络、防火墙等因素制约其能否访问到服务器外,最重要的是必须提供五个参数信息:客户端的IP地址或主机名称、数据库服务器的IP地址或网络域名、数据库访问的帐号和对应的密码,以及数据库服务运行的端口号。
User表的host字段值
字段host的值要求存储的字符串长度不得超过60个字符,且我们可以发现该字段的类型为CHAR,主要因表user存储引擎是:MyISAM,为保持行长固定,从而以空间换取数据的操纵性能提高。
User表的user字段值
字段user存储的值为访问数据库的帐号名称,要求存储的字符串长度不得超过16个字符且我们同样可以发现该字段的类型为CHAR,也是为了保持行场固定。
User表的password字段值
字段password的值为函数PASSWORD()加密过的暗语,暗语长度为固定的41个字符,字段类型也是CHAR,为定长类型,只有符合字段host和user值得校验通过之后,才会进行密码字段值得验证。
总述
mysql根据提供的客户端IP地址或主机名称,以及数据库帐号名称,判断是否存在对应的符合host字段和user字段值匹配规则的记录行,系统表user的联合主键:host、user,可以确定记录得唯一性,那么我们重点介绍host字段和user字段组合的校对规则,以示例的方式给大家阐述:
权限项列表
权限项
MySQL提供的权限项,可依据用处和作用范围,分为三类:
数据库服务管理级别的权限项,此类权限为全局范围的;
数据库或数据库内所有对象上的权限项,作用范围为数据库级别或数据库全局性质;
作用于某个数据库内的对象:表、索引、视图、存储过程;
通过GRANT 和REVOKE子句可操纵的权限项信息,图1-1:
图 1-1 来源于mysql手册
数据库的三种实体:表、字段、存储过程,可提供操作权限项信息,如表1-2:
表1-2
表: user、db、host
表user、db存储的权限信息项,可以发现这2张表会有很多相同的列,而且表user会比表db的列更多,同时可以发现权限范围更大的权限表db中是没有的,图表中没有列出表host的字段信息,主要是因为表host只比表db少一个字段:user,详细信息看表1-3:
表1-3
表:tables_priv、columns_priv
表1-4
表:procs_priv
表procs_priv包含了存储过程和函数二类对象的权限登记信息,如表1-5:
表1-5
权限管理
mysql帐号信息的初始化
表user初始化
mysql自动生成的系统数据库表user中包含了一些匿名的用户,以及数据库的root帐号允许远程访问的记录行,为此我们必须清楚SQL语句:
DELETE FROM mysql.user WHERE `user`=’’ OR `host`=’’;FLUSH PRIVILEGES;
表db初始化
任何已成功通过mysql服务登陆验证的账号,除对test或test开头的数据库对象,及其内部对象无删除、修改和执行存储过程权限,以及无授予其他帐号权限的能力之外,将拥有数据库级别,及其内部对象的其他任何操纵权限,为让test数据库或test开头的数据库继续存在,而且不存在安全隐患,我们可以做如下操作:
DELETE FROM mysql.db WHERE `db` LIKE ‘test%’; FLUSH PRIVILEGES;
数据库访问帐号分类和授权
我们针对数据库访问和数据操纵数据或对象的不同需求,要尽量只给予帐号需要的权限项,绝对不能多给予其无关的权限项,我们大致会有几大类应用的帐户:
权限系统默认的root除设置密码之外,其他的不变化,保留三条帐号名称为root的权限信息;
搭建mysql复制的帐号权限信息:GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’%’ ….;
用于数据库管理、备份等用处的帐号权限信息:GRANT SELECT, RELOAD, PROCESS, FILE, SUPER, LOCK TABLES ON *.* TO ‘admin’@’localhost’ IDENTIFIED….;
应用程序访问数据库的帐号,一般只授予四种权限:SELECT、INSERT、UPDATE和DELETE,例如:GRANT SELECT, INSERT, UPDATE, DELETE ON `test3312`.* TO ‘xn_lw_3312′@’%’…;
内部用于拉取数据的应用程序访问数据库的帐号,一般只授予其只读权限: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′… ;
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
2017年5月数据库流行度排行榜 MySQL与Oracle“势均力敌”
数据库知识网站DB-engines.com最近更新了2017年5月的数据库流行榜单。TechTarget继续与您一起分享最新的榜单情况。
-
2017年3月数据库流行度排行榜 Oracle卫冕之路困难重重
时隔一个月,数据库市场经过一轮“洗牌”,旧的市场格局是否会被打破,曾经占巨大市场份额的企业是否可能失去优势?
-
2017年2月数据库流行度排行榜 攻城容易守城难
2016年下半年,数据库排行榜的前二十名似乎都“固守阵地”,在排名上没有太大的变动。随着2017年的悄然而至,数据库的排名情况是否会有新的看点?
-
MySQL管理特性:让企业适合交易平台
当Alexander Culiniac和他的同事在TickTrade系统公司建立一个基于云的交易平台时,面临一些基本的约束。那就是,系统必须在云上工作良好并且经济实用。