当前位置: 首页 > news >正文

《mysql性能调优与架构设计》笔记:三mysql 安全管理

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

4.1数据库系统安全相关因素

        1,外围网络

        2,主机:

        3,数据库本身

            访问授权相关模块主要是由两部分组成:

                一个是基本的用户管理模块:主要负责用户登录链接相关的基本权限控制

                另外一个是访问授权控制模块:随时随地检查已经进门的访问者,校验他们是否 有访问所发出请求需要访问的数据的权限。通过校验者可顺利拿到数据,而未通过校验的访问者,只能收到“访问越权了”的相关反馈。

            三道防线图:

            215855_r2sG_1047106.png

        4,代码:sql注入--危害很大,防不胜防

    4.2权限系统简介

        4.2.1,相关权限信息主要存储在几个被称为grant tables的系统表中。mysql.user,mysql.db,mysql.Host,mysql.table_priv,mysql.column_priv由于权限表数据量比较小,而且访问非常频繁,所以mysql在启动的时候就会将所有的权限信息Load到内存中,所以当我们手动修改权限后要执行FLUSH PRIVILEGES命令来重新加载mysql的权限信息。如果用GRANT,REVOKE,DROP USER不需要执行FLUSH PRIVILEGES,这个几个命令在修改表的时候,内存也进行了修改。CREATE USER来添加用户,注意新添加的用户仅有初始user权限,通过CREATE USER 命令也会更新内存。推荐使用GRANT,REVOKE,DROP USER,CREATE USER进行权限控制。

                5.6以上不包含5.6               5.6以上包含5.6   

           220052_JmTm_1047106.png 215943_BZF0_1047106.png

        4.2.2,权限授予与去除:

            GRANT  授权

            REVOKE 撤回权限

            更新 GRANT TABLES系列表的。

            给用户授权的时候,不仅需要指定用户名,还需要指定来访主机。如果仅仅指定用户名,则mysql则会认为是:'username'@'%'授权,要去除用户权限,同样也要指定来访主机。

            查看某个用户权限:"SHOW GRANTS FOR 'username'@'hostname';    查询 grant tables 系列表里的权限信息

        4.2.3,权限级别:MySQL 中的权限分为五个级别

            1,Global Level:全局控制权限,所有权限信息都保存在mysql.user表中

                作用域:所有权限是针对整个mysqld的,对于数据库下的所有表及所有字段都有效。

            2,Global Level主要有如下权限:

                

220157_AHUf_1047106.png

220158_C5Fw_1047106.png

220159_e7kz_1047106.png

            3,要授予Global Level的权限,则只需要在执行GRANT命令的时候,用*.*来指定适用范围是Global即可,当有多个权限需要授予的时候,也并不需要多次授权,只需要将所有需要的权限通过逗号(,)隔开即可:例如:

            GRANT SELECT,UPDATE,DELETE,INSERT ON *.* TO 'username'@'localhost';

            4,Database Level

                在Global Level之下,其他三个level之上

                作用域:指定数据库下的所有对象

                权限设置:与Global Level比,少了一下几个权限:CREATE USER,FILE,PROCESS,RELOAD,REPLICATION CLIENT,REPLICATION SLAVE,SHOW DATABASES,SHUTDOWN,SUPER,USEAGE,没有增加任何权限

                实现方式:两种:

                    1,GRANT ALTER ON test.* to 'username'@'localhost';

                    2,USE DATABASENAME

                         GRANT DROP ON * TO 'username'@'locahost';

                    3,在授权的时候,如果授予多个用户相同的权限,则可以授权多个用户

                        GRANT CREATE ON test.* TO 'username1'@'localhost,'username2'@'localhost'

                        show grants form username@localhost

            5,Table Level

                   作用域:低于Global Level,Database Level,高于Column Level,Routine Level

                   实现:GRANT INDEX ON test.t1 TO 'USERNAME'@'LOCALHSOT';

                   权限设置:ALTER,CREATE,DELETE,DROP,INDEX,INSERT,SELECT,UPDATE

            6,Column Level:

                    作用域:低于Global,Database,Table level ,高于Routine Level

                    实现:GRANT select(id,value) on test.t2 to 'ab'@'localhsot';

                    注意:当某个用户在向某个表插入(INSERT)数据的时候,如果该用户在某个列上没有INSERT权限,则该列的数据将插入默认值填充

            7,Routeine Level:

                作用域:低于其他4中级别

                权限设置:EXECUTE,ALTER ROUTINE两种

                实现:GRANT EXECUTE ON test.p1 to 'username'@'localhost';

            8,grant 权限:

                拥有grant权限的用户,可以将自身所拥有的权限授权给其他用户,通常加上:WITH GRANT OPTION字句达到授权的目的。

            9,我们可以通过GRANT ALL 语句授予某个Level的所有可用权限给某个用户:

                grant all on test.t4 to 'abc';

            注意:上面的五个权限中:Table,Column,Routine三者在授权的时候有所依赖的对象必须是存在的,而不像DATABASE level,可以在当前数据库不存在的时候完成授权

        4.2.4访问控制实现原理:

            1,组成:

                    用户管理模块:是否存在某个用户

                        主要就是:user表中的host,username,password这三项

                    访问控制模块:监控来访者每个动作

                        所有授权用户都存放在mysql.user表中

                    说明:用户管理模块决定造访者能否进门,访问控制模块则决定每个客人能那什么不能拿什么

           2,客户管理模块流程:

                    220300_Lrh2_1047106.png

            3,权限控制模块流程:详细解释:page45

                    select * from test.t4 where status='ss';

                    220312_wt9x_1047106.png

                
        4.3mysql 访问授权策略:

            1,了解来访主机:'username'@'%'授予所有主机权限

            2,了解用户:只读,只写,备份,管理,访问特定数据库,表

            3,位工作分类

            4,确保绝对必要这拥有grant option权限


转载于:https://my.oschina.net/lnmpstudy/blog/509374

相关文章:

  • Spark和hadoop的关系
  • java7 API详解
  • DNS与BIND
  • 小组级git服务器的搭建
  • hdu 5491(位运算)
  • easyUI datetimebox 自定义显示格式
  • genymotion在后台总是打印这个错误的log 有大神知道怎么解决吗
  • 高效快捷解决一个TextView显示多种字体的控件SpannableTextView
  • JavaScript判断各浏览器CSS前缀的两种方式
  • nginx动静分离后的一些小事故,给出处理方法
  • C#--索引
  • 观察者2
  • 使用异步消息处理更新UI线程
  • jquery 单击li防止重复加载的实现代码
  • delphi 线程同步的基本方法
  • [笔记] php常见简单功能及函数
  • 《Java编程思想》读书笔记-对象导论
  • 【EOS】Cleos基础
  • Date型的使用
  • ES6--对象的扩展
  • Linux各目录及每个目录的详细介绍
  • PermissionScope Swift4 兼容问题
  • React+TypeScript入门
  • Theano - 导数
  • ViewService——一种保证客户端与服务端同步的方法
  • VUE es6技巧写法(持续更新中~~~)
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 汉诺塔算法
  • 聊聊flink的TableFactory
  • 如何设计一个微型分布式架构?
  • 消息队列系列二(IOT中消息队列的应用)
  • 在electron中实现跨域请求,无需更改服务器端设置
  • ​学习一下,什么是预包装食品?​
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (C语言)fread与fwrite详解
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (学习日记)2024.01.09
  • (转)EXC_BREAKPOINT僵尸错误
  • *1 计算机基础和操作系统基础及几大协议
  • .apk文件,IIS不支持下载解决
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .net 反编译_.net反编译的相关问题
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • 。Net下Windows服务程序开发疑惑
  • @Transactional 详解
  • [Android] Android ActivityManager
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue