第9章MySQL安全管理精编版
第9章 MySQL,用户管理,表维护语句,9.1 用户管理,9.1.1 添加、删除用户 1添加用户 可以使用CREATE USER语法添加一个或多个用户,并设置相应的密码。 语法格式: CREATE USER 用户 IDENTIFIED BY PASSWORD 密码 , user IDENTIFIED BY PASSWORD password . 用户=: 用户名 主机名,9.1.1 添加、删除用户,【例9.1】添加两个新的用户,king的密码为queen,palo的密码为530415。 create user kinglocalhost identified by queen, palolocalhost identified by 530415; 完成后可切换到mysql数据库,从user表中查到刚刚添加的两个用户记录: use mysql show tables; select * from user,结果如图9.1所示。,9.1.1 添加、删除用户,9.1.1 添加、删除用户,2删除用户 语法格式: DROP USER 用户 ,用户 . DROP USER语句用于删除一个或多个MySQL账户,并取消其权限。要使用DROP USER,必须拥有mysql数据库的全局CREATE USER权限或DELETE权限。 【例9.2】删除用户palo。 drop user palolocalhost; 删除后可以用上面介绍的方法查看一下效果。,9.1.2 修改用户名、密码,1修改用户名 可以使用RENAME USER语句来修改一个已经存在的SQL用户的名字。 语法格式: RENAME USER 老用户 TO 新用户, ,老用户 TO 新用户 . 【例9.3】将用户king的名字修改为ken。 rename user kinglocalhost to kenlocalhost; 完成后可用前面介绍的方法查看一下是否修改成功。,9.1.2 修改用户名、密码,2修改用户密码 要修改某个用户的登录密码,可以使用SET PASSWORD语句。 语法格式: SET PASSWORD FOR 用户= PASSWORD(新密码) 【例9.4】将用户ken的密码修改为qen。 set password for kenlocalhost = password(qen);,9.2 权限控制,9.2.1 授予权限 可以授予的权限有以下几组。 (1)列权限:和表中的一个具体列相关。例如,使用UPDATE语句更新表xs学号列的值的权限。 (2)表权限:和一个具体表中的所有数据相关。例如,使用SELECT语句查询表xs的所有数据的权限。 (3)数据库权限:和一个具体的数据库中的所有表相关。例如,在已有的xscj数据库中创建新表的权限。 (4)用户权限:和MySQL所有的数据库相关。例如,删除已有的数据库或者创建一个新的数据库的权限。,9.2.1 授予权限,GRANT语法格式: GRANT priv_type (列名) . ON object_type 表名或视图名| * | *.* | 数据库名.* TO 用户 IDENTIFIED BY PASSWORD 密码 . WITH with_option . object_type=: TABLE | FUNCTION | PROCEDURE with_option= : GRANT OPTION | MAX_QUERIES_PER_HOUR count | MAX_UPDATES_PER_HOUR count | MAX_CONNECTIONS_PER_HOUR count | MAX_USER_CONNECTIONS count,9.2.1 授予权限,1. 授予表权限和列权限 (1)授予表权限 授予表权限时,priv_type可以是以下值: SELECT:给予用户使用SELECT语句访问特定的表的权力。 INSERT:给予用户使用INSERT语句向一个特定表中添加行的权力。 DELETE:给予用户使用DELETE语句向一个特定表中删除行的权力。 UPDATE:给予用户使用UPDATE语句修改特定表中值的权力。 REFERENCES:给予用户创建一个外键来参照特定的表的权力。 CREATE:给予用户使用特定的名字创建一个表的权力。 ALTER:给予用户使用ALTER TABLE语句修改表的权力。 INDEX:给予用户在表上定义索引的权力。 DROP:给予用户删除表的权力。 ALL或ALL PRIVILEGES:表示所有权限名。,9.2.1 授予权限,【例9.5】授予用户ken在xs表上的SELECT权限。 use xscj; grant select on xs to kenlocalhost; 若在TO子句中给存在的用户指定密码,则新密码将原密码覆盖。如果权限授予了一个不存在的用户,MySQL会自动执行一条CREATE USER语句来创建这个用户,但必须为该用户指定密码。 【例9.6】用户liu和zhang不存在,授予它们在xs表上的SELECT和UPDATE权限。 grant select,update on xs to liulocalhost identified by lpwd, zhanglocalhost identified by zpwd;,9.2.1 授予权限,(2)授予列权限 对于列权限,priv_type的值只能取SELECT、INSERT和UPDATE。权限的后面需要加上列名column_list。 【例9.7】授予ken在xs表上的学号列和姓名列的UPDATE权限。 use xscj grant update(姓名, 学号) on xs to kenlocalhost;,9.2.1 授予权限,2. 授予数据库权限 授予数据库权限时,priv_type可以是以下值: SELECT:给予用户使用SELECT语句访问特定数据库中所有表和视图的权力。 INSERT:给予用户使用INSERT语句向特定数据库中所有表添加行的权力。 DELETE:给予用户使用DELETE语句删除特定数据库中所有表的行的权力。 UPDATE:给予用户使用UPDATE语句更新特定数据库中所有表的值的权力。 REFERENCES:给予用户创建指向特定的数据库中的表外键的权力。 CREATE:给予用户使用CREATE TABLE语句在特定数据库中创建新表的权力。 ALTER:给予用户使用ALTER TABLE语句修改特定数据库中所有表的权力。 INDEX:给予用户在特定数据库中的所有表上定义和删除索引的权力。 DROP:给予用户删除特定数据库中所有表和视图的权力。 CREATE TEMPORARY TABLES:给予用户在特定数据库中创建临时表的权力。 CREATE VIEW:给予用户在特定数据库中创建新的视图的权力。 SHOW VIEW:给予用户查看特定数据库中已有视图的视图定义的权力。 CREATE ROUTINE:给予用户为特定的数据库创建存储过程和存储函数等权力。 ALTER ROUTINE:给予用户更新和删除数据库中已有的存储过程和存储函数等权力。 EXECUTE ROUTINE:给予用户调用特定数据库的存储过程和存储函数的权力。 LOCK TABLES:给予用户锁定特定数据库的已有表的权力。 ALL或ALL PRIVILEGES:表示以上所有权限名。,9.2.1 授予权限,在GRANT语法格式中,授予数据库权限时ON关键字后面跟“*”和“数据库.*”。“*”表示当前数据库中的所有表;“数据库.*”表示某个数据库中的所有表。 【例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 授予权限,3. 授予用户权限 MySQL授予用户权限时priv_type还可以是以下值。 CREATE USER:给予用户创建和删除新用户的权力。 SHOW DATABASES:给予用户使用SHOW DATABASES语句查看所有已有的数据库的定义的权利。,9.2.1 授予权限,在GRANT语法格式中,授予用户权限时ON子句中使用“*.*”,表示所有数据库的所有表。 【例9.10】授予peter对所有数据库中的所有表的CREATE、ALTERT和DROP权限。 grant create ,alter ,drop on *.* to peterlocalhost identified by ppwd; 【例9.11】授予peter创建新用户的权力。 grant create user on *.* to peterlocalhost; 为了概括权限,表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; 接着,以caddy用户身份登录MySQL,登录方式为: (1)打开命令行窗口,进入mysql安装目录下的bin目录: cd C:Program FilesMySQLMySQL Server 5.6bin (2)登录,输入命令: mysql -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.2.2 权限转移和限制,WITH子句也可以对一个用户授予使用限制,其中,MAX_QUERIES_PER_HOUR count表示每小时可以查询数据库的次数;MAX_CONNECTIONS_PER_HOUR count表示每小时可以连接数据库的次数;MAX_UPDATES_PER_HOUR count表示每小时可以修改数据库的次数。 【例9.13】授予Jim每小时只能处理一条SELECT语句的权限。 grant select on xs to Jimlocalhost with max_queries_per_hour 1;,9.2.3 权限回收,要使用REVOKE,用户必须拥有mysql数据库的全局CREATE USER权限或UPDATE权限。 语法格式: REVOKE priv_type (列) . ON 表名或视图名| * | *.* | 数据库名.* FROM 用户. 或者: REVOKE ALL PRIVILEGES, GRANT OPTION FROM 用户 .,9.2.3 权限回收,【例9.14】回收用户caddy在xs表上的SELECT权限。 use xscj revoke select on xs from caddylocalhost;,9.3 表维护语句,9.3.1 索引列可压缩性语句:ANALYZE TABLE 一个索引列的可压缩性不是自动更新的。就是说,用户在某列创建了一个索引,而该列的可压缩性是不会立即计算出来的。这时需要使用ANALYZE TABLE语句来更新它。 语法