1、第第9章章 MySQL安全管理安全管理用户管理用户管理9.19.2权限控制权限控制表维护语句表维护语句9.39.1 用户管理9.1.1 添加、删除用户添加、删除用户1添加用户添加用户可以使用CREATE USER语法添加一个或多个用户,并设置相应的密码。语法格式:CREATE USER user IDENTIFIED BY PASSWORD password , user IDENTIFIED BY PASSWORD password .其中,user的格式为:user_name host name9.1.1 添加、删除用户添加、删除用户【例9.1】添加两个新的用户,king的密码为queen
2、,palo的密码为530415。create user kinglocalhost identified by queen, palolocalhost identified by 530415;完成后可切换到mysql数据库,从user表中查到刚刚添加的两个用户记录:use mysqlshow tables;select * from user9.1.1 添加、删除用户添加、删除用户结果如图9.1所示。9.1.1 添加、删除用户添加、删除用户2删除用户删除用户语法格式:语法格式:DROP USER user , user_name .DROP USER语句用于删除一个或多个MySQL账户,并
3、取消其权限。要使用DROP USER,必须拥有mysql数据库的全局CREATE USER权限或DELETE权限。【例9.2】删除用户palo。drop user palolocalhost;删除后可以用上面介绍的方法查看一下效果。9.1.2 修改用户名、密码修改用户名、密码1修改用户名修改用户名可以使用RENAME USER语句来修改一个已经存在的SQL用户的名字。语法格式:语法格式:RENAME USER old_user TO new_user, , old_user TO new_user .【例9.3】将用户king的名字修改为ken。rename userkinglocalhost
4、 to kenlocalhost;9.1.2 修改用户名、密码修改用户名、密码2修改密码修改密码要修改某个用户的登录密码,可以使用SET PASSWORD语句。语法格式:语法格式:SET PASSWORD FOR user= PASSWORD(newpassword)【例9.4】将用户ken的密码修改为qen。set password for kenlocalhost = password(qen);9.2 权限控制9.2.1 授予权限授予权限可以授予的权限有以下几组。(1)列权限:和表中的一个具体列相关。例如,使用UPDATE语句更新表xs学号列的值的权限。(2)表权限:和一个具体表中的所有
5、数据相关。例如,使用SELECT语句查询表xs的所有数据的权限。(3)数据库权限:和一个具体的数据库中的所有表相关。例如,在已有的xscj数据库中创建新表的权限。(4)用户权限:和MySQL所有的数据库相关。例如,删除已有的数据库或者创建一个新的数据库的权限。9.2.1 授予权限授予权限GRANT语法格式:GRANT priv_type (column_list) , priv_type (column_list) . ON object_type tbl_name | * | *.* | db_name.* TO user IDENTIFIED BY PASSWORD password ,
6、user IDENTIFIED BY PASSWORD password . WITH with_option with_option .其中,object_type: TABLE| FUNCTION| PROCEDUREwith_option : GRANT OPTION| MAX_QUERIES_PER_HOUR count| MAX_UPDATES_PER_HOUR count| MAX_CONNECTIONS_PER_HOUR count| MAX_USER_CONNECTIONS count9.2.1 授予权限授予权限(1)授予表权限和列权限授予表权限时,priv_type可以是以下
7、值:lSELECT:给予用户使用SELECT语句访问特定的表的权力。lINSERT:给予用户使用INSERT语句向一个特定表中添加行的权力。lDELETE:给予用户使用DELETE语句向一个特定表中删除行的权力。lUPDATE:给予用户使用UPDATE语句修改特定表中值的权力。lREFERENCES:给予用户创建一个外键来参照特定的表的权力。lCREATE:给予用户使用特定的名字创建一个表的权力。lALTER:给予用户使用ALTER TABLE语句修改表的权力。lINDEX:给予用户在表上定义索引的权力。lDROP:给予用户删除表的权力。lALL或ALL PRIVILEGES:表示所有权限名。
8、9.2.1 授予权限授予权限【例9.5】授予用户ken在xs表上的SELECT权限。use xscj;grant select on xs to kenlocalhost;【例9.6】用户liu和zhang不存在,授予它们在xs表上的SELECT和UPDATE权限。grant select,update on xs to liulocalhost identified by lpwd, zhanglocalhost identified by zpwd;9.2.1 授予权限授予权限【例9.7】授予ken在xs表上的学号列和姓名列的UPDATE权限。use xscjgrant update(姓名
9、, 学号)on xsto kenlocalhost;9.2.1 授予权限授予权限(2)授予数据库权限授予数据库权限时,priv_type可以是以下值:lSELECT:给予用户使用SELECT语句访问特定数据库中所有表和视图的权力。lINSERT:给予用户使用INSERT语句向特定数据库中所有表添加行的权力。lDELETE:给予用户使用DELETE语句删除特定数据库中所有表的行的权力。lUPDATE:给予用户使用UPDATE语句更新特定数据库中所有表的值的权力。lREFERENCES:给予用户创建指向特定的数据库中的表外键的权力。lCREATE:给予用户使用CREATE TABLE语句在特定数据
10、库中创建新表的权力。lALTER:给予用户使用ALTER TABLE语句修改特定数据库中所有表的权力。lINDEX:给予用户在特定数据库中的所有表上定义和删除索引的权力。lDROP:给予用户删除特定数据库中所有表和视图的权力。lCREATE TEMPORARY TABLES:给予用户在特定数据库中创建临时表的权力。lCREATE VIEW:给予用户在特定数据库中创建新的视图的权力。9.2.1 授予权限授予权限lSHOW VIEW:给予用户查看特定数据库中已有视图的视图定义的权力。lCREATE ROUTINE:给予用户为特定的数据库创建存储过程和存储函数等权力。lALTER ROUTINE:给
11、予用户更新和删除数据库中已有的存储过程和存储函数等权力。lEXECUTE ROUTINE:给予用户调用特定数据库的存储过程和存储函数的权力。lLOCK TABLES:给予用户锁定特定数据库的已有表的权力。lALL或ALL PRIVILEGES:表示以上所有权限名。9.2.1 授予权限授予权限【例9.8】授予ken在xscj数据库中的所有表的SELECT权限。grant select on xscj.* to kenlocalhost;【例9.9】授予ken在xscj数据库中所有的数据库权限。use xscj;grant all on * to kenlocalhost;9.2.1 授予权限授予
12、权限(3)授予用户权限MySQL授予用户权限时priv_type还可以是以下值。lCREATE USER:给予用户创建和删除新用户的权力。lSHOW DATABASES:给予用户使用SHOW DATABASES语句查看所有已有的数据库的定义的权利。【例9.10】授予peter对所有数据库中的所有表的CREATE、ALTERT和DROP权限。grant create ,alter ,drop on *.* to peterlocalhost identified by ppwd;【例9.11】授予peter创建新用户的权力。grant create user on *.* to peterloc
13、alhost;为了概括权限,表9.1列出了可以在哪些级别授予某条SQL语句权限。9.2.2 权限转移和限制权限转移和限制【例9.12】授予caddy在xs表上的SELECT权限,并允许其将该权限授予其他用户。首先在root用户下授予caddy用户SELECT权限:grant select on xscj.xs to caddylocalhost identified by 19830925 with grant option;(1)打开命令行窗口,进入mysql安装目录下的bin目录:cd C:Program FilesMySQLMySQL Server 5.6bin(2)登录,输入命令:my
14、sql -hlocalhost -ucaddy -p19830925其中,-h后为主机名,-u后为用户名,-p后为密码。9.2.2 权限转移和限制权限转移和限制登录后的界面如图9.2所示。9.2.2 权限转移和限制权限转移和限制登录后,caddy用户只有查询xscj数据库中xs表的权利,它可以把这个权限传递给其他用户,这里假设用户Jim已经创建:grant select on xscj.xs to Jimlocalhost;【例9.13】授予Jim每小时只能处理一条SELECT语句的权限。grant select on xs to Jimlocalhost with max_queries_p
15、er_hour 1; 9.2.3 权限回收权限回收要使用REVOKE,用户必须拥有mysql数据库的全局CREATE USER权限或UPDATE权限。语法格式:语法格式:REVOKE priv_type (column_list) , priv_type (column_list) . ON tbl_name | * | *.* | db_name.* FROM user , user .或者:REVOKE ALL PRIVILEGES, GRANT OPTION FROM user , user .【例9.14】回收用户caddy在xs表上的SELECT权限。use xscjrevoke s
16、elect on xs from caddylocalhost;9.3 表维护语句9.3.1 ANALYZE TABLE语句语句一个索引列的可压缩性不是自动更新的。就是说,用户在某列创建了一个索引,而该列的可压缩性是不会立即计算出来的。这时需要使用ANALYZE TABLE语句来更新它。语法格式:语法格式:ANALYZE LOCAL | NO_WRITE_TO_BINLOG TABLE tbl_name , tbl_name .在MySQL上执行的所有更新都将写入到一个二进制日志文件中。9.3.1 ANALYZE TABLE语句语句【例9.15】更新表xs的索引的可压缩性,并随后显示。anal
17、yze table xs;show index from xs;执行结果为:9.3.2 CHECK TABLE语句语句这条语句用来检查一个或多个表是否有错误,只对MyISAM和InnoDB表起作用。语法格式:语法格式:CHECK TABLE tbl_name , tbl_name . option .其中,option为:QUICK | FAST | MEDIUM | EXTENDED | CHANGED【例9.16】检查xs表是否正确。check table xs;执行结果如图所示。 9.3.3 CHECKSUM TABLE语句语句对于数据库中的每一个表,都可以使用CHECKSUM TABL
18、E语句获得一个校验和。语法格式:语法格式:CHECKSUM TABLE tbl_name , tbl_name . QUICK | EXTENDED 【例9.17】获得表xs的校验和的值。 checksum table xs;执行结果如图所示。9.3.4 OPTIMIZE TABLE语句语句OPTIMIZE TABLE语句只对MyISAM、BDB和InnoDB表起作用。语法格式:OPTIMIZE LOCAL | NO_WRITE_TO_BINLOG TABLE tbl_name , tbl_name .【例9.18】优化xs表。optimize table kc;9.3.5 REPAIR TA
19、BLE语句语句如果一个表或索引已经损坏,可以使用REPAIR TABLE语句尝试修复它。REPAIR TABLE只对MyISAM和ARCHIVE表起作用。REPAIR LOCAL | NO_WRITE_TO_BINLOG TABLE tbl_name , tbl_name . QUICK EXTENDED USE_FRM说明:说明:REPAIR TABLE语句支持以下选项:lQUICK:如果指定了该选项,则REPAIR TABLE会尝试只修复索引树。lEXTENDED:使用该选项,则MySQL会一行一行地创建索引行,代替使用分类一次创建一个索引。lUSE_FRM:如果MYI索引文件缺失或标题被破坏,则必须使用此选项。9.3.5 REPAIR TABLE语句语句此课件下载可自行编辑修改,供参考!感谢您的支持,我们努力做得更好!