当前位置: 首页 > news >正文

数据库原理及应用_数据库管理和保护_第5章数据库的安全性_MySQL的安全设置:用户管理、权限管理和角色管理

前言

        "<数据库原理及应用>(MySQL版)".以下称为"本书"中第5.7节内容

引入

        本书P143:MySQL安全设置用于实现"正确的人"能够"正确地访问""正确的数据库资源".MySQL通过两个模块实现数据库资源的安全访问控制,即身份认证模块和权限验证模块.5.7节内容包括用户管理,权限管理和角色管理三部分.

5.7.1用户管理

        MySQL用户包括root用户和普通用户,root用户是超级管理员,拥有所有的权限,而普通用户只能被授权.

1.创建用户

语法:

        CREATE USER 用户名 IDENTIFIED BY 密码;

说明:简化的语法,只设置一个用户名及密码,详情参见本书P144.

举例(例5-1):

CREATE USER tempuser@localhost IDENTIFIED BY 'temp';

注意:以上语句是笔者在navicat premium lite17中,在数据库myds(自建数据库)中写入的查询语句,在mysql(系统自带数据库)中输入查询语句

SELECT * FROM USER;

得到结果

最后一项是刚才添加的用户:tmpuser.说明root管理员不管当前在哪个数据库里操作,都实现了其最高的权限.

2.修改用户密码

语法:

        SET PASSWORD FOR 用户 = '新密码';

举例(例5-2):

SET PASSWORD FOR tmpuser@localhost = 'root';

3.修改用户名

语法:

        RENAME USER 旧用户名 TO 新用户名;

举例(例5-4):

RENAME USER tmpuser@localhost TO tmp_U;

再次跳转到mysql数据库(系统自带数据库),建立新查询

SELECT * FROM USER;

得到结果:这里因为没有用tmp_U@localhost,所以前面的Host里也没有localhost,并没有报错.

4.删除用户

语法:

        DROP USER 用户名;

举例(例5-5):

DROP USER tmp_U;

以下是结果:用户tmp_U已被删除

以上是用户操作,语法很直观

5.7.2权限管理

总览        

        权限管理分为授予权限和撤销权限.撤销权限的操作和授予权限有对应关系.

        授予权限有两点注意

        1>本书提到权限分为5类,其实有4类,从语法上看出字段级别权限表级别权限没有区别.仔细看字段级别权限比较小,只能查询SELECT,插入INSERT,更新UPDATE表内容.限于表内容的部分权限(俗称的'增删改查'中的'增改查',不能删除表内容),而没有表结构的(新建删除和列修改)的权限

        2>授权的语法概括

                GRANT 权限名称1,权限名称2...

                ON XXX

                TO 用户1,用户2...

        其中斜体部分为具体内容(根据实际情况填入),红色的xxx表示不同的权限级别.

授权管理

1.表级别(字段级别)权限

语法:        

                GRANT 权限名称1,权限名称2...

                ON TABLE 数据库名.表名或视图名

                TO 用户1,用户2...

在ON和TO之间指明了授予权限给哪个表(视图相当于依托现有表生成的一张表,前面提过)

例5-7授予表级别权限示例 

在当前数据库输入(以root超管身份)以下查询语句

(笔者自建的数据库名叫myds,本书叫scott1,有出入)

CREATE USER table_user@localhost IDENTIFIED BY 'password';GRANT ALTER,SELECT,INSERT(empno,ename)
ON TABLE myds.emp
TO table_user@localhost;

在mysql系统数据库输入查询语句

SELECT * FROM tables_priv
WHERE host='localhost' AND user='table_user';

结果:

以table_user用户连接服务器,建立的连接名称叫"table_user测试",在navicat premium lite17中显示如下图,执行以下语句 

DESC myds.emp;

结果:

再执行以下语句:

ALTER TABLE myds.emp
MODIFY COLUMN empno INT;DESC myds.emp;

结果(ALTER操作已成功)

如果此处想修改(update)emp表中数据(SMITH改为SMI),操作如下,将被拒绝(提示没有update权限)

注意:

本书P147:系统数据MySQL的系统表Table_priv中记录了用户表级别权限的验证信息.实操应为:tables_priv.

2.存储程序(过程)级别权限

语法:        

                GRANT 权限名称1,权限名称2...

                ON FUNCTION|PROCEDURE 数据库名.函数名|数据库名.过程名

                TO 用户1,用户2...

语法上和表级别权限类似,ON后面先写类型(程序或过程),再写哪个数据库的哪个函数或过程

因笔者前面未写和数据库函数和过程的帖子,所以暂时先放一下

系统数据库MySQL的系统表Proc_priv中记录了用户关于存储程序或过程级别权限的信息.

3.数据库级别权限

语法:        

                GRANT 权限名称1,权限名称2...

                ON 数据库名.*

                TO 用户1,用户2...

语法上和前面有所区别,ON后面添加数据库名和'.*',数据库名需要具体名称输入,'.*'是固定的输入

例5-9数据库级别权限示例,

在myds数据库下输入(本书在mysql系统数据库下输入,因为是root权限,所以都可行)

CREATE USER database_user@localhost IDENTIFIED BY 'password';GRANT CREATE,SELECT,DROP
ON myds.*
TO database_user@localhost;

在mysql系统数据库下输入查询语句--这里需要用mysql系统数据库

SELECT * FROM db
WHERE host='localhost' AND db='myds';

结果(权限已赋予):

  以database_user@localhost(或database_user)用户连接MySQL服务器,  输入以下语句

create table myds.employee4
(empno int not null primary key,ename varchar(14)
)

    ---因为笔者在myds里有employee表,所以添加的表名为employee4.

输入显示指令desc myds.employee4; ,结果如下---添加成功

点开自建数据库myds,里面也能看见新建的表employee4

 

=============================内容分割线↓===================================

对于表级别权限和数据库级别权限的具体内容,可参照本书P147,P149,P150

有个选项叫做'WITH GRANT OPTION',有些令人迷惑,是root给的权限吗,但由root生成的用户user似乎没有create user的权限,但是无需纠结这个选项不用就是了,后面的角色管理可以解决这个问题.

=============================内容分割线↑===================================

4.管理员级别权限

语法:        

                GRANT 权限名称1,权限名称2...

                ON *.*

                TO 用户1,用户2...

语法固定格式:在ON和TO之间用'*.*'      

写法参照例5-10,即将所有前面权限赋给管理员级别权限的用户

当授予管理员级别权限时,本书表5-5权限自动被添加.表5-4权限根据实际情况添加.

注意:本书P151:系统数据库MySQL的系统表user记录了服务器管理员级别权限的认证信息.这句话有歧义,user表记录的是所有用户的级别权限信息,里面包含了服务器管理员---查看user表,管理员所有权限几乎都是Y,对应了本书例子中的语句'GRANT ALL PRIVILEGES'

CREATE USER server_user@localhost IDENTIFIED BY 'password';GRANT ALL PRIVILEGES
ON *.*
TO server_user@localhost;

在mysql系统数据库中输入查询语句

SELECT * FROM user
WHERE host='localhost' AND user='server_user';

结果:

有的项目不是Y而是N,可以看看

撤销权限

        有两种方法:全部撤销和撤销指定权限.

        撤销指定权限的格式和授权格式基本一致,把GRANT改为REVOKE

        具体写法见本书P152和P153,比较直观.

5.7.3角色管理

        当用户较多时,如果一个个去授权,显得比较麻烦.所以产生了角色的概念.

        '角色'和'用户'是一种'组'和'个体'的关系.每个数据库用户都有一个'角色'.管理员给角色授权,角色内所有用户拥有同样的授权.再给具体用户分配角色

        操作过程:创建角色,给角色授权,授予用户角色.

        此外还可以撤销用户角色以及删除角色.

小结

        授权内容和数据库操作的内容是对应的.

        

http://www.dtcms.com/a/414786.html

相关文章:

  • 营销型网站怎么做做网站怎么做起来的
  • SSH安全 白名单配置限制实战:AllowUsers 限制指定 IP 登录
  • 一步步教你为网站开发android客户端贵州网站建设哪家好
  • 嵌入式开发学习日志30——stm32之定时器中断简单项目练习
  • 网站建设经验会议讲话稿东莞建设银行电话号码
  • Unity模拟谐波运动
  • Overleaf编译超时,超出免费计划编译时限(已解决)
  • MySQL 主主复制 + keepalived + HAProxy
  • ARM Synchronization Primitives
  • 好网站建设公司哪家好网站建设首选九零后网络
  • 负载均衡式的在线OJ项目编写(四)
  • Redis 解锁:C++ 实战深度探索 Set 数据类型
  • Nginx 核心安全配置总结
  • xbatis基于 mybatis 的 ORM 框架
  • Spring Gateway动态路由实现方案
  • 网站在线提交询盘系统 能直接发到邮箱深圳市工业设计行业协会
  • Python编程练习:7个经典题目详解
  • JCR分区,中科院分区,CCF分区的含义与区别
  • 二型最大似然(Type II Maximum Likelihood):概述与核心概念
  • 娄底网站建设开发自媒体素材视频网站
  • 云浮源峰网站建设工作室地址门户网站建设相关需求
  • 鸿蒙父组件处理子组件的点击事件
  • DDPM原理解析
  • 白盒密码:守护不可信环境中的密钥安全
  • 创建一个网站买卖WordPress外链方法
  • 使用 Go SDK 玩转 Docker:从容器到多架构构建
  • 原生微信小程序开发基础知识总结架构逻辑
  • 树莓派实现的自动垃圾(纸团)回收机器人
  • 【ROS2学习笔记】节点篇:节点概述
  • Java面试宝典:网络协议与Netty二