这篇文章主要介绍了MySQL中基本的用户和权限管理方法,包括各个权限所能操作的事务以及操作权限的一些常用命令语句,是MySQL入门学习中的基础知识,需要的朋友可以参考下

一、简介

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

四、mysql所有权限分类(方便记忆)

很明显总共28个权限

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

五、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;

  (这里我需要着重的强调一下,如果使用delete对数据库用户删除后需要执行一遍刷新flush privileges;否则会报有1396错误;建议还是使用drop等相关命令进行做删除用户操作。)

3.显示授权

show grants;

4.移除授权

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

5.删除用户

drop user 'jack'@'localhost';

6.给用户改名

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

7.给用户改密码

 SET authentication_string FOR 'root'@'localhost' = authentication_string ('');

8.删除数据库

drop database test;

9.从数据库导出文件

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

mysql 5.7中的用户权限分配相关解读!的更多相关文章

  1. mysql用户权限分配专栏

    00x1创建新用户 通过root用户登录之后创建 创建新用户,用户名为testuser,密码为123456 : 1 grant all privileges on *.* to testuser@lo ...

  2. 【转】Centos系统文件与用户权限分配详解ftp,nginx,php

    linux系统中权限是非常完善的一个功能了,我们如果设置不正确文件就无法使用了,像我们以一般情况需要把文件权限设置为777或644了,对于用户权 限就更加了,像素ftp,nginx,php这些我们都可 ...

  3. linux 中更改用户权限和用户组的命令chmod,chgrp实例

    linux 中更改用户权限和用户组的命令实例; 增加权限给当前用户 chmod +wx filename chmod -R 777 /upload 用户组 chgrp -R foldname zdz ...

  4. mysql用户权限分配及主从同步复制

    赋予wgdp用户查询权限: grant select on wg_dp.* to 'wgdp'@'%' IDENTIFIED BY 'weigou123'; grant all privileges ...

  5. MySQL中导出用户权限设置的脚本

    在对MySQL数据库进行迁移的时候,有时候也需要迁移源数据库内的用户与权限.对于这个迁移我们可以从mysql.user表来获取用户的相关权限来生成相应的SQL语句,然后在目标服务器上来执行生成的SQL ...

  6. “MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第五篇(用户管理之“用户权限分配”)

    一.在做权限分配之前,首先先了解“ZTree”这个插件,我的这个系统没有用Jquery-EasyUI的Tree.用的是”ZTree“朋友们可以试试,也很强大.点击下载ZTree插件.       1. ...

  7. Android基础知识之Manifest文件中的用户权限元素

    原文:http://android.eoe.cn/topic/android_sdk 分任务原文链接一:http://developer.android.com/guide/topics/manife ...

  8. 重置Mysql的root密码及用户权限设置

     一.重置Mysql的root密码 方法一: 直接进入localhost/phpmyadmin修改用户root的权限,设置密码: 方法二: 进入mysql控制台:mysql->use mysql ...

  9. mysql 忘记密码,赋予用户权限,两台服务器的数据库之间快速导入

    mysql 忘记密码: 1.首先service mysql stop mysqld --skip-grant-tables &  开启数据库 然后就可以mysql -uroot 直接进数据库, ...

随机推荐

  1. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  2. 一步步开发自己的博客 .NET版(11、Web.config文件的读取和修改)

    Web.config的读取 对于Web.config的读取大家都很属性了.平时我们用得比较多的就是appSettings节点下配置.如: 我们对应的代码是: = ConfigurationManage ...

  3. Entity Framework 6 Recipes 2nd Edition 译 -> 目录 -持续更新

    因为看了<Entity Framework 6 Recipes 2nd Edition>这本书前面8章的翻译,感谢china_fucan. 从第九章开始,我是边看边译的,没有通读,加之英语 ...

  4. html5标签canvas函数drawImage使用方法

    html5中标签canvas,函数drawImage(): 使用drawImage()方法绘制图像.绘图环境提供了该方法的三个不同版本.参数传递三种形式: drawImage(image,x,y):在 ...

  5. Angular企业级开发(3)-Angular MVC实现

    1.MVC介绍 Model-View-Controller 在20世纪80年代为程序语言Smalltalk发明的一种软件架构.MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并 ...

  6. Xamarin+Prism开发详解一:PCL跨平台类库与Profile的关系

    在[Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用]中提到过以下错误,不知道大伙还记得不: 无法安装程序包"Microsoft.Identity.Client 1.0. ...

  7. C#文件安全管理解析

    在实际的项目开发中,我们经常需要使用到文件的I/O操作,主要包含对文件的增改删查等操作,这些基本的操作我们都是很熟悉,但是较少的人去考虑文件的安全和操作的管理等方面,例如文件的访问权限管理,文件数据的 ...

  8. 【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到Bintray/Jcenter全过程(新),让开源更简单~

    一.写在前面 自使用android studio开始,就被它独特的依赖方式:compile 'com.android.support:appcompat-v7:25.0.1'所深深吸引,自从有了它,麻 ...

  9. iOS有关横向TableView的东西

    之前看到Apple store里面有横向的tableview,当然也有可能是collectionview啦. 尤其是项目中只有一条那么需要横向滑动的东西,就没有必要使用庞大的collectionvie ...

  10. 基于SignalR的消息推送与二维码描登录实现

    1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...