rock9-MySQL用户权限篇

 用户管理:

一、知识拓展:

在MySQL的user表中存放着关于用户信息可分为四大类别:

  1. 用户列    user表中用户列存放着 host, user,authentication_string 分别表示用户的主机地址,用户名,密码,其中user字段和host字段为表的联合主键,当用户和服务器之间建立连接时输入账户名称,主机名称,密码必须对应user表中的字段,只有三个字段都匹配时,才允许用户建立连接,三个字段的值都是在创建用户时保存的账户信息,用户修改密码时,其实就是在修改user表中authentication _string字段。
  2. 安全列     安全列用于存储用户安全性和认证相关的信息,user表的安全列包含:ssl_cipher,x509_iuser,x509_subject 这些字段提供了与ssl认证相关的信息,可以用于验证用户身份确保通讯的安全性,客户端和服务端建立连接加密时,这些字段将包含有关于安全通讯的详细信息。
  3. 权限列的字段决定了用户的权限,描述了在全局范围内允许数据和数据库的操作,包含查询权限,修改权限等普通权限,还包含关闭权限,超级权限,加载用户等高级权限,普通权限用于操作数据,高级权限用于对数据的管理。
  4. 资源控制列     资源控制用于限制用户所使用的资源,包含四个字段分为:

max_questoins #设置每个小时允许用户执行查询操作的参数。

max_updates #设置每个小时允许用户执行更新操作的参数

max_connections #设置每个小时允许用户执行连接操作的参数

max_user_connections #设置用户允许同时建立连接的参数

在mysql 8.0版本之后用户授权发生了变动,要先创建用户在进行授权(8.0版本之前是创建用户和授权一条命令即可实现)。

二、创建用户:

格式:create  user ‘用户名’@’主机地址’  identified by ‘密码’;

也可以不设置密码:

格式:create  user ‘用户名’@’主机地址’;

查看用户信息表:(用户密码有算法加密使用函数:过滤只显示前100字符

mysql> select host,user,left(authentication_string,100) as password from mysql.user;

+-----------+------------------+------------------------------------------------------------------------+

| host      | user             | password                                                               |

+-----------+------------------+------------------------------------------------------------------------+

| localhost | lisi             |                                                                        |

| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |

三、删除用户:

格式:drop  user  ‘用户名’@‘主机地址’

例如:mysql> drop user 'wang'@'localhost';

通过delete 语句删除lisi用户

例如:mysql> delete from mysql.user where host='localhost' and user='lisi';

四、设置或者修改用户密码:

(只有root用户可以修改其他用户的密码)

格式: alter  user  ‘用户名’@’主机地址’  identified  by ’新密码’;

例如:mysql> alter user 'zhang'@'localhost' identified by '789.com';

五、root用户密码丢失重定义:

1、关闭MySQL进程:

         # killall -9 mysqld

2、通过绕过身份验证来启动MySQL

(在用root用户登录则不需要密码)

        # mysqld --skip-grant-tables --user=mysql --skip-networking &

3、查看后台运行

        # jobs

        [1]+  Running                 mysqld --skip-grant-tables --user=mysql --skip-networking &

4、登录:此时不需要密码即可登录MySQL 

        # mysql -uroot

5、切换数据库

        mysql> use mysql

6、清空root密码:

        mysql> update  user  set  authentication_string='' where  user='root';  

7、刷新数据库:(非必要!)

        mysql> flush privileges;

8、查看进程:

        # jobs

[1]+  Running                 mysqld --skip-grant-tables --user=mysql --skip-networking &

9、杀死进程:

        # kill %1

10、再次查看:

(此时以杀死)

# jobs

[1]+  Done                    mysqld --skip-grant-tables --user=mysql --skip-networking

11、在执行就没有了!

        # jobs

12、后台运行MySQL:

        # mysqld --user=root &

        [1] 16206

13、登录数据库设置root密码:(此时root没有密码---设置密码)      

 # mysql -uroot

        alter user 'root'@'localhost' identified by '123.com';

权限管理:

知识拓展:

权限管理主要是对登录到MySQL中的用户进行权限验证,所有的权限都存在MySQL的权限表中,不合理的权限规划会给mysql服务器带来安全隐患,mysql权限的主要功能是连接到一台指定的主机并赋予该用户在数据库上select、insert、delelte、update 等权限的,账户信息存放在数据库的user、db、tables_priv、lumns_priv 和procs_priv表,在MySQL启动时数据库会将这些数据内容读读取到内存中。

授权分为多个层级

1、全局级:全局授权适用于给一个指定服务器中的所有库设置授权这些权限存储在user表中,使用grant all on   *.*来授权

2、数据库层级:数据库层级适用于给一个指定库中的所有表来设置权限,这些权限信息存在mysql的db表中和MySQL的host表中,使用grant   all   on  db_name*来授权

3、表层级:适用于给指定表中的所有列来设置权限,这些权限存储在MySQL的table_priv表中,使用grant  all  on  db_name.tb_name 来授权

4、列层级:适用于给指定表中单一列数据来设置权限,这些权限信息存储在MySQL的columns_priv 表中,使用grant   all   on   db_name.tb_name(column_name)来授权。

1、用户授权:

格式:grant  权限 on  库名.表名  to  ‘用户名’@’主机地址’;

给zhang用户设置查询权限和写入权限。

例如:mysql> grant select,insert on *.* to 'zhang'@'localhost';

刷新数据库:

        mysql> flush privileges;

权限       权限范围       权限功能

create    数据库、表或索引       允许在数据库中创建新的数据库、表或索引。

drop      数据库、表或视图       允许从数据库中删除数据库、表或视图。

grant option 数据库、表    允许授予他人某个权限。

references     数据库、表    允许创建外键约束或列上的索引。

event     数据库    允许管理事件调度器(Event Scheduler)。

alter       数据库    允许修改数据库的结构,比如修改表结构。

delete    表    允许从表中删除数据。

index     表    允许创建或删除表上的索引。

insert     表    允许向表中插入数据。

select     表或列    允许读取(查询)表中的数据或特定列的数据。

update   表或列    允许修改表中的数据。

create temporary tables    表    允许创建临时表,这些表在当前会话结束后会自动删除。

lock tables    表    允许锁定表,以控制其他用户对表的访问。

trigger   表    允许创建和管理触发器。

create view   视图       允许创建视图。

show view     视图       允许查看视图的定义。

file  访问服务器上的文件    允许访问服务器上的文件,用于数据导入和导出等。

reload    访问服务器上的文件    允许重新加载服务器配置文件或刷新权限缓存。

shutdown     服务器管理    允许关闭服务器。

process  函数       允许查看和终止当前正在运行的连接和查询。

create user    服务器管理    允许创建、更改或删除用户账号。

show databases   服务器管理    允许查看数据库列表。

replication slave  服务器管理    允许作为从服务器连接到主服务器进行复制。

replication client 服务器管理    允许连接到主服务器并接收二进制日志事件。

2、查看用户权限:

mysql> select  host,user,select_priv,insert_priv,grant_priv  from  mysql.user  where  user='zhang';

+-----------+-------+-------------+-------------+------------+

| host      | user  | select_priv | insert_priv | grant_priv |

+-----------+-------+-------------+-------------+------------+

| localhost | zhang | Y           | Y           | N          |

3、撤销权限:

回收与赋予的权限,有效提高数据库安全性,MySQL中使用revoke 语句来撤销用户的某些权限,将用户权限撤销后用户将会从db、host、user、tables_priv和columns_priv表中删除,但是用户记录任然会保存在user表中。

格式:revoke 权限类型 on  库名.表名  from  ‘用户名’@’主机地址’;

撤销zhang用户的查询权限:

例如:mysql> revoke select on *.* from 'zhang'@'localhost';

3.1查看权限(N是没有权限 Y是有权限

mysql> select host,user,select_priv,insert_priv,grant_priv from mysql.user where user='zhang';

+-----------+-------+-------------+-------------+------------+

| host      | user  | select_priv | insert_priv | grant_priv |

+-----------+-------+-------------+-------------+------------+

| localhost | zhang | N           | Y           | N          |

3.2刷新数据库:

mysql> flush privileges;

3.3撤销指定用户所有权限:

格式:revoke   all   privileges,grant   option  from’用户名’@’主机地址’;

例如:mysql> revoke all privileges,grant  option from 'zhang'@'localhost';

3.4查看权限:

mysql> select host,user,select_priv,insert_priv,grant_priv from mysql.user where user='zhang';

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值