【数据库系统原理】 第十一章 MySQL权限

重点:权限表的关系、授予、撤销权限的关键词

  • MySQL权限表

MySQL通过MySQL权限表来实现控制用户对数据库的访问。

  • 常用到的表有:

user / db / tables_priv / columns_priv / procs_priv

  • 原则
  1. 通过身份认证后,按顺序得到权限:user>>db >> table_priv >>colums_priv
  2. 权限依次递减,全局权限覆盖局部权限

MySQL 中权限的分配是按照 user 表、db 表tables_priv 表和 columns-priv 表的顺序进行分配的。在数据库系统中,先判断 user 表中的值是否为 ,如果user中的值是,就不需要检查后面的表了;如果 user 表中的值为n,则依次检查 db 表、tables_priv 表和 columns_priv 表。

  • user表

user表中权限针对所有数据库。

  • 用户列

host、user和password(authentication_string)

  • 权限列

priv结尾的字段,决定用户权限

字段的值只能y或n,表示有权限和无权限;默认值是n,可使用grant语句赋予权限

  • 安全列
  1. ssl(ssl_type和ssl_cipher)用于加密
  2. x509标准(x509_issuer和x509_subject)用于标识用户
  3. plugin用于验证用户插件,如为空MySQL使用默认验证机制
  • 资源控制列:用来限制用户使用的资源
  1. max_questions:用户每小时允许查询操作次数
  2. max_updates:用户每小时允许更新操作次数
  3. max_connections:用户每小时允许连接操作次数
  4. max_user_connections:单用户可同时的连接次数
  5. 这些字段的默认值为0,表示没有限制
  • db表

db表中的权限针对确定数据库

存储用户对某数据库的操作权限,决定用户能从哪个主机存取哪个数据库;

不受grantrevoke语句的影响。

  • 用户列

host、db、user

  • 权限列

create_routine_priv和alter_routine_priv:创建和修改存储过程。

  1. 如user表中的select_priv取值为y,该用户可查询所有数据库中的表;
  2. 如为某个用户只查询demo权限,userselect_priv取值为ndbselect_priv取值是y
  • tables_priv表

对单表的权限设置,指定的权限适用于确定表的所有列。

说明

  • grantor:修改该记录的用户。
  • timestamp:修改该记录的时间。
  • table_priv:对表操作的权限,包括select、insert、update、delete、create、drop、grant、references、index和alter。
  • column_priv:对表中列操作的权限,包括select、insert、update和references。
  • columns_priv表

对表中某一列操作的权限。

column_name用来指定对哪些数据列具有操作权限。

column_priv:包括select、insert、update和references。

  • procs_priv表

对存储过程和函数权限设置。

说明

  • routine_name:存储过程或存储函数名称。
  • routine_type:表示存储过程或存储函数的类型,function和procedure。
  • grantor:存储插入或修改该记录的用户。
  • proc_priv:拥有的权限,包括execute、alter routine、grant这3种。
  • timestamp:存储记录更新时间。
  • 账户权限管理
  • 授予权限(grant)
  • grant要求提供以下信息:①要授予的权限②被授予访问权限的数据库或表③用户名。

语法格式:

grant priv_type[(column_list)] [,priv_type[(column_list)]]…

on [object_type] priv_level

to user_specification[user_specification]…

[with with_option…]

  • 说明
  1. priv_type:权限的名称,如select、update、delete;
  2. column_list:指定权限要授予该表中哪些具体的列
  3. on子句:指定权限授予的对象和级别,给出要授权的数据库名或表名;
  4. object_type:于指定权限授予的对象类型,用关键字table、function和procedure;
  5. priv_level:指定权限级别。可以授予的权限有如下几组:①列权限②表权限③数据库权限④用户权限。对应地,在grant语句中可用于指定权限级别的值有这样几类格式:

*→表示当前数据库中的所有表。

*.*→表示所有数据库中的所有表。

db_name.* →表示某个数据库中的所有表;

db_name.tbl_name→表示某个数据库中的某个表或视图;

db_name.routine_name→表示某数据库中的某个存储过程或函数。

  1. to子句:用来设定用户的口令,以及指定被授予权限的用户user。

若to子句中给系统存在的用户指定口令,则实现改密码

如权限给一个不存在的用户, mysql会自动创建用户

  1. user_specification:to子句中的具体描述部分,其与create user语句中的user_specification部分一样。
  2. with子句:grant语句的最后可以使用with子句,为可选项,其用于实现权限的转移或限制
  • 撤销权限(revoke)
  • 用于回收某些特定的权限

revoke priv_type[(column_list)] [,priv_type[(column_list)]]…

on[object_type]priv_level from user[,user]…

  • 用于回收特定用户的所有权限

revoke all privileges,grant option

from user[,user]…

  • 说明
  1. revoke和grant用法相似,但作用相反
  2. 使用revoke语句的用户须拥有mysql数据库全局create user或update权限
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值