您好,欢迎访问三七文档
第9章用户和数据安全性9.1添加和删除用户9.2授予权限和回收权限9.3界面方式操作用户与权限9.4表维护语句9.1添加和删除用户9.1.1添加用户可以使用CREATEUSER语法添加一个或多个用户,并设置相应的密码。语法格式:CREATEUSERuser[IDENTIFIEDBY[PASSWORD]'password'][,user[IDENTIFIEDBY[PASSWORD]'password']]...其中,user的格式为:'user_name'@'hostname'说明:user_name为用户名,host_name为主机名,password为该用户的密码。在大多数SQL产品中,用户名和密码只由字母和数字组成。使用自选的IDENTIFIEDBY子句,可以为账户给定一个密码。特别是要在纯文本中指定密码,需忽略PASSWORD关键词。如果不想以明文发送密码,而且知道PASSWORD()函数返回给密码的混编值,则可以指定该混编值,但要加关键字PASSWORD。CREATEUSER用于创建新的MySQL账户。CREATEUSER会在系统本身的mysql数据库的user表中添加一个新记录。要使用CREATEUSER,必须拥有mysql数据库的全局CREATEUSER权限或INSERT权限。如果账户已经存在,则出现错误。【例9.1】添加两个新的用户,king的密码为queen,palo的密码为530415。CREATEUSER'king'@'localhost'IDENTIFIEDBY'queen','palo'@'localhost'IDENTIFIEDBY'530415';9.1.1添加用户说明:在用户名的后面声明了关键字localhost。这个关键字指定了用户创建的使用MySQL的连接所来自的主机。如果一个用户名和主机名中包含特殊符号如“_”,或通配符如“%”,则需要用单引号将其括起。“%”表示一组主机。如果两个用户具有相同的用户名但主机不同,MySQL将其视为不同的用户,允许为这两个用户分配不同的权限集合。如果没有输入密码,那么MySQL允许相关的用户不使用密码登录。但是从安全的角度并不推荐这种做法。刚刚创建的用户还没有很多权限。它们可以登录到MySQL,但是它们不能使用USE语句来让用户已经创建的任何数据库成为当前数据库,因此,它们无法访问那些数据库的表,只允许进行不需要权限的操作,例如,用一条SHOW语句查询所有存储引擎和字符集的列表。9.1.2删除用户语法格式:DROPUSERuser[,user_name]...DROPUSER语句用于删除一个或多个MySQL账户,并取消其权限。要使用DROPUSER,必须拥有mysql数据库的全局CREATEUSER权限或DELETE权限。【例9.2】删除用户TOM。DROPUSERTOM@localhost;如果删除的用户已经创建了表、索引或其他的数据库对象,它们将继续保留,因为MySQL并没有记录是谁创建了这些对象。9.1.3修改用户名可以使用RENAMEUSER语句来修改一个已经存在的SQL用户的名字。语法格式:RENAMEUSERold_userTOnew_user,[,old_userTOnew_user]...说明:old_user为已经存在的SQL用户。new_user为新的SQL用户。RENAMEUSER语句用于对原有MySQL账户进行重命名。要使用RENAMEUSER,必须拥有全局CREATEUSER权限或mysql数据库UPDATE权限。如果旧账户不存在或者新账户已存在,则会出现错误。【例9.3】将用户king1和king2的名字分别修改为ken1和ken2。RENAMEUSER'king1'@'localhost'TO'ken1'@'localhost','king2'@'localhost'TO'ken2'@'localhost';9.1.4修改密码要修改某个用户的登录密码,可以使用SETPASSWORD语句。语法格式:SETPASSWORD[FORuser]=PASSWORD('newpassword')说明:如果不加FORuser,表示修改当前用户的密码。加了FORuser则是修改当前主机上的特定用户的密码,user为用户名。user的值必须以'user_name'@'host_name'的格式给定。【例9.4】将用户king的密码修改为queen1。SETPASSWORDFOR'king'@'localhost'=PASSWORD('queen1');9.2授予权限和回收权限9.2.1授予权限新的SQL用户不允许访问属于其他SQL用户的表,也不能立即创建自己的表,它必须被授权。可以授予的权限有以下几组。(1)列权限:和表中的一个具体列相关。例如,使用UPDATE语句更新表XS学号列的值的权限。(2)表权限:和一个具体表中的所有数据相关。例如,使用SELECT语句查询表XS的所有数据的权限。(3)数据库权限:和一个具体的数据库中的所有表相关。例如,在已有的XSCJ数据库中创建新表的权限。(4)用户权限:和MySQL所有的数据库相关。例如,删除已有的数据库或者创建一个新的数据库的权限。给某用户授予权限可以使用GRANT语句。使用SHOWGRANTS语句可以查看当前账户拥有什么权限。GRANT语法格式:GRANTpriv_type[(column_list)][,priv_type[(column_list)]]...ON[object_type]{tbl_name|*|*.*|db_name.*}TOuser[IDENTIFIEDBY[PASSWORD]'password'][,user[IDENTIFIEDBY[PASSWORD]'password']]...[WITHwith_option[with_option]...]9.2.1授予权限其中,object_type:TABLE|FUNCTION|PROCEDUREwith_option:GRANTOPTION|MAX_QUERIES_PER_HOURcount|MAX_UPDATES_PER_HOURcount|MAX_CONNECTIONS_PER_HOURcount|MAX_USER_CONNECTIONScount说明: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:给予用户使用ALTERTABLE语句修改表的权力。●INDEX:给予用户在表上定义索引的权力。●DROP:给予用户删除表的权力。●ALL或ALLPRIVILEGES:表示所有权限名。在授予表权限时,ON关键字后面跟tb1_name,tb1_name为表名或视图名。【例9.5】授予用户king在XS表上的SELECT权限。USEXSCJ;GRANTSELECTONXSTOking@localhost;说明:这里假设是在ROOT用户中输入了这些语句,这样用户king就可以使用SELECT语句来查询XS表,而不管是谁创建的这个表。若在TO子句中给存在的用户指定密码,则新密码将原密码覆盖。如果权限授予了一个不存在的用户,MySQL会自动执行一条CREATEUSER语句来创建这个用户,但必须为该用户指定密码。9.2.1授予权限【例9.6】用户liu和zhang不存在,授予它们在XS表上的SELECT和UPDATE权限。GRANTSELECT,UPDATEONXSTOliu@localhostIDENTIFIEDBY'LPWD',zhang@localhostIDENTIFIEDBY'ZPWD';对于列权限,priv_type的值只能取SELECT、INSERT和UPDATE。权限的后面需要加上列名column_list。【例9.7】授予king在XS表上的学号列和姓名列的UPDATE权限。GRANTUPDATE(姓名,学号)ONXSTOking@localhost;(2)授予数据库权限表权限适用于一个特定的表。MySQL还支持针对整个数据库的权限。例如,在一个特定的数据库中创建表和视图的权限。授予数据库权限时,priv_type可以是以下值:●SELECT:给予用户使用SELECT语句访问特定数据库中所有表和视图的权力。●INSERT:给予用户使用INSERT语句向特定数据库中所有表添加行的权力。●DELETE:给予用户使用DELETE语句删除特定数据库中所有表的行的权力。●UPDATE:给予用户使用UPDATE语句更新特定数据库中所有表的值的权力。●REFERENCES:给予用户创建指向特定的数据库中的表外键的权力。9.2.1授予权限●CREATE:给予用户使用CREATETABLE语句在特定数据库中创建新表的权力。●ALTER:给予用户使用ALTERTABLE语句修改特定数据库中所有表的权力。●INDEX:给予用户在特定数据库中的所有表上定义和删除索引的权力。●DROP:给予用户删除特定数据库中所有表和视图的权力。●CREATETEMPORARYTABLES:给予用户在特定数据库中创建临时表的权力。●CREATEVIEW:给予用户在特定数据库中创建新的视图的权力。●SHOWVIEW:给予用户查看特定数据库中已有视图的视图定义的权力。●CREATEROUTINE:给予用户为特定的数据库创建存储过程和存储函数等权力。●ALTERROUTINE:给予用户更新和删除数据库中已有的存储过程和存储函数等权力。●EXECUTEROUTINE:给予用户调用特定数据库的存储过程和存储函数的权力。●LOCKTABLES:给予用户锁定特定数据库的已有表的权力。●ALL或ALLPRIVILEGES:表示以上所有权限名。在GRANT语法格式中,授予数据库权限时ON关键字后面跟“*”和“db_name.*”。“*”表示当前数据库中的所有表;“db_name.*”表示某个数据库中的所有表。【例9.8】授予king在XSCJ数据库中的所有表的SELECT权限。GRANTSELECTONXSCJ.*TOking@localhost;9.2.1授予权限说明:这个权限适用于所有已有的表,以及此后添加到XSCJ数据库中的任何表。【例9.9】授予king在XSCJ数据库中所有的数据库权限。USEXSCJ;GRANTALLON*TOking@localhost;和表权限类似,授予一个数据库权限也不意味着拥有另一个权限。如果用户被授予可以创建新表和视图,但是还不能访问它们。要访问它们,它还需要单独被授予SELECT权限或更多权限。(3)授予用户权限最有效率的权限就是用户权限,对于需要授予数据库权限的所有语句,也可以定义在用户权限上。例如,在用户级别上授予某人CREATE权限,这个用户可以创建一个新的数据库,也可以在所有的数据库(而不是特定的数据库)中创建新表。MySQL授予用户权限时priv_type还可以是以下值。●CREATEUSER:给予用户创建和删除新用户的权力。●SHOWDATABASES:给予用户使用SHOWDATABASES语句查看所有已有的数据库的定义的权利。9.2.1授予权限在GRA
本文标题:用户和数据安全性.
链接地址:https://www.777doc.com/doc-5965489 .html