MySQL中的权限详解
技术百科
小云云
发布时间:2018-01-13
浏览: 次 本文主要介绍了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有哪些权限
四、数据库层面(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;
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"
相关推荐:
关于mysql权限与安全详解
Mysql权限系统工作原理
MySQL权限管理
# 的是
# 是有
# 却是
# 情况下
# windows
# 可以通过
# 一句
# 配置文件
# linux
# 数据库
# mysql
# 中为
# 来实现
# 新建一个
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- 微信里的php文件怎么变mp4_微信接收php转m
- Win11怎么关闭搜索历史_Win11清除任务栏搜
- Python函数接口稳定性_版本演进解析【指导】
- Win11怎么关闭系统透明度_Windows11个
- Windows10蓝屏代码DPC_WATCHDOG
- Win11怎么忘记WiFi网络_Win11删除已保
- Python解释执行模型_字节码流程说明【指导】
- 微信企业付款回调PHP怎么接收_处理企业付款异步通
- Win11怎么关闭自动更新 Win11永久关闭系统
- php485在macos下怎么配置_php485
- C#如何序列化对象为XML XmlSerializ
- c++中的std::conjunction和std
- PHP 中如何在函数内持久修改引用变量所指向的目标
- Mac怎么查看活动监视器_理解Mac进程和资源占用
- Python数据抓取合法性_合规说明【指导】
- 如何使用Golang实现容器安全扫描_Golang
- c++中explicit(bool)的用法 c++
- Win11怎么开启远程桌面_Win11系统远程桌面
- Go 语言标准库为何不提供泛型 Contains
- 如何用正则表达式精确匹配“start”到“end”
- How to Properly Use NumPy
- Windows系统文件被保护机制阻止怎么办_权限不
- Python并发安全问题_资源竞争说明【指导】
- Win11怎么关闭定位服务 Win11禁止应用获取
- Win11开始菜单打不开_修复Windows 11
- MAC怎么使用表情符号面板_MAC Emoji快捷
- Windows10怎么用“讲述人”读屏辅助 Win
- Go 中 defer 在 goroutine 内部
- Win11怎么关闭通知消息_屏蔽Windows 1
- Win11怎么连接投影仪_Win11多显示器投屏设
- Python与OpenAI接口集成实战_生成式AI
- Win11怎么恢复出厂设置_Win11重置此电脑保
- Win11如何隐藏桌面图标 Win11一键隐藏/显
- Win11怎么关闭系统声音_Win11系统提示音静
- windows如何备份注册表_windows导出和
- MAC如何修改默认应用程序_MAC文件后缀关联设置
- Win11怎么开启剪贴板历史记录_Windows1
- 如何高效获取循环末次生成的 NumPy 数组最后一
- Win10怎样清理C盘浏览器缓存_Win10清理浏
- Win11怎么开启游戏模式_Windows11优化
- Python迭代器生成器进阶教程_节省内存与懒加载
- 为什么本地php环境运行php脚本卡顿_php执行
- 如何使用Golang实现微服务事件驱动_使用消息总
- Windows11怎样开启游戏模式_Windows
- Windows怎样关闭锁屏广告_Windows关闭
- Win11怎么恢复误删照片_Win11数据恢复工具
- Python实现图数据库操作_Neo4j核心CRU
- 短链接怎么自定义还原php_修改解码规则适配需求【
- Win11怎么设置系统还原_Windows11系统
- c++ std::atomic如何保证原子性 c+

QQ客服