简述构成mysql权限控制步骤

简述构成mysql权限控制步骤,第1张

1、mysql的权限是,从某处来的用户对某对象的权限。

2、mysql的权限采用白名单策略,指定用户能做什么,没有指定的都不能做。

3、权限校验分成两个步骤:

a、能不能连接,检查从哪里来,用户名和密码,常见错误 ERROR 1045 (28000): Access denied for user ...

b、能不能执行 *** 作,粒度从粗到细,分别为:mysql.user, mysql.db, msql.tables_priv, mysql.columns_priv, mysql.proc_priv。

需要注意的是,这些表各有分工,但是在权限分配上有一定的重合。

可以这样理解,mysql 先检查对大范围是否有权限,如果没有再到小范围里去检查。比如:先检查对这个数据库是否有select权限,如果有,就允许执行。如果没有,再检查对表是否有select权限,一直到最细粒度,也没有权限,就拒绝执行。举例来说:要检查张三能否控制一个团,我只要先检查张三能否控制一个军,如果可以,就是有权限,如果不行,再检查张三能否控制一个师。因此,粒度控制越细,权限校验的步骤越多,性能越差,需要考虑。

4、mysql服务启动之后,就会把权限有关的表的数据读到内存中,对权限做的修改,是否会即时生效?要看情况,手动修改表数据,需要 flush privileges

5、创建用户 create user,修改密码 set password,注意 alter user只是设置密码过期,可以登录,但是不能执行任何 *** 作,必须从新设置密码,删除用户 drop user

6、host+user 标示唯一的一个用户,也就是说都叫张三,从不同地方来的张三是两个用户,他们有不同的权限。

7、那么问题来了,表中有两条记录:'root'@'192.168.1.101' 和 'root'@'%', 现在root来登录,mysql 怎么匹配呢?认为是哪个root呢?

mysql 对用户进行了排序,先对host排序,再对user排序,小范围在前面,大范围在后面,从上往下匹配。

8、权限授予,grant 权限 on 对象 to 用户@哪里来 identified by 密码

9、收回权限,revoke 权限 on 对象 from 用户@哪里来,注意revoke 必须要与grant 对应,也就是说,只能收回授予的权限。

10、那么问题来了,我授予张三 select的权限,现在revoke all privileges 也不能收回张三select的权限,因为没有对张三 grant all privileges,怎么解决这个问题?

使用 revoke all privileges,grant option from user

11、权限级别:从某台主机来的某个用户,对某个数据库中某个表的某些列的某部分记录,是否有权限。

12、全局:对象是mysql服务的所有数据库,包含服务级的管理权限,比如showdown

13、数据库:对象是某一个数据库

14、表:对象是数据库中某个表

15、列:对象是表中的某个列,比如:grant select (name) on xxx to xxx

16、程序:对象是存储过程和方法。

17、information_scheme,数据库和表是存放数据的,那么谁来存放 数据库和表这些信息呢? information_scheme 就是记录数据库和表的,需要注意的是,infromation_scheme没有对应的物理文件,它是mysql在内存中维护的。

18、权限设定原则:

a、尽量缩小权限

b、按业务,分离用户,不同的业务对应不同的用户

c、避免权限粒度太细,因为mysql权限检查,会影响性能。

19、文件泄密,linux下mysql客户端执行的 *** 作记录在文件 ~/.mysql_history中,输出重定向/dev/null

20、密码丢失怎么办?

a、mysql启动,增加选项重置密码

b、mysql启动,增加选项不检查权限,登陆后修改密码,退出重启启动。

在 MySQL 里面,grant 语句是用来给用户赋权的。不知道你有没有见过一些 *** 作文档里面提到,grant 之后要马上跟着执行一个 flush privileges 命令,才能使赋权语句生效。

那么,grant 之后真的需要执行 flush privileges 吗?如果没有执行这个 flush 命令的话,赋权语句真的不能生效吗?

接下来,我们介绍一下 grant 语句和 flush privileges 语句分别做了什么事情,然后再一起来分析这个问题。

为了便于说明,先创建一个用户:

这条语句的逻辑是创建一个用户’ua’@’%’,密码是 pa。注意,在 MySQL 里面,用户名 (user)+ 地址 (host) 才表示一个用户,因此 ua@ip1 和 ua@ip2 代表的是两个不同的用户。这条命令做了两个动作:

在 MySQL 中,用户权限是有不同的范围的。接下来,我们按照用户权限范围从大到小的顺序依次说明。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5907108.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-07
下一篇 2023-03-07

发表评论

登录后才能评论

评论列表(0条)

保存