MySQL 用户管理 和权限分配

1.权限表

MySQL 是一个多用户的数据库,MySQL的用户可以分为两大类:

    (1).超级管理员用户(root),拥有全部权限

    (2).普通用户,由root创建,普通用户只拥有root所 分配的权限

1.1 权限表的位置

数据库:MySQL

与权限相关的数据表:user,db,host,tables_priv,columns_privs,procs_priv等

1.2 user表

    user表存储了:

        (1)用户的信息:host(用户所在的主机),user(用户名),password(密码)

        (2)用户的权限信息:_priv

        (3)安全相关的信息:ssl_,x509,记录用户登录的验证操作等

        (4)与资源分配相关的信息:max_,

                        max_questions 表示用户在一个小时内最多可以进行的查询次数。

                        max_update表示一个用户在一个小时内最多进行的更新次数,也包括增加数据、删除数据。

                        max_connections:表示用户最多可以建立的连接数。

1.2.1 user表的内容

    (1)host列

                localhost 表示本机的用户或者超级管理员

                %表示任何主机上的root用户

                说明:_priv权限是全局权限,不受数据库的范围限制。

1.3 DB表

    (1)与用户相关的字段:hots(用户所在的主机),user(用户名)

    (2)与权限相关的字段:_priv,DB字段规定了_priv权限的有效范围。

1.4 host表

    (1)与用户相关的字段:hots(用户所在的主机)

    (2)与权限相关的字段:_priv,DB字段规定了_priv权限的有效范围。

   说明:

        (1)记录主机上的用户对数据库拥有的权限,侧重点在主机,而不在用户。

        (2)Host表的优先级大于DB表,如果db 表规定这个用户没有权限,但是host表规定了这台主机的用户权限,那么db的这个用户也是拥有权限的。

1.5tables_priv表

设定了用户对某个表拥有的权限,该表记录了用户的信息,以及某个表的权限信息table_priv(select,insert,alter等等),以及表上的某个列的权限信息column_priv。

1.6 coiumn_priv表

记录某用户对某表的某个列所拥有的权限

1.7procs_priv

规定了用户关于存储过程及存储函数的操作权限,主要字段:proc_priv


2.创建数据库用户2

2.1 创建普通用户

create user  "用户名称" [@“主机名称”]

eg:

   create user "user1";

验证是否创建成功:


说明:host字段的%表示不受任何主机的限制。

(2)创建待密码的用户

 create user 'user3' @'localhost' [indentifidy by '用户密码'];

eg:

create user 'user3' @'localhost' [indentified by '123';

验证:



说明:密码是哈希码的形式显示的

2.1.2 使用grant来创建用户,以及授予权限

    grant 是用来给用户授权的,但是也可以用来创建用户,grant在给用户进行授权的时候,如果用户是不存在的,那么grant会自动创建这个用户,然后再给这个用户授权。

  (1)添加权限

            grant 权限 on 数据库.表  to ‘用户名’@‘登录主机’[indentified by '用户密码'];

                权限:select ,update ,delete,insert ,create,alert,drop(表结构)、references(外键)、create temporary tables (创建临时表)、index(索引操作) 、create view ,show view (视图)、create routine |alert routine ,execute(存储过程)、all 、all privileges(所有权限)


  数据库:数据库名或者*(所有数据库)

    表:表名或者*(某数据库下的所有表),*.*表示所有数据库的所有表

   主机:主机名或者%(任何其他主机)


eg:  grant select ,insert,update,delete on *.* to 'dxc' @'%';


grant select on *.* to 'user4' @'localhost' identified by '123';


(2)为用户授予指定数据库、指定表、制定列的权限:

    grant update(cid,cname) on mysqlpart2.custom to 'user3' @'localhost';

授权成功以后,可以在以下表中查看授权信息:

    数据库:MySQL 》表 : tables_priv "Table privileges"

    数据库:MySQL 》表:coiumns_priv "Column privilgges"

(3)用户权限表

位置:数据库: information_schema 》 表 user_privileges

表的说明:

grantee: 授权者

privilege_type:权限名称

用户表:数据库: mysql »表: user "Users and global privileges"

说明:user表中,”_priv”的值域USER_PRIVILEGES表的PRIVILEGE_TYPE的值是一一对应的。


(4)权限的层级关系

    a.权限的层级关系,就是指权限的适用范围。

    b.权限的最高层级是全局级,所谓全局级就是可以在任何数据库的任何数据表上进行操作。

    c.数据库级:只能在某个数据库上进行操作。

    d.列级:权限信息所在位置:数据库:》MySQL 表:columns_priv"Column privileges;

    e.子程序级:数据库:MySQL 》 表 :procs_priv  "Procedure privilges"


(5)撤销信息

    revoke 权限 on 数据库.表  from  '用户名' @‘登录主机’;

说明 :赋权与撤销权限的区别,就是revoke 是将to  改为 from ;

eg :

    revoke update (cid,cname) on mysqlpart2.custom from 'user3' @'localhost';

(6)查看权限

show grants;  // 自己

show grants for 用户名称 @主机名称;

eg;

show grants for dba@localhost ; // 指定用户指定host

说明:所有SHOW关键字后面的词都是复数,所有CREATE关键字后面的词都是单数。


通过mysql.columns_priv 表来查看权限:

select * from mysql.columns_priv where user='user3' and host='localhost';



2.1.4 CREATE USER 与GRANT 两种方式创建用户的区别

    a.CREATE USER 创建用户的优点:语法简单

    b.create user 创建用户的不足:用户无权限

    c.grant 创建用户的优势:创建用户有权限

    d.grant 创建用户的不足:语法较 create user 繁琐


3.删除MySQL 的用户

delete from mysql.user where user ='用户名称’and  host='主机名称';

eg:

 delete from mysql.user where user='user3' and host='localhost';

删除后使用:flush privileges  来刷新权限。

说明:使用delete 删除用户后,必须使用flush privileges 来刷新权限,否则将无法继续创建用户名与已删用户的用户名相同的用户,即使在user表中看不到已删的用户,如果不刷新权限,也是无法再新建的。

4.修改用户密码

update mysql.user set password=PASSWORD('新密码')  where user='用户名' [and host='主机名']


注意:

    (1)如果不加where条件,则会把所有用户的密码都修改为‘新密码’

    (2)密码修改成功后,需要进行权限刷新操作才能生效,flush privileges;


(1).修改密码的权限

ROOT用户可以修改自己的密码,也可以修改其他用户的密码

其他用户只能修改自己的密码。

(2)PASSWORD函数

用于把密码明文进行加密,所得到的密码为原密码的哈希值。

(3)ROOT用户、普通用户修改自己的密码

    set password=password('新密码')

(4)root用户为其他用户修改密码:    

    set password for '用户名称' @‘主机名称’=password('新密码')


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值