mysql 5.7中的用户权限分配相关解读!

这篇文章主要介绍了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.新建一个用户并给予相应数据库的权限

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

2.刷新权限

1 flush privileges;

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

3.显示授权

1 show grants;

4.移除授权

1 revoke delete on *.* from ‘jack‘@‘localhost‘;

5.删除用户

1 drop user ‘jack‘@‘localhost‘;

6.给用户改名

1 rename user ‘jack‘@‘%‘ to ‘jim‘@‘%‘;

7.给用户改密码

1 SET authentication_string FOR ‘root‘@‘localhost‘ = authentication_string (‘123456‘);

8.删除数据库

1 drop database test;

9.从数据库导出文件

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

时间: 2024-12-31 03:18:08

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

网络安全系列之三十一 组策略中的用户权限分配

在Win2003系统中打开组策略编辑器,展开[计算机配置\Windows设置\安全设置\本地策略\用户权限分配]. 通过用户权限分配,可以为某些用户和组授予或拒绝一些特殊的权限,如关闭系统.更改系统时间.拒绝本地登录.允许在本地登录等. 常用的用户权限分配策略主要有以下几个: (1)"从网络访问此计算机" 默认情况下任何用户都可以从网络访问计算机,可以根据实际需要撤销某用户或某组用户从网络访问计算机的权限. (2)"拒绝从网络访问这台计算机" 如果某些用户只在本地使

Web服务器管理系列:13、用户权限分配安全设置

本地策略中的用户权限分配项是一个很重要的设置项: 从网络访问计算机指的是在运行里面通过"\\192.168.1.100"这种形式访问计算机里面的共享资源,这个选项里面的账号建议全部删除,因为我们作为一个Web服务器不需要共享什么文件给别人用. 有些时候我们创建会为某个站点开始一个ftp帐户,这个账户的权限仅限于上传下载某些文件,所以我们需要拒绝他的本地登录权限: 添加需要拒绝本地登录的账户名称: 这样我们在登录系统的时候就不会出现这个账户了. Web服务器管理系列:13.用户权限分配安

mysql用户权限分配专栏

00x1创建新用户 通过root用户登录之后创建 grant all privileges on *.* to [email protected] identified by "123456" ; /创建新用户,用户名为testuser,密码为123456 : grant all privileges on *.* to [email protected] identified by "123456" ; /设置用户testuser,可以在本地访问mysql gra

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

linux系统中权限是非常完善的一个功能了,我们如果设置不正确文件就无法使用了,像我们以一般情况需要把文件权限设置为777或644了,对于用户权 限就更加了,像素ftp,nginx,php这些我们都可以给它们设置一个用户并且设置不同权限了,下面我们一起来看看文件与用户权限分配 文件权限设置 权限管理 主要的命令有: chmod.chown.chgrp.umask 1). 改变文件或目录的权限 chmod 2). 改变文件或目录的所有者 chown 3). 改变文件或目录的所属组 chgrp 4)

[转]实现业务系统中的用户权限管理--设计篇

  实现业务系统中的用户权限管理--设计篇 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统中的所有功能.因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让经过授权的用户可以正常合法的使用已授权功能,而对那些未经授权的“非法用户”将会将他们彻底的“拒之门

实现业务系统中的用户权限管理--实现篇

在设计篇中,我们已经为大家阐述了有关权限管理系统的数据库设计,在本篇中,我们将重点放在其实现代码部分.为了让你能够更直接更有效的看到全部动作的代码,我们使用"动作分解列表"的方式来陈述每个动作以及相关资源. 实现权限管理功能的动作 动作分解 动作名 相关表名 操作集类型 (S,U,I,D,SQL) 表单 模组 字符资源 是否分页? 返回提示? 权限检测 权限初始化安装 setup 无 无 无 setup setupok 否 否 否 显示添加管理组界面 addnewgroup 无 无 a

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

赋予wgdp用户查询权限: grant select on wg_dp.* to 'wgdp'@'%' IDENTIFIED BY 'weigou123'; grant all privileges on *.* to 'yangchao'@'%' IDENTIFIED BY 'weigou123' 查询mysql其他用户权限: show grants for wgdp; 取消wgdp用户权限: revoke all on *.* from wgdp; PS:grant, revoke 用户权限

MYSQL 查看数据库中所有用户及拥有权限

查看MYSQL数据库中所有用户 mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;+---------------------------------------+| query                                 |+---------------------------------------+| User: 'cactiuser'@

上课笔记第三十一天MySQL并发控制、引擎、用户权限管理、查询缓存

1.MySQL并发控制机制        并发控制:每个会话会启动一个mysql线程               服务器层:用于控制锁               存储引擎层:并发访问控制基本上应该由存储引擎层完成 锁:lock                读锁:共享锁                写锁:独占锁 锁力度:                 表级锁:myisam表级锁                 行级锁:innodb行级锁 锁分类:                 隐式锁:由