竹磬网-邵珠庆の日记 生命只有一次,你可以用它来做些更多伟大的事情–Make the world a little better and easier


276月/170

详细解读MySQL中的权限

发布在 邵珠庆

一、前言

   很多文章中会说,数据库的权限按最小权限为原则,这句话本身没有错,但是却是一句空话。因为最小权限,这个东西太抽象,很多时候你并弄不清楚具体他需要哪些权限。 现在很多mysql用着root账户在操作,并不是大家不知道用root权限太大不安全,而是很多人并不知道该给予什么样的权限既安全又能保证正常运行。所以,本文更多的是考虑这种情况下,我们该如何简单的配置一个安全的mysql。注:本文测试环境为mysql-5.6.4
二、Mysql权限介绍

   mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表。

   mysql权限表的验证过程为:

1.先从user表中的Host,User,Password这3个字段中判断连接的ip、用户名、密码是否存在,存在则通过验证。

2.通过身份认证后,进行权限分配,按照user,db,tables_priv,columns_priv的顺序进行验证。即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db, tables_priv,columns_priv;如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。

三、mysql有哪些权限

201557120429872.jpg (698×734)

201557120509083.jpg (702×342)

四、数据库层面(db表)的权限分析

201557120536129.jpg (699×737)

五、mysql安全配置方案

   1 限制访问mysql端口的ip

   windows可以通过windows防火墙或者ipsec来限制,linux下可以通过iptables来限制。

   2 修改mysql的端口

   windows下可以修改配置文件my.ini来实现,linux可以修改配置文件my.cnf来实现。

   3 对所有用户设置强密码并严格指定对应账号的访问ip

   mysql中可在user表中指定用户的访问可访问ip

   4 root特权账号的处理

   建议给root账号设置强密码,并指定只容许本地登录

   5 日志的处理

   如需要可开启查询日志,查询日志会记录登录和查询语句。

   6 mysql进程运行账号

   在windows下禁止使用local system来运行mysql账户,可以考虑使用network service或者自己新建一个账号,但是必须给与mysql程序所在目录的读取权限和data目录的读取和写入权限; 在linux下,新建一个mysql账号,并在安装的时候就指定mysql以mysql账户来运行,给与程序所在目录的读取权限,data所在目录的读取和写入权限。

   7 mysql运行账号的磁盘权限

1)mysql运行账号需要给予程序所在目录的读取权限,以及data目录的读取和写入权限
2)不容许给予其他目录的写入和执行权限,特别是有网站的。
3)取消mysql运行账户对于cmd,sh等一些程序的执行权限。

   8 网站使用的mysql账户的处理

   新建一个账户,给予账户在所使用数据库的所有权限即可。这样既能保证网站对所对应的数据库的全部操作,也能保证账户不会因为权限过高而影响安全。给予单个数据库的所有权限的账户不会拥有super, process, file等管理权限的。 当然,如果能很明确是的知道,我的网站需要哪些权限,还是不要多给权限,因为很多时候发布者并不知道网站需要哪些权限,我才建议上面的配置。而且我指的通用的,具体到只有几台机器,不多的情况下,我个人建议还是给予只需要的权限,具体可参考上面的表格的建议。

   9 删除无用数据库

   test数据库对新建的账户默认有权限
六、mysql入侵提权分析及防止措施

   一般来说,mysql的提权有这么几种方式:

   1 udf提权

   此方式的关键导入一个dll文件,个人认为只要合理控制了进程账户对目录的写入权限即可防止被导入dll文件;然后如果万一被攻破,此时只要进程账户的权限够低,也没办执行高危操作,如添加账户等。

   2 写入启动文件

   这种方式同上,还是要合理控制进程账户对目录的写入权限。

   3 当root账户被泄露

   如果没有合理管理root账户导致root账户被入侵,此时数据库信息肯定是没办法保证了。但是如果对进程账户的权限控制住,以及其对磁盘的权限控制,服务器还是能够保证不被沦陷的。

   4 普通账户泄露(上述所说的,只对某个库有所有权限的账户)

   此处说的普通账户指网站使用的账户,我给的一个比较方便的建议是直接给予特定库的所有权限。账户泄露包括存在注入及web服务器被入侵后直接拿到数据库账户密码。

   此时,对应的那个数据库数据不保,但是不会威胁到其他数据库。而且这里的普通账户无file权限,所有不能导出文件到磁盘,当然此时还是会对进程的账户的权限严格控制。

   普通账户给予什么样的权限可以见上表,实在不会就直接给予一个库的所有权限。
七、安全配置需要的常用命令

   1.新建一个用户并给予相应数据库的权限

 grant select,insert,update,delete,create,drop privileges on database.* to user@localhost identified by 'passwd';
 grant all privileges on database.* to user@localhost identified by 'passwd';

     2.刷新权限

flush privileges;

   3. 显示授权

show grants;

   4. 移除授权

revoke delete on *.* from 'jack'@'localhost';

   5. 删除用户

drop user 'jack'@'localhost';

   6. 给用户改名

rename user 'jack'@'%' to 'jim'@'%';

   7. 给用户改密码

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');

   8. 删除数据库

drop database test;

   9. 从数据库导出文件

select * from a into outfile "~/abc.sql"

2411月/140

解读大型网站系统架构的演化

发布在 邵珠庆

前言

一个成熟的大型网站(如淘宝、京东等)的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性,它总是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架构、设计思想也发生了很大的变化,就连技术人员也从几个人发展到一个部门甚至一条产品线。所以成熟的系统架构是随业务扩展而完善出来的,并不是一蹴而就;不同业务特征的系统,会有各自的侧重点,例如淘宝,要解决海量的商品信息的搜索、下单、支付,例如腾讯,要解决数亿的用户实时消息传输,百度它要处理海量的搜索请求,他们都有各自的业务特性,系统架构也有所不同。尽管如此我们也可以从这些不同的网站背景下,找出其中共用的技术,这些技术和手段可以广泛运行在大型网站系统的架构中,下面就通过介绍大型网站系统的演化过程,来认识这些技术和手段。

一、最开始的网站架构

最初的架构,应用程序、数据库、文件都部署在一台服务器上,如图:

image

二、应用、数据、文件分离

随着业务的扩展,一台服务器已经不能满足性能需求,故将应用程序、数据库、文件各自部署在独立的服务器上,并且根据服务器的用途配置不同的硬件,达到最佳的性能效果。

image

三、利用缓存改善网站性能

在硬件优化性能的同时,同时也通过软件进行性能优化,在大部分的网站系统中,都会利用缓存技术改善系统的性能,使用缓存主要源于热点数据的存在,大部分网站访问都遵循28原则(即80%的访问请求,最终落在20%的数据上),所以我们可以对热点数据进行缓存,减少这些数据的访问路径,提高用户体验。

image

缓存实现常见的方式是本地缓存、分布式缓存。当然还有CDN、反向代理等,这个后面再讲。本地缓存,顾名思义是将数据缓存在应用服务器本地,可以存在内存中,也可以存在文件,OSCache就是常用的本地缓存组件。本地缓存的特点是速度快,但因为本地空间有限所以缓存数据量也有限。分布式缓存的特点是,可以缓存海量的数据,并且扩展非常容易,在门户类网站中常常被使用,速度按理没有本地缓存快,常用的分布式缓存是Membercache、Redis。

四、使用集群改善应用服务器性能

应用服务器作为网站的入口,会承担大量的请求,我们往往通过应用服务器集群来分担请求数。应用服务器前面部署负载均衡服务器调度用户请求,根据分发策略将请求分发到多个应用服务器节点。

架构4

常用的负载均衡技术硬件的有F5,价格比较贵,软件的有LVS、Nginx、HAProxy。LVS是四层负载均衡,根据目标地址和端口选择内部服务器,Nginx和HAProxy是七层负载均衡,可以根据报文内容选择内部服务器,因此LVS分发路径优于Nginx和HAProxy,性能要高些,而Nginx和HAProxy则更具配置性,如可以用来做动静分离(根据请求报文特征,选择静态资源服务器还是应用服务器)。

五、数据库读写分离和分库分表

随着用户量的增加,数据库成为最大的瓶颈,改善数据库性能常用的手段是进行读写分离以及分表,读写分离顾名思义就是将数据库分为读库和写库,通过主备功能实现数据同步。分库分表则分为水平切分和垂直切分,水平切换则是对一个数据库特大的表进行拆分,例如用户表。垂直切分则是根据业务不同来切换,如用户业务、商品业务相关的表放在不同的数据库中。

架构3

六、使用CDN和反向代理提高网站性能

假如我们的服务器都部署在成都的机房,对于四川的用户来说访问是较快的,而对于北京的用户访问是较慢的,这是由于四川和北京分别属于电信和联通的不同发达地区,北京用户访问需要通过互联路由器经过较长的路径才能访问到成都的服务器,返回路径也一样,所以数据传输时间比较长。对于这种情况,常常使用CDN解决,CDN将数据内容缓存到运营商的机房,用户访问时先从最近的运营商获取数据,这样大大减少了网络访问的路径。比较专业的CDN运营商有蓝汛、网宿。

而反向代理,则是部署在网站的机房,当用户请求达到时首先访问反向代理服务器,反向代理服务器将缓存的数据返回给用户,如果没有没有缓存数据才会继续走应用服务器获取,也减少了获取数据的成本。反向代理有Squid,Nginx。

架构5 

七、使用分布式文件系统

用户一天天增加,业务量越来越大,产生的文件越来越多,单台的文件服务器已经不能满足需求。需要分布式的文件系统支撑。常用的分布式文件系统有NFS。

架构5.5

八、使用NoSql和搜索引擎

对于海量数据的查询,我们使用nosql数据库加上搜索引擎可以达到更好的性能。并不是所有的数据都要放在关系型数据中。常用的NOSQL有mongodb和redis,搜索引擎有lucene。

架构6

九、将应用服务器进行业务拆分

随着业务进一步扩展,应用程序变得非常臃肿,这时我们需要将应用程序进行业务拆分,如百度分为新闻、网页、图片等业务。每个业务应用负责相对独立的业务运作。业务之间通过消息进行通信或者同享数据库来实现。

架构7

十、搭建分布式服务

这时我们发现各个业务应用都会使用到一些基本的业务服务,例如用户服务、订单服务、支付服务、安全服务,这些服务是支撑各业务应用的基本要素。我们将这些服务抽取出来利用分部式服务框架搭建分布式服务。淘宝的Dubbo是一个不错的选择。

架构8

小结

大型网站的架构是根据业务需求不断完善的,根据不同的业务特征会做特定的设计和考虑,本文只是讲述一个常规大型网站会涉及的一些技术和手段。

1510月/120

百度搜索结果大拇指-百度分享解读

发布在 邵珠庆

细心的站长应该能发现,在我们百度搜索结果中,就在百度快照后面出现一个大拇指,而且这个大拇指还显示好评数是多少,本人自己的网站shaozhuqing.com已经添加了百度分享,结果在搜索结果中就出现了这个大拇指,一开始没注意,后来竹简的就发现了,那么百度的这个大拇指对咱自己的网站有影响么,百度搜索结果大拇指是什么意思呢,国庆吧为你分享。

先看看这个百度分享工具是怎么弄的:

第一步:进入“百度分享”http://share.baidu.com/。第二步:点击“免费获取代码”选择你喜欢的分享形式。第三步:将获得的代码粘贴到你想要出现百度分享的页面,包括首页。

没错,就这么简单,简单的像是把大象装进冰箱里的步骤,你甚至无需注册、无需申请,就可以轻松拥有百度分享。

其实,这个就是“百度分享”,已经存在一段时间了,只不过以前百度没有放出,现在放出来,被越来越多的站长所使用,但据机关狼观察,使用的还不是特别多,不知道百度的这个应用会不会昙花一现。现在,让我们简单看看这个应用到底是做什么的,以及百度的初衷是什么吧。

“百度分享”的tittle以及宣传语都是“百度分享-为您带来更多流量”。百度分享的注解是“稳步提升网站流量和搜索引擎排名的web2.0工具!借助百度分享按钮,让您网站的用户轻松分享内容到新浪微博、人人网等sns网站,为您带来更多流量。”

从这段注解当中不难看出,百度分享能为站长带来两点好处:

(1)带来流量。

(2)提高排名。

而这两点恰恰击中草根站长的要害,都是草根站长拼了命想要的,而眼下,sns社会化分享如日中天,网络里走到哪儿都能看到分享到各个新浪微博、腾讯微博、人人网、开心网等等的按钮。百度等搜索引擎也说过要提高sns类社会化分享为网站带来的权重。那么,百度分享能否为网站带来流量与提高排名?

本人也将拿自己的网站做个实验,看看有没有效果,不过,试验期较短,说实话,除了在搜索网站的时候,后面多了个“小手”看着很养眼之外,还没有发现对关键词排名、网站流量等有什么明显好处。

首先,关于“带来流量”:个人觉得,百度分享看中的更是用户体验,当你的网站提供的是真正有价值信息时候,适时的出现分享按钮,会让用户心甘情愿、真心的去主动分享这个网站、这个页面。而如果你的网站只是空壳,没有实质内容的话,在当今网民无比浮躁的大环境下,愿意去分享的人估计会很少,甚至为零!这也就失去了web2.0的初衷。所以,百度分享更适合那些提供真正原创、有价值信息、并有一定流量基础的正规好站。这样的站才会真正实现“百度分享,为您带来更多流量”的初衷。

其次,关于“提高排名”:如果你添加百度分享代码的愿望是偏向于依靠百度分享来提高排名,想要借助刷分享数目来实现的话,暂时来说,你可能要失望了。因为,现在没有任何数据、事实可以证明“分享数目越多,百度就会给你的排名靠前”。而且,我也相信,百度不会傻到连这个粗浅的作弊手段都分辨不出来的地步。

最后,本人要说的是,站长做站想要获得好的排名,最主要的还是踏实做站,从用户角度出发,多想想用户想要什么样的站、用户想要什么样的内容、怎样能让用户体验更好、怎样更便于用户浏览网站……等等。毕竟搜索引擎排名就是模拟用户需求、用户体验而制定的规则。

不管你怎么做站,不管百度要出什么新花样,我们必须要明白,网站的核心是什么,搜索引擎的 核心是什么