\quad 在正常的工作环境中,为了保证数据库的安全,数据库的管理员会对需要操作数据库的人员分配账号与可操作的权限范围,让其仅能够在自己权限范围内操作。
mysql数据库中的数据表
\quad 安装Mysql时,数据库会自动安装一个名为mysql的数据库,该数据库主要用于维护数据库的用户以及权限的控制和管理。
用户数据表
\quad 其中DBMS的所有用户信息都保存在mysql.user数据表中。user表具有很多字段,根据字段的功能可以将其分为6类,分别为客户端访问服务器的账号字段,验证用户身份字段,安全连接的字段,资源限制字段,权限字段以及账户是否锁定的字段。下面对其中部分字段进行详细介绍。
-
账号字段
由user和host两个字段共同组成的复合主键区分DBMS里的账户,user字段代表用户的名称,host字段表示允许访问服务器的客户端IP地址,当host为’%'表示所有的客户端都可以访问。下图中除demo用户外的都是系统默认用户,其中root为超级用户。
-
身份验证字段
相关字段:
使用plugin和authentication_string字段保存用户身份验证的信息(旧版本的mysql中使用password)。其中plugin字段用于指定用户的验证插件名称,authentication_string字段根据plugin指定的插件算法对账户明文密码加密后的字符串。
create user 'test'@'localhost' identified by '123456'
图中的暗码是明文‘123456’经过加密处理后得到的。 -
资源限制字段
相关字段:
提供的以’max’开头的字段,保存了对用户可使用的服务器资源的限制,用于防止用户登录服务器后的不法或不合规范的操作浪费服务器的资源。
max_questions,max_updates,max_connections 分别保存每小时允许用户执行查询操作,更新操作,建立连接的最多次数,max_user_connections保存允许用户同时建立连接的最多次数。 -
权限字段
提供的以’_priv’结尾的字段保存了用户的全局权限。
权限数据表
\quad Mysql中的权限信息,根据其作用范围,分别存储在mysql数据库的不同表中,当Mysql启动是会自动加载这些权限信息,读取到内存中。
数据表 | 说明 |
---|---|
user | 保存用户被授予的全局(任意数据库下的任意内容)权限 |
db | 保存用户被授予的数据库级(指定数据库下的任意内容)权限 |
tables_priv | 保存用户被授予的表级(指定数据库下的指定表)权限 |
columns_priv | 保存用户被授予的列级(指定数据库下的指定表的指定列)权限 |
procs_priv | 保存用户被授予的存储过程权限 |
proxies_priv | 保存用户被授予的代理权限 |
用户管理
1.创建用户
create user 账户名 [identified by '明文密码']
[,账户名2[identified by 密码],.... ] [with 资源控制选项]
-- 账号名:'用户名'@'主机号' 省略@'主机号'号则user表中对应host为'%'表示当前用户在任何主机中可连接服务器
-- 省略用户身份验证选项的 identified by 密码 则用户免密登录使用服务器
2.设置密码
/**
除了创建用户的同时可以设置密码外,还可以为没有密码,密码过期,需要修改密码的用户设置密码
**/
alter user 账号名 identified by '明文密码' -- 推荐使用
-- set password for 账户名 = '明文密码'
-- set password for 账户名 =password('明文密码') 从mysql 5.7.6开始弃用
3.修改用户
alter user [if exists] 账户名 更新选项值;
-- 选项有身份验证选项,资源限制,密码管理选项以及账户锁定选项
-- 进行修改了的用户会在mysql.user更新修改的对应字段,没修改的字段不更新
4.用户重命名
-- 不能使用alter user语句
rename 旧账户名1 to 新账户名1 [,旧账户名2 to 新账户名2....];
5.删除用户
drop user [if exists] 账户名1[,账户名2...];
权限管理
权限授予
权限转移和限制
权限回收
数据库角色