7 数据库的安全管理ppt课件数据库原理与应用 .pptx
7 数据库的安全管理教学课件数据库原理与应用 数据库原理与应用数据库原理与应用数据库原理与应用数据库原理与应用数据库数据库存在存在的的不安全因素不安全因素非授权用户对数据库的恶意存取和破坏非授权用户对数据库的恶意存取和破坏 一些黑客和犯罪分子一些黑客和犯罪分子在用户存取数据库时在用户存取数据库时猎取用户名和用户口猎取用户名和用户口令,然后假冒合法用令,然后假冒合法用户偷取、修改甚至破户偷取、修改甚至破坏用户数据。坏用户数据。数据库原理与应用数据库原理与应用数据库中重要或敏感的数据被泄露数据库中重要或敏感的数据被泄露 黑客和敌对分子千方百计盗窃数据库中的重要数据,一些机密信息被暴露。黑客和敌对分子千方百计盗窃数据库中的重要数据,一些机密信息被暴露。数据库原理与应用数据库原理与应用安全环境的脆弱性安全环境的脆弱性 数据库的安全性与计算机系统的安全性,包括计算机硬件、操作系统、网数据库的安全性与计算机系统的安全性,包括计算机硬件、操作系统、网络系统等络系统等 的安全性是紧密联系的。操作系统安全的脆弱,网络协议安全保障的安全性是紧密联系的。操作系统安全的脆弱,网络协议安全保障的不足等都会造成数据库安全性的破坏。的不足等都会造成数据库安全性的破坏。曾经在伊朗以及其他中东国家发现过一种被称为“flame”(火焰)的病毒程序,这个程序可以让自己假冒成 Windows 更新文件隐藏在目标计算机里。它的作用非常特别,可以随时复制文件、截图、下载聊天记录甚至可以远程启动计算机、激活麦克风和摄像头并偷偷录下视频和音频。这是一种特工病毒,它的作用不是搞破坏而是尽可能的隐藏自己窃取一切有用的信息。“flame”通过蓝牙系统来接收指令,并且可以制造假的电子凭证来隐藏身份,最牛的是当它被发现后还可以立即删除掉所有记录痕迹并自我毁灭,这简直就跟特工干的事儿一模一样。7.1数据库安全性概述数据库原理与设计数据库原理与设计6数据库原理与应用数据库原理与应用数据库安全技术数据库安全技术用户标识与鉴别用户标识与鉴别存取控制存取控制视图视图审计审计数据加密数据加密数据库原理与应用数据库原理与应用1.1.用户标识与鉴别用户标识与鉴别 当前最当前最常用常用的鉴别方法。即用什么来标识一个用户,又怎的鉴别方法。即用什么来标识一个用户,又怎样去识别它。样去识别它。用户的个人特征识别:如用户的声音、指纹、签名等。用户的个人特征识别:如用户的声音、指纹、签名等。用户的特有东西识别:如用户的磁卡、钥匙等。用户的特有东西识别:如用户的磁卡、钥匙等。用户的自定义识别:如用户设置口令、密码和一组预定用户的自定义识别:如用户设置口令、密码和一组预定的问答等。的问答等。数据库原理与应用数据库原理与应用2.2.存取控制策略存取控制策略(1)定义用户权限,并将用户权限登记到数据字典中。)定义用户权限,并将用户权限登记到数据字典中。用户对某一数据对象的操作权力称为权限。用户对某一数据对象的操作权力称为权限。某个用户应该具有何种权限是个管理问题和政策问题而不是技某个用户应该具有何种权限是个管理问题和政策问题而不是技术问题。术问题。DBMS的功能就是保证这些决定的执行。的功能就是保证这些决定的执行。DBMS系统必须提供适当的语言来定义用户权限,这些定义经系统必须提供适当的语言来定义用户权限,这些定义经过编译后存放在数据字典中,被称做安全规则或授权规则。过编译后存放在数据字典中,被称做安全规则或授权规则。数据库原理与应用数据库原理与应用(2)合法权限检查)合法权限检查当用户发出存取数据库的操作请求后,当用户发出存取数据库的操作请求后,DBMS查找数据字典,查找数据字典,根据安全规则进行合法权限检查,若用户的操作请求超出了定根据安全规则进行合法权限检查,若用户的操作请求超出了定义的权限,系统将拒绝执行此操作。义的权限,系统将拒绝执行此操作。数据库原理与应用数据库原理与应用通过视图通过视图用户用户只能只能查看和修改查看和修改他们他们所能看到所能看到的数据。的数据。建立视图建立视图score_db。CREATE VIEW score_db AS SELECT *FROM score WHERE cnam=数据库数据库;示例示例 为用户授予操作视图的权限。为用户授予操作视图的权限。GRANT SELECT ON score_db TO 王莎王莎;视图视图+授权授权 常用的安全性控制方法常用的安全性控制方法3.3.视图机制视图机制数据库原理与应用数据库原理与应用 审计功能把用户对数据库的所有操作自动记录下来放入审计功能把用户对数据库的所有操作自动记录下来放入“审审计日志计日志”中,称为审计跟踪。中,称为审计跟踪。审计员可以利用审计日志监控数据库中的各种行为,重现导致审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。内容等。还可以通过对审计日志分析,对潜在的威胁提前采取措施加以还可以通过对审计日志分析,对潜在的威胁提前采取措施加以防范。防范。审计审计通常是很费时间和空间的,所以通常是很费时间和空间的,所以DBMS往往都将其作为往往都将其作为可选特征,审计功能一般主要用于安全性要求较高的部门。可选特征,审计功能一般主要用于安全性要求较高的部门。4.4.审计跟踪审计跟踪数据库原理与应用数据库原理与应用数据加密是防止数据库中数据在存储和传输中失密的有效手段。数据加密是防止数据库中数据在存储和传输中失密的有效手段。加密加密的基本思想是根据一定的算法将原始数据(称为明文)的基本思想是根据一定的算法将原始数据(称为明文)变换为不可直接识别的格式(称为密文),从而使得不知道解变换为不可直接识别的格式(称为密文),从而使得不知道解密算法的人无法获知数据的内容。密算法的人无法获知数据的内容。由于数据加密与解密也是比较费时的操作,而且数据加密由于数据加密与解密也是比较费时的操作,而且数据加密与解密程序会占用大量系统资源,因此数据加密功能通常也与解密程序会占用大量系统资源,因此数据加密功能通常也作为可选特征。作为可选特征。5.5.数据加密数据加密7.2MySQL的安全设置数据库原理与设计数据库原理与设计14数据库原理与应用数据库原理与应用7.2.1 7.2.1 权限表权限表1.user1.user表表user表字段可以分为表字段可以分为4类,用户列、权限列、安全列和资源控制列。类,用户列、权限列、安全列和资源控制列。(1)用户列)用户列用户列常用的字段有用户列常用的字段有Host、User、authentication_string,分,分别表示主机名、用户名和密码。别表示主机名、用户名和密码。当添加、删除、修改或者查看用户信息时,其实就是对当添加、删除、修改或者查看用户信息时,其实就是对user表表进行增、删、改、查的操作。进行增、删、改、查的操作。数据库原理与应用数据库原理与应用【例7-1】查询user表中相关用户字段信息。SELECT Host,User,authentication_string FROM mysql.user;数据库原理与设计数据库原理与设计(2)权限列)权限列user表中包含了几十个以表中包含了几十个以_priv结尾的与权限有关的字段,这些结尾的与权限有关的字段,这些权限不仅包括查询权限、修改权限等普通权限,还包括关闭服权限不仅包括查询权限、修改权限等普通权限,还包括关闭服务器权限、超级权限和加载用户等高级权限。务器权限、超级权限和加载用户等高级权限。【例7-2】查询localhost主机下的用户的select、insert、update权限。SELECT select_priv,insert_priv,update_priv,User,Host FROM mysql.user WHERE Host=localhost;数据库原理与应用数据库原理与应用(3)安全列)安全列安全列有安全列有12个字段,其中个字段,其中ssl用于加密,用于加密,x509标准可用于标识用标准可用于标识用户,户,plugin字段是用于验证用户身份的插件,如果该字段为空,字段是用于验证用户身份的插件,如果该字段为空,服务器就使用内建授权验证机制验证用户身份。服务器就使用内建授权验证机制验证用户身份。【例7-3】查询服务器是否支持ssl功能。SHOW VARIABLES LIKE have_openssl;数据库原理与应用数据库原理与应用(4)资源控制列)资源控制列资源控制列的字段用来限制用户使用的资源,包括资源控制列的字段用来限制用户使用的资源,包括4个字段。个字段。max_questions:用户每小时允许执行的查询操作次数。:用户每小时允许执行的查询操作次数。max_updates:用户每小时允许执行的更新操作次数。:用户每小时允许执行的更新操作次数。max_connections:用户每小时允许执行的连接操作次数。:用户每小时允许执行的连接操作次数。max_user_connections:用户允许同时建立的连接次数。:用户允许同时建立的连接次数。【例7-4】查询root用户的4个资源控制字段的信息。SELECT max_questions,max_updates,max_connections,max_user_connections FROM mysql.user WHERE User=root;数据库原理与应用数据库原理与应用2.db2.db表表 db表中存储了用户对某个数据库的操作权限,决定用户能从哪表中存储了用户对某个数据库的操作权限,决定用户能从哪个主机存取哪个数据库。个主机存取哪个数据库。(1)用户列)用户列db表的用户列有表的用户列有3个字段个字段Host、User、Db,分别表示主机名、,分别表示主机名、用户名和数据库名,具体表示从某个主机连接某个用户对某个用户名和数据库名,具体表示从某个主机连接某个用户对某个数据库的操作权限。数据库的操作权限。(2)权限列)权限列db表中有表中有19个权限字段,其中个权限字段,其中create_routine_priv和和alter_routine_priv两个字段表明用户是否有创建和修改存储过两个字段表明用户是否有创建和修改存储过程的权限。程的权限。数据库原理与应用数据库原理与应用3.tables_priv3.tables_priv表表 tables_priv表用来对单个表设置操作权限,包括表用来对单个表设置操作权限,包括8个字段。个字段。(1)Host、Db、User、Table_name分别表示主机名、数据库分别表示主机名、数据库名、用户名和表名。名、用户名和表名。(2)Grantor表示修改该记录的用户。表示修改该记录的用户。(3)Timestamp表示修改该记录的时间。表示修改该记录的时间。(4)Table_priv表示对表进行操作的权限,包括表示对表进行操作的权限,包括select、insert、update、delete、create、drop、grant、references、index和和alter。(5)Column_priv表示对表中的列进行操作的权限,包括表示对表中的列进行操作的权限,包括select、insert、update和和refrences。数据库原理与应用数据库原理与应用4.column_priv4.column_priv表表 column_priv表用来对表中的某一列设置操作权限。表用来对表中的某一列设置操作权限。包括包括7个字段,分别是个字段,分别是Host、Db、User、Table_name、Column_name、Timestamp、Column_priv。其中。其中Column_name用来指定对哪些数据列具有操作权限。用来指定对哪些数据列具有操作权限。数据库原理与应用数据库原理与应用5.proc_priv5.proc_priv表表 proc_priv表用来对存储过程和存储函数设置操作权限,表用来对存储过程和存储函数设置操作权限,(1)Host、Db、User分别表示主机名、数据库名和用户名。分别表示主机名、数据库名和用户名。(2)Routine_name表示存储过程或存储函数的名称。表示存储过程或存储函数的名称。(3)Routine_type表示存储过程或存储函数的类型。表示存储过程或存储函数的类型。(4)Grantor表示插入或修改该记录的用户。表示插入或修改该记录的用户。(5)Proc_priv表示拥有的权限,包括表示拥有的权限,包括excute、alter routine、grant三种。三种。(6)Timestamp表示存储记录更新的时间。表示存储记录更新的时间。数据库原理与应用数据库原理与应用7.2.2 7.2.2 用户管理用户管理MySQL的用户包括的用户包括root用户和普通用户,用户和普通用户,root用户是超级管理用户是超级管理员,拥有对整个员,拥有对整个MySQL服务器完全控制的权限,而普通用户只服务器完全控制的权限,而普通用户只能拥有赋予给它的权限。能拥有赋予给它的权限。在在MySQL数据库中,为了防止非授权用户对数据库进行存取,数据库中,为了防止非授权用户对数据库进行存取,DBA可以创建登录用户、修改用户信息和删除用户。可以创建登录用户、修改用户信息和删除用户。数据库原理与应用数据库原理与应用1 1创建用户创建用户CREATE USER 用户用户 IDENTIFIED BY 密码密码 ,用户用户 IDENTIFIED BY 密码密码;【说明】【说明】用户的格式:用户名用户的格式:用户名主机名主机名 主机名即用户连接主机名即用户连接MySQL时所在主机的名字。如果在创建时只时所在主机的名字。如果在创建时只给出了账号的用户名,而没有指定主机名,则主机名会默认为是给出了账号的用户名,而没有指定主机名,则主机名会默认为是“%”,表示一组主机;,表示一组主机;localhost表示本地主机。表示本地主机。IDENTIFIED BY子句指定创建用户时的密码。子句指定创建用户时的密码。数据库原理与应用数据库原理与应用【例7-6】创建本机用户tempuser,其密码为temp。CREATE USER tempuserlocalhost IDENTIFIED BY temp;创建的新用户的详细信息自动保存在系统数据库mysql的user表中,执行如下SQL语句,可查看数据库服务器的用户信息。USE mysql;SELECT*FROM user WHERE user=tempuser;数据库原理与应用数据库原理与应用2 2修改用户密码修改用户密码SET PASSWORD FOR 用户用户=新密码新密码;【例7-7】修改用户账号tempuser的密码为123456。SET PASSWORD FOR tempuserlocalhost=123456;【例7-8】修改root超级用户的密码为root。SET PASSWORD FOR rootlocalhost=root;数据库原理与应用数据库原理与应用3.3.修改用户名修改用户名RENAME USER 旧用户名旧用户名 TO 新用户名新用户名 ,旧用户名旧用户名 TO 新用户名新用户名,;【例7-9】修改普通用户tempuser的用户名为temp_U。RENAME USER tempuserlocalhost TO temp_Ulocalhost;USE mysql;SELECT*FROM user WHERE user=temp_U and host=localhost;数据库原理与应用数据库原理与应用4 4删除用户删除用户DROP USER 用户用户,;【例7-10】删除用户temp_U。DROP USER temp_Ulocalhost;USE mysql;SELECT*FROM user WHERE user=temp_U and host=localhost;数据库原理与应用数据库原理与应用7.2.3 7.2.3 权限管理权限管理权限管理主要是对登录到权限管理主要是对登录到MySQL服务器的数据库用户进行权服务器的数据库用户进行权限验证。限验证。所有用户的权限都存储在所有用户的权限都存储在MySQL的权限表中。的权限表中。合理的权限管理能够保证数据库系统的安全,不合理的权限合理的权限管理能够保证数据库系统的安全,不合理的权限设置会给数据库系统带来危害。设置会给数据库系统带来危害。权限管理主要包括两个内容:权限管理主要包括两个内容:授予授予权限和权限和取消取消权限。权限。数据库原理与应用数据库原理与应用1.1.授予权限授予权限(1)授予)授予MySQL字段字段级别权限级别权限GRANT 权限名称权限名称(列名列名,列名列名,),权限名称权限名称(列名列名,列名列名,),ON TABLE 数据库名数据库名.表名或视图名表名或视图名 TO 用户用户,用户用户,;在在MySQL中,针对不同的数据库资源,可以将权限分为五类,中,针对不同的数据库资源,可以将权限分为五类,即即MySQL字段级别权限、字段级别权限、MySQL表级别权限、表级别权限、MySQL存储程存储程序级别权限、序级别权限、MySQL数据库级别权限和数据库级别权限和MySQL服务器管理员服务器管理员级别权限。级别权限。数据库原理与应用数据库原理与应用 系统数据库系统数据库mysql的系统表的系统表columns_priv中记录了用户字段级中记录了用户字段级别权限的验证信息。别权限的验证信息。数据库原理与应用数据库原理与应用【例7-11】创建新用户column_user,并为其授予对fruits表中列的操作权限。CREATE USER column_userlocalhost IDENTIFIED BY password;GRANT SELECT(f_name,f_price),UPDATE(f_price),REFERENCES(s_id)ON TABLE fruitsales.fruits TO column_userlocalhost;SELECT*FROM mysql.columns_priv;数据库原理与应用数据库原理与应用以column_user用户连接MySQL服务器SELECT f_name,f_price FROM fruitsales.fruits;SELECT f_id FROM fruitsales.fruits;数据库原理与应用数据库原理与应用(2)授予)授予MySQL表级表级别权限别权限GRANT 权限名称权限名称,权限名称权限名称,ON TABLE 数据库名数据库名.表名或数据库名表名或数据库名.视图名视图名 TO 用户用户,用户用户,;系统数据库系统数据库mysql的系统表的系统表tables_priv中记录了用户中记录了用户MySQL表级表级别权限的验证信息。别权限的验证信息。数据库原理与应用数据库原理与应用数据库原理与应用数据库原理与应用【例7-12】创建新用户table_user,并为其授予对fruits表的操作权限。CREATE USER table_userlocalhost IDENTIFIED BY password;GRANT ALTER,SELECT,INSERT(f_id,f_name,f_price)ON TABLE fruitsales.fruits TO table_userlocalhost;SELECT*FROM mysql.tables_priv WHERE host=localhost and user=table_user;数据库原理与应用数据库原理与应用以table_user用户连接MySQL服务器ALTER TABLE fruitsales.fruits ADD f_origin VARCHAR(50);DESC fruitsales.fruits;数据库原理与应用数据库原理与应用【例7-13】创建新用户view_user,授予其只能查询供应商101水果销售情况信息。CREATE USER view_userlocalhost IDENTIFIED BY password;USE fruitsales;CREATE VIEW s101_od AS SELECT s_name,o_num,f_name,quantity FROM fruits f,orderitems o,suppliers s WHERE f.f_id=o.f_id AND f.s_id=s.s_id AND s.s_id=101;GRANT SELECT ON s101_od TO view_userlocalhost;数据库原理与应用数据库原理与应用以view_user用户连接MySQL服务器SELECT*FROM fruitsales.s101_od;数据库原理与应用数据库原理与应用(3)授予)授予MySQL存储程序存储程序级别权限级别权限GRANT 权限名称权限名称,权限名称权限名称,ON FUNCTION|PROCEDURE 数据库名数据库名.函数名函数名 数据库名数据库名.存储过程名存储过程名 TO 用户用户,用户用户,;系统数据库系统数据库mysql的系统表的系统表procs_priv中记录了用户中记录了用户MySQL存储存储程序级别权限的验证信息。程序级别权限的验证信息。数据库原理与应用数据库原理与应用【例7-14】创建新用户proc_user,并为其授予对fruitsales数据库中的存储过程的操作权限。CREATE USER proc_userlocalhost IDENTIFIED BY password;DELIMITER CREATE PROCEDURE fruitsales.test_p()BEGIN SELECT*FROM fruitsales.fruits;ENDGRANT EXECUTE ON PROCEDURE fruitsales.test_p TO proc_userlocalhost;以proc_user用户连接MySQL服务器CALL fruitsales.test_p;数据库原理与应用数据库原理与应用(4)授予)授予MySQL数据库数据库级别权限级别权限GRANT 权限名称权限名称,权限名称权限名称,ON 数据库名数据库名.*TO 用户用户,用户用户,;系统数据库系统数据库mysql的系统表的系统表db中记录了用户中记录了用户MySQL数据库级别权数据库级别权限的验证信息。限的验证信息。数据库原理与应用数据库原理与应用数据库原理与应用数据库原理与应用【例7-15】创建新用户database_user,并为其授予对fruitsales数据库的操作权限。CREATE USER database_userlocalhost IDENTIFIED BY password;GRANT CREATE,SELECT,DROP ON fruitsales.*TO database_userlocalhost;以database_user用户连接MySQL服务器CREATE TABLE fruitsales.test(id INT NOT NULL PRIMARY KEY,name VARCHAR(10);DROP TABLE fruitsales.test;数据库原理与应用数据库原理与应用(5)授予)授予MySQL服务器管理员服务器管理员级别权限级别权限GRANT 权限名称权限名称,权限名称权限名称,ON *.*TO 用户用户,用户用户,;系统数据库系统数据库mysql的系统表的系统表user中记录了用户中记录了用户MySQL服务器管理服务器管理员级别权限的验证信息。员级别权限的验证信息。数据库原理与应用数据库原理与应用数据库原理与应用数据库原理与应用【例7-16】创建新用户server_user,并为其授予对所有数据库的操作权限。CREATE USER server_userlocalhost IDENTIFIED BY password;GRANT ALL PRIVILEGES ON*.*TO server_userlocalhost;以sever_user用户连接MySQL服务器CREATE DATABASE test_db;数据库原理与应用数据库原理与应用(6)权限的)权限的转移转移权限的转移通过在权限的转移通过在GRANT语句中使用语句中使用WITH GRANT OPTION子句来实现。子句来实现。如果指定为如果指定为WITH GRANT OPTION,则表示,则表示TO子句中的所有子句中的所有用户都具有用户都具有把自己所拥有的权限授予给其他用户的权利把自己所拥有的权限授予给其他用户的权利,而无,而无论那些其它用户是否拥有该权限。论那些其它用户是否拥有该权限。数据库原理与应用数据库原理与应用【例7-17】创建新用户u1和u2,为u1赋予对fruits表增删改查的权限,并且u1能够将所拥有的权限再赋予给u2。CREATE USER u1localhost IDENTIFIED BY 123;CREATE USER u2localhost IDENTIFIED BY 456;GRANT SELECT,INSERT,UPDATE,DELETE ON fruitsales.fruits TO u1localhost WITH GRANT OPTION;以u1用户连接MySQL服务器GRANT SELECT ON fruitsales.fruits TO u2localhost;以u2用户连接MySQL服务器SELECT*FROM fruitsales.fruits;数据库原理与应用数据库原理与应用2.2.撤消权限撤消权限(1)撤消)撤消所有所有权限权限REVOKE ALL PRIVILEGES,GRANT OPTION FROM 用户用户,用户用户,;数据库原理与应用数据库原理与应用【例7-18】撤消例7-11用户column_userlocalhost的所有权限。SELECT*FROM mysql.columns_priv WHERE user=column_user AND host=localhost;数据库原理与应用数据库原理与应用REVOKE ALL PRIVILEGES,GRANT OPTION FROM column_userlocalhost;SELECT*FROM mysql.columns_priv WHERE user=column_user AND host=localhost;数据库原理与应用数据库原理与应用(2)撤消)撤消指定指定权限权限REVOKE 权限名称权限名称(列名列名,列名列名,),权限名称权限名称(列名列名,列名列名,),ON *.*|数据库名数据库名.*|数据库名数据库名.表名或视图名表名或视图名 FROM 用户用户,用户用户,;数据库原理与应用数据库原理与应用【例7-19】撤消例7-14用户database_userlocalhost的CREAT和DROP权限。SELECT*FROM db WHERE host=localhost and user=database_user;数据库原理与应用数据库原理与应用REVOKE CREATE,DROP ON fruitsales.*FROM database_userlocalhost;SELECT*FROM mysql.db WHERE host=localhost and user=database_user;数据库原理与应用数据库原理与应用7.2.4 7.2.4 角色管理角色管理MySQL的权限设置是非常复杂的,权限的类型也非常多,这的权限设置是非常复杂的,权限的类型也非常多,这就为就为DBA有效地管理数据库权限带来了困难。另外,数据库的有效地管理数据库权限带来了困难。另外,数据库的用户通常有几十个、几百个、甚至成千上万个。如果管理员为用户通常有几十个、几百个、甚至成千上万个。如果管理员为每个用户授予或者撤销相应的权限,则这个工作量是非常庞大每个用户授予或者撤销相应的权限,则这个工作量是非常庞大的。为了简化权限管理,的。为了简化权限管理,MySQL提供了角色的概念。提供了角色的概念。角色是具有名称的一组相关权限的集合,即将不同的权限集合角色是具有名称的一组相关权限的集合,即将不同的权限集合在一起就形成了角色。在一起就形成了角色。可以使用角色为用户授权,同样也可以撤销角色。可以使用角色为用户授权,同样也可以撤销角色。由于角色集合了多种权限,所以当为用户授予角色时,相当于由于角色集合了多种权限,所以当为用户授予角色时,相当于为用户授予了多种权限。这样就避免了向用户逐一授权,从而为用户授予了多种权限。这样就避免了向用户逐一授权,从而简化了用户权限的管理。简化了用户权限的管理。数据库原理与应用数据库原理与应用1 1创建角色创建角色CREATE ROLE 角色角色;【说明】角色格式:角色名【说明】角色格式:角色名主机名。主机名。数据库原理与应用数据库原理与应用【例7-20】分别在本地主机上创建应用程序角色app、运维人员角色ops、开发人员读角色dev_read、开发人员写角色dev_write。CREATE ROLE applocalhost,opslocalhost,dev_readlocalhost,dev_writelocalhost;SELECT*FROM mysql.user WHERE host=localhost AND user IN(app,ops,dev_read,dev_write);数据库原理与应用数据库原理与应用2 2授予角色权限授予角色权限只需将只需将GRANT语句语句TO后的用户改为角色即可。后的用户改为角色即可。【例7-21】分别授予角色app数据读写权限、角色ops访问数据库权限、角色dev_read读取权限、角色dev_write写权限。GRANT SELECT,INSERT,UPDATE,DELETE ON fruitsales.*TO applocalhost;GRANT ALL PRIVILEGES ON fruitsales.*TO opslocalhost;GRANT SELECT ON fruitsales.*TO dev_readlocalhost;GRANT INSERT,UPDATE,DELETE ON fruitsales.*TO dev_writelocalhost;数据库原理与应用数据库原理与应用3 3授予用户角色授予用户角色GRANT 角色角色,角色角色,TO 用户用户,用户用户,;【例7-22】分别将角色授予新用户app01、ops01、dev01、dev02、dev03。CREATE USER app01localhost IDENTIFIED BY 000000;CREATE USER ops01localhost IDENTIFIED BY 000000;CREATE USER dev01localhost IDENTIFIED BY 000000;CREATE USER dev02localhost IDENTIFIED BY 000000;CREATE USER dev03localhost IDENTIFIED BY 000000;创建新的用户账号数据库原理与应用数据库原理与应用GRANT applocalhost TO app01localhost;GRANT opslocalhost TO ops01localhost;GRANT dev_readlocalhost TO dev01localhost;GRANT dev_readlocalhost,dev_writelocalhost TO dev02localhost,dev03localhost;给用户账号分配角色数据库原理与应用数据库原理与应用set global activate_all_roles_on_login=ON;用户使用角色权限前,必须要先激活角色以dev01用户连接MySQL服务器SELECT*FROM fruitsales.suppliers;数据库原理与应用数据库原理与应用4 4撤消用户角色撤消用户角色REVOKE 角色角色,角色角色,FROM 用户用户,用户用户,;【例7-23】撤消用户dev01的角色dev_read。REVOKE dev_readlocalhost FROM dev01localhost;以dev01用户连接MySQL服务器SELECT*FROM fruitsales.suppliers;数据库原理与应用数据库原理与应用5 5删除角色删除角色DROP ROLE 角色角色,角色角色,;【例7-24】删除角色app和ops。DROP ROLE applocalhost,opslocalhost;数据库原理与应用数据库原理与应用7.2.5 7.2.5 密码管理密码管理*1.Windows1.Windows系统下系统下丢失丢失MySQL MySQL rootroot登录登录密码密码的解决方法的解决方法(1)授予)授予MySQL字段级别权限字段级别权限(1)以管理员身份打开)以管理员身份打开“命令提示符命令提示符”窗口,关闭窗口,关闭MySQL服务,服务,进入进入MySQL的的bin目录,执行命令及执行结果如图目录,执行命令及执行结果如图7-1所示。所示。数据库原理与应用数据库原理与应用(2)开启安全模式下的)开启安全模式下的MySQL服务,执行命令及执行结果如图服务,执行命令及执行结果如图7-2所示,命令执行后光标一直在闪烁。所示,命令执行后光标一直在闪烁。数据库原理与应用数据库原理与应用(3)在不关闭图)在不关闭图7-2窗口的基础上,重新打开一个窗口的基础上,重新打开一个“命令提示符命令提示符”窗口,登录窗口,登录MySQL,执行命令及执行结果如图,执行命令及执行结果如图7-3所示。所示。数据库原理与应用数据库原理与应用(4)使用)使用UPDATE语句将语句将root的密码置空。在的密码置空。在MySQL8.0版本的版本的安全模式下,如果安全模式下,如果root用户的密码不为空,就无法直接修改。用户的密码不为空,就无法直接修改。SQL语句及执行结果如图语句及执行结果如图7-4所示。所示。数据库原理与应用数据库原理与应用(5)执行完图)执行完图7-4中的语句后,需要刷新一下,如果不刷新将会中的语句后,需要刷新一下,如果不刷新将会报错,报错,SQL语句及执行结果如图语句及执行结果如图7-5所示。所示。数据库原理与应用数据库原理与应用(6)刷新之后使用)刷新之后使用ALTER USER语句修改用户的密码,语句修改用户的密码,SQL语语句及执行结果如图句及执行结果如图7-6所示。所示。数据库原理与应用数据库原理与应用(7)退出)退出MySQL,SQL语句及执行结果如图语句及执行结果如图7-7所示。所示。(8)关闭图)关闭图7-7和图和图7-2所示的两个所示的两个“命令提示符命令提示符”窗口。窗口。数据库原理与应用数据库原理与应用(9)重新打开一个新的)重新打开一个新的“命令提示符命令提示符”窗口,重启窗口,重启MySQL服务,服务,执行命令及执行结果如图执行命令及执行结果如图7-8所示。所示。数据库原理与应用数据库原理与应用(10)MySQL服务启动成功之后,服务启动成功之后,root用户用新密码登录用户用新密码登录MySQL,执行命令及执行结果如图,执行命令及执行结果如图7-9所示。执行结果显示,在所示。执行结果显示,在Windows下重新设置下重新设置root用户密码成功。用户密码成功。数据库原理与应用数据库原理与应用2.2.密码管理密码管理(1)密码过期策略)密码过期策略手动设置账号密码过期的手动设置账号密码过期的SQL语句格式如下:语句格式如下:ALTER USER 用户用户 PASSWORD EXPIRE;【例7-25】将用户pwd账号的密码设置为过期。CREA