资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第,9,章 用户和数据安全性,9.1,添加和删除用户,9.2,授予权限和回收权限,9.3,界面方式操作用户与权限,9.4,表维护语句,9.1,添加和删除用户,9.1.1,添加用户,可以使用,CREATE USER,语法添加一个或多个用户,并设置相应的密码。,语法格式:,CREATE USER,user,IDENTIFIED BY PASSWORD password,user IDENTIFIED BY PASSWORD password.,其中,,user,的格式为:,user_name,host name,说明:,user_name,为用户名,,host_name,为主机名,,password,为该用户的密码。在大多数,SQL,产品中,用户名和密码只由字母和数字组成。,使用自选的,IDENTIFIED BY,子句,可以为账户给定一个密码。特别是要在纯文本中指定密码,需忽略,PASSWORD,关键词。如果不想以明文发送密码,而且知道,PASSWORD(),函数返回给密码的混编值,则可以指定该混编值,但要加关键字,PASSWORD,。,CREATE USER,用于创建新的,MySQL,账户。,CREATE USER,会在系统本身的,mysql,数据库的,user,表中添加一个新记录。要使用,CREATE USER,,必须拥有,mysql,数据库的全局,CREATE USER,权限或,INSERT,权限。如果账户已经存在,则出现错误。,【,例,9.1,】,添加两个新的用户,,king,的密码为,queen,,,palo,的密码为,530415,。,CREATE USER,kinglocalhost,IDENTIFIED BY queen,palolocalhost,IDENTIFIED BY 530415;,9.1.1,添加用户,说明:,在用户名的后面声明了关键字,localhost,。这个关键字指定了用户创建的使用,MySQL,的连接所来自的主机。如果一个用户名和主机名中包含特殊符号如“,_”,,或通配符如“,%”,,则需要用单引号将其括起。“,%”,表示一组主机。,如果两个用户具有相同的用户名但主机不同,,MySQL,将其视为不同的用户,允许为这两个用户分配不同的权限集合。,如果没有输入密码,那么,MySQL,允许相关的用户不使用密码登录。但是从安全的角度并不推荐这种做法。,刚刚创建的用户还没有很多权限。它们可以登录到,MySQL,,但是它们不能使用,USE,语句来让用户已经创建的任何数据库成为当前数据库,因此,它们无法访问那些数据库的表,只允许进行不需要权限的操作,例如,用一条,SHOW,语句查询所有存储引擎和字符集的列表。,9.1.2,删除用户,语法格式:,DROP USER,user,user_name,.,DROP USER,语句用于删除一个或多个,MySQL,账户,并取消其权限。要使用,DROP USER,,必须拥有,mysql,数据库的全局,CREATE USER,权限或,DELETE,权限。,【,例,9.2,】,删除用户,TOM,。,DROP USER,TOMlocalhost,;,如果删除的用户已经创建了表、索引或其他的数据库对象,它们将继续保留,因为,MySQL,并没有记录是谁创建了这些对象。,9.1.3,修改用户名,可以使用,RENAME USER,语句来修改一个已经存在的,SQL,用户的名字。,语法格式:,RENAME USER,old_user,TO,new_user,old_user,TO,new_user,.,说明:,old_user,为已经存在的,SQL,用户。,new_user,为新的,SQL,用户。,RENAME USER,语句用于对原有,MySQL,账户进行重命名。要使用,RENAME USER,,必须拥有全局,CREATE USER,权限或,mysql,数据库,UPDATE,权限。如果旧账户不存在或者新账户已存在,则会出现错误。,【,例,9.3,】,将用户,king1,和,king2,的名字分别修改为,ken1,和,ken2,。,RENAME USER,king1localhost TO ken1localhost,king2localhost TO ken2localhost;,9.1.4,修改密码,要修改某个用户的登录密码,可以使用,SET PASSWORD,语句。,语法格式:,SET PASSWORD FOR user=,PASSWORD(newpassword,),说明:,如果不加,FOR user,,表示修改当前用户的密码。加了,FOR user,则是修改当前主机上的特定用户的密码,,user,为用户名。,user,的值必须以,user_namehost_name,的格式给定。,【,例,9.4,】,将用户,king,的密码修改为,queen1,。,SET PASSWORD FOR,kinglocalhost,=PASSWORD(queen1);,9.2,授予权限和回收权限,9.2.1,授予权限,新的,SQL,用户不允许访问属于其他,SQL,用户的表,也不能立即创建自己的表,它必须被授权。可以授予的权限有以下几组。,(,1,)列权限:和表中的一个具体列相关。例如,使用,UPDATE,语句更新表,XS,学号列的值的权限。,(,2,)表权限:和一个具体表中的所有数据相关。例如,使用,SELECT,语句查询表,XS,的所有数据的权限。,(,3,)数据库权限:和一个具体的数据库中的所有表相关。例如,在已有的,XSCJ,数据库中创建新表的权限。,(,4,)用户权限:和,MySQL,所有的数据库相关。例如,删除已有的数据库或者创建一个新的数据库的权限。,给某用户授予权限可以使用,GRANT,语句。使用,SHOW GRANTS,语句可以查看当前账户拥有什么权限。,GRANT,语法格式:,GRANT,priv_type,(,column_list,),priv_type,(,column_list,).,ON,object_type,tbl_name,|*|*.*|,db_name,.*,TO user IDENTIFIED BY PASSWORD password,user IDENTIFIED BY PASSWORD password.,WITH,with_option,with_option,.,9.2.1,授予权限,其中,,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,说明:,priv_type,为权限的名称,如,SELECT,、,UPDATE,等,给不同的对象授予权限,priv_type,的值也不相同。,TO,子句用来设定用户的密码。,ON,关键字后面给出的是要授予权限的数据库或表名,下面将一一介绍。,(,1,)授予表权限和列权限,授予表权限时,,priv_type,可以是以下值:,SELECT,:给予用户使用,SELECT,语句访问特定的表的权力。用户也可以在一个视图公式中包含表。然而,用户必须对视图公式中指定的每个表(或视图)都有,SELECT,权限。,INSERT,:给予用户使用,INSERT,语句向一个特定表中添加行的权力。,DELETE,:给予用户使用,DELETE,语句向一个特定表中删除行的权力。,UPDATE,:给予用户使用,UPDATE,语句修改特定表中值的权力。,9.2.1,授予权限,REFERENCES,:给予用户创建一个外键来参照特定的表的权力。,CREATE,:给予用户使用特定的名字创建一个表的权力。,ALTER,:给予用户使用,ALTER TABLE,语句修改表的权力。,INDEX,:给予用户在表上定义索引的权力。,DROP,:给予用户删除表的权力。,ALL,或,ALL PRIVILEGES,:表示所有权限名。,在授予表权限时,,ON,关键字后面跟,tb1_name,,,tb1_name,为表名或视图名。,【,例,9.5,】,授予用户,king,在,XS,表上的,SELECT,权限。,USE XSCJ;,GRANT SELECT,ON XS,TO,kinglocalhost,;,说明:,这里假设是在,ROOT,用户中输入了这些语句,这样用户,king,就可以使用,SELECT,语句来查询,XS,表,而不管是谁创建的这个表。,若在,TO,子句中给存在的用户指定密码,则新密码将原密码覆盖。如果权限授予了一个不存在的用户,,MySQL,会自动执行一条,CREATE USER,语句来创建这个用户,但必须为该用户指定密码。,9.2.1,授予权限,【,例,9.6,】,用户,liu,和,zhang,不存在,授予它们在,XS,表上的,SELECT,和,UPDATE,权限。,GRANT SELECT,UPDATE,ON XS,TO,liulocalhost,IDENTIFIED BY LPWD,zhanglocalhost,IDENTIFIED BY ZPWD;,对于列权限,,priv_type,的值只能取,SELECT,、,INSERT,和,UPDATE,。权限的后面需要加上列名,column_list,。,【,例,9.7,】,授予,king,在,XS,表上的学号列和姓名列的,UPDATE,权限。,GRANT UPDATE(,姓名,学号,),ON XS,TO,kinglocalhost,;,(,2,)授予数据库权限,表权限适用于一个特定的表。,MySQL,还支持针对整个数据库的权限。例如,在一个特定的数据库中创建表和视图的权限。,授予数据库权限时,,priv_type,可以是以下值:,SELECT,:给予用户使用,SELECT,语句访问特定数据库中所有表和视图的权力。,INSERT,:给予用户使用,INSERT,语句向特定数据库中所有表添加行的权力。,DELETE,:给予用户使用,DELETE,语句删除特定数据库中所有表的行的权力。,UPDATE,:给予用户使用,UPDATE,语句更新特定数据库中所有表的值的权力。,REFERENCES,:给予用户创建指向特定的数据库中的表外键的权力。,9.2.1,授予权限,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,:表示以上所有权限名。,在,GRANT,语法格式中,授予数据库权限时,ON,关键字后面跟“*”和“,db_name,.*”,。“*”表示当前数据库中的所有表;“,db_name,.*”,表示某个数据库中的所有表。,【,例,9.8,】,授予,king,
展开阅读全文