4.1数据库系统安全相关因素mysql
1,外围网络sql
2,主机:数据库
3,数据库自己安全
访问受权相关模块主要是由两部分组成:网络
一个是基本的用户管理模块:主要负责用户登陆连接相关的基本权限控制spa
另一个是访问受权控制模块:随时随地检查已经进门的访问者,校验他们是否 有访问所发出请求须要访问的数据的权限。经过校验者可顺利拿到数据,而未经过校验的访问者,只能收到“访问越权了”的相关反馈。.net
三道防线图:orm
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
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主要有以下权限:
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,客户管理模块流程:
3,权限控制模块流程:详细解释:page45
select * from test.t4 where status='ss';
4.3mysql 访问受权策略:
1,了解来访主机:'username'@'%'授予全部主机权限
2,了解用户:只读,只写,备份,管理,访问特定数据库,表
3,位工做分类
4,确保绝对必要这拥有grant option权限