项目八:管理数据库安全性课件.pptx
M y S Q LM y S Q L 数 据 库数 据 库项目教程项目教程本章学习目标:1.掌握在数据库中创建和管理用户2.掌握在数据库中对权限的授予、查看和收回操作3.了解事务的基本原理,会使用事务控制程序的执行4.了解事务的隔离级别和锁机制项目八项目八 管理数据库安全性管理数据库安全性重点: 1.创建用户2.修改用户名称和密码3.管理用户权限难点: 1.授予用户权限和收回用户权限2.事务的创建和使用3.MySQL的锁机制任务任务1 1 part管理用户数据库的安全性,是指只允许合法用户进行其权限范围内的数据库相关操作,保护数据库以防止任何不合法的使用所造成的数据泄露、更改或破坏。数据库安全性措施主要涉及用户认证和访问权限两个方面的问题。MySQL 用户主要包括root用户和普通用户。root用户是超级管理员,拥有操作MySQL 数据库的所有权限。如 root用户的权限包括创建用户、删除用户和修改普通用户的密码等管理权限,而普通用户仅拥有创建该用户时赋予它的权限。1.1详解MySQL user权限表MySQL8.0提供了以下2种方法创建用户。使用CREATE USER语句创建用户。使用INSERT语句新建用户。1. 使用CREATE USER语句创建用户可以使用CREATE USER语句来创建MySQL用户,并设置相应的密码。其基本语法格式如下:CREATE USER IDENTIFIED BY password ,用户 IDENTIFIED BY password 1.2创 建 用 户2. 使用INSERT语句创建用户的代码如下:INSERT INTO mysql.user(Host, User, authentication_string, ssl_cipher, x509_issuer, x509_subject) VALUES (hostname, username, password, , , );语法格式如下:RENAME USER TO ;其中:系统中已经存在的 MySQL 用户账号。:新的 MySQL 用户账号。使用 RENAME USER语句时应注意以下几点:RENAME USER语句用于对原有的MySQL用户进行重命名。若系统中旧账户不存在或者新账户已存在,该语句执行时会出现错误。使用RENAME USER语句,必须拥有mysql数据库的UPDATE权限或全局CREATE USER权限。1.3修 改 用 户 名 称MySQL修改用户密码的语法格式如下:UPDATE MySQL.user SET authentication_string=MD5(newpassword) WHERE User=username AND Host=hostname;其中, username 表示(需要修改的用户的)用户名;hostname 表示(需要修改的用户的)主机名;MD5是对密码进行加密。执行 UPDATE 语句后,需要执行 FLUSH PRIVILEGES;语句,重新加载用户权限。1.4修 改 用 户 密 码在MySQL数据库中,可以使用DROP USER语句删除用户,也可以直接在mysql.user表中删除用户以及相关权限。1. 使用 DROP USER 语句删除普通用户使用 DROP USER 语句删除用户的语法格式如下:DROP USER , 其中,用户用来指定需要删除的用户账号。 2. 使用DELETE语句删除普通用户可以使用DELETE语句直接删除mysql.user表中相应的用户信息,但必须拥有 mysql.user表的DELETE权限。其基本语法格式如下:DELETE FROM mysql.user WHERE Host=hostname AND User=username;1.5删除用户任务任务2 2 part管理权限在MySQL数据库中,根据权限的范围,可以将权限分为多个层级。(1)全局层级:使用ON *.*语法赋予权限。(2)数据库层级:使用ON db_name.*语法赋予权限。(3)表层级:使用ON db_name.table_name语法赋予权限。(4)列层级:使用SELECT(col1,col2)、INSERT(col1,col2)和UPDATE(col1, col2)语法授予权限。(5)存储过程、函数级:使用execute on procedure 或execute on function语法授予权限。2.1MySQL中的权限类型在 MySQL中,可以通过SHOW TRIGGERS语句来查看触发器的基本信息,语法格式如下:SHOW TRIGGERS;在 MySQL中,所有触发器的信息都存在information_schema数据库的triggers表中,可以通过查询命令SELECT来查看,具体的语法如下:SELECT * FROM information_schema.triggers WHERE trigger_name= 触发器名;其中,触发器名用来指定要查看的触发器的名称,需要用单引号引起来。除了使用SELECT语句之外,还可以使用SHOW GRANTS FOR语句查看权限。其语法格式如下:SHOW GRANTS FOR usernamehostname;其中,username表示用户名,hostname表示主机名或主机IP。2.2查 看 权 限在MySQL中,拥有GRANT权限的用户才可以执行GRANT语句,其语法格式如下:GRANT priv_type (column_list) ON database.table TO user WITH with_option with_option.其中:priv_type参数表示权限类型;columns_list参数表示权限作用于哪些列上,省略该参数时,表示作用于整个表;database.table用于指定权限的级别,即只能在指定的数据库和表上使用权限;user参数表示用户账户,由用户名和主机名构成,格式是usernamehostname;2.3授予权限在MySQL中,使用REVOKE语句可以收回用户的部分或所有权限。REVOKE语句的语法格式如下。REVOKE priv_type (column_list).ON database.tableFROM user , user.REVOKE 语句中的参数与 GRANT 语句的参数意思相同。其中:priv_type 参数表示权限的类型;column_list 参数表示权限作用于哪些列上,没有该参数时作用于整个表上;user 参数由用户名和主机名构成,格式为“usernamehostname”。 2.4收回权限任务任务3 3part管理事务和锁3.1事务概述数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令。事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行,因此事务是一个不可分割的工作逻辑单元。事务有着极其严格的定义,它必须同时满足4个特征,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),俗称为ACID标准。3.2事 务 的 隔 离 级 别在MySQL中定义了4类隔离级别,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离一般支持高级别的并发处理,并拥有更低的系统开销。这4类隔离级别分别是未提交读(READ UNCOMITTED)、已提交读(READ COMITTED)、可重复读(REPEATABLE READ)和可序列化(SERIALIZABLE)。3.3M y S Q L 的 锁 机 制1. MySQL中锁的分类(1)共享锁(S锁)(2)排他锁(X锁)(3)意向锁参数排他锁共享锁意向排他锁意向共享锁排他锁NNNN共享锁NYNY意向排他锁NNYY意向共享锁NYYY3.4 MySQL中的事务应用事务的开始与结束可以由用户显示控制。在MySQL服务器中,显示操作事务的语句主要包括START TRANSACTION、COMMIT和ROLLBACK等。1.启动事务在默认设置下,MySQL中的事务是默认提交的。MySQL中使用START TRANSACTION或BEGIN语句可以显示控制一个事务的开始,其语法格式如下。START TRANSACTION | BEGIN WORK2.提交事务MySQL使用COMMIT或者COMMIT WORK语句提交事务。提交事务后,对数据库的修改将是永久性的,其语法格式如下。COMMIT WORK AND NO CHAIN NO RELEASE3.4 MySQL中的事务应用3.回滚事务MySQL中,使用ROLLBACK或者ROLLBACK WORK语句回滚事务,回滚事务会撤销正在进行的所有未提交的修改。其语法格式如下:ROLLBACK WORK AND NO CHAIN NO RELEASE;4.事务保存点具体用法如下。(1) SAVEPOINT identifier允许在事务中创建一个保存点,一个事务中可以有多个保存点。(2) RELEASE SAVEPOINT identifier删除一个事务的保存点,当没有一个保存点时执行此语句会抛出一个异常。(3) ROLLBACK TO SAVEPOINT identifier如果给出SAVEPOINT,可以把事务回滚到SAVEPOINT指定的保存点,如果回滚到一个不存在的保存点,会抛出异常。如果不给出SAVEPOINT,则回滚到启动事务之前的状态。3.4 MySQL中的事务应用5.设置事务的隔离级别MySQL中设置事务隔离级别的语法格式如下。SET GLOBAL | SESSION TRANSACTION ISOLATION LEVELREAD UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE ;其中GLOBAL表示此语句将应用于之后的所有会话( SESSION),而当前已经存在的SESSION不受影响。而SESSION表示此语句将应用于当前SESSION内之后的所有事务。若为默认则表示此语句将应用于当前SESSION内的下一个还未开始的事务。本章课后作业见教材