网站建设里程碑,网上接网站开发类订单的平台,长沙seo袁飞,定制网站制作系统在mysql维护工作中#xff0c;做好权限管理是一个很重要的环节。下面对mysql权限操作进行梳理#xff1a;mysql的权限命令是grant#xff0c;权限撤销的命令时revoke#xff1b;grant授权格式#xff1a;grant 权限列表 on 库.表 to 用户名ip identified by 密码做好权限管理是一个很重要的环节。下面对mysql权限操作进行梳理mysql的权限命令是grant权限撤销的命令时revokegrant授权格式grant 权限列表 on 库.表 to 用户名ip identified by 密码;revoke回收权限格式revoke 权限列表 on 库.表 from 用户名ip;下面通过一些例子说明:1.grant授权1)grant 普通数据用户查询、插入、更新、删除 数据库中所有表数据的权利。mysql grant all on *.* to wang192.168.1.150 identified by password; //all等同于all privilege其中的privileges可以省略mysql grant all privileges on *.* to wang192.168.1.% identified by 123456; //192.168.1.%表示一个网段mysql grant insert,select,update,delete,drop,create,alter on huanqiu.* to wang% identified by 123456;mysql flush privileges //授权之后不要忘记更新权限表2.查看权限1)查看当前用户下所有的权限mysql show grants;----------------------------------------------------------------------------------------------------------------------------------------| Grants for rootlocalhost |----------------------------------------------------------------------------------------------------------------------------------------| GRANT ALL PRIVILEGES ON *.* TO rootlocalhost IDENTIFIED BY PASSWORD *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 WITH GRANT OPTION || GRANT PROXY ON TO rootlocalhost WITH GRANT OPTION |----------------------------------------------------------------------------------------------------------------------------------------2 rows in set (0.00 sec)2)查看指定用户下的所有权限USAGE是默认的初始状态表示无任何权限下面表示wang用户在192.168.1.0/24网段登陆本机mysql后对huanqiu库下的所有表有insert,update,alter,delete,create,select的操作权限mysql show grants for wang192.168.1.%; //可以在select user,host,password from mysql.user执行结果中找对应的权限用户信息---------------------------------------------------------------------------------------------------------------| Grants for wang192.168.1.% |---------------------------------------------------------------------------------------------------------------| GRANT USAGE ON *.* TO wang192.168.1.% IDENTIFIED BY PASSWORD *678E2A46B8C71291A3915F92736C080819AD76DF || GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER ON huanqiu.* TO wang192.168.1.% |---------------------------------------------------------------------------------------------------------------2 rows in set (0.00 sec)3.revoke撤销权限revoke跟grant语法差不多只需要把关键字 “to” 换成 “from” 即可并且revoke语句中不需要跟密码设置。注意revoke可以回收所有权限也可以回收部分权限。mysql revoke all on *.* from wang192.168.1.150;mysql revoke all privileges on *.* from wang192.168.1.%;mysql revoke insert,select,update,delete,dropcreatealter on huanqiu.* from wang%;mysql flush privileges注意事项1)grant, revoke用户权限后该用户只有重新连接MySQL数据库权限才能生效。2)如果想让授权的用户也可以将这些权限grant给其他用户那么授权时需添加选项 grant option如下设置后那么这个wang用户连接mysql后也可以将这些权限授予其他用户。mysql grant insert,select,update,alter on huanqiu.* to wang% identified by 123456 with grant option;-------------------------------------------------------------------------------------------------------------------mysql授权表一共涉及到5个表分别是user、db、host、tables_priv和columns_priv。这5张表的内容和用途如下1)user表user表列出可以连接服务器的用户及其口令并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限并适用于所有数据库。例如如果你启用了DELETE权限在这里列出的用户可以从任何表中删除记录所以在你这样做之前要认真考虑。2)db表db表列出数据库而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。3)host表host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响所以你可能发觉你根本不是用它。4)tables_priv表tables_priv表指定表级权限在这里指定的一个权限适用于一个表的所有列。5)columns_priv表columns_priv表指定列级权限。这里指定的权限适用于一个表的特定列。------------------------------------------------------------------------------------------------------------------看下面一个实例给wang用户授权的权限太大了现在要收回部分权限只留给wang用户select和alter的权限。mysql show grants for wang192.168.1.%;---------------------------------------------------------------------------------------------------------------| Grants for wang192.168.1.% |---------------------------------------------------------------------------------------------------------------| GRANT USAGE ON *.* TO wang192.168.1.% IDENTIFIED BY PASSWORD *678E2A46B8C71291A3915F92736C080819AD76DF || GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER ON huanqiu.* TO wang192.168.1.% |---------------------------------------------------------------------------------------------------------------2 rows in set (0.00 sec)mysql revoke insert,update,delete,create on huanqiu.* from wang192.168.1.%;Query OK, 0 rows affected (0.00 sec)mysql flush privileges;Query OK, 0 rows affected (0.00 sec)mysql show grants for wang192.168.1.%;---------------------------------------------------------------------------------------------------------------| Grants for wang192.168.1.% |---------------------------------------------------------------------------------------------------------------| GRANT USAGE ON *.* TO wang192.168.1.% IDENTIFIED BY PASSWORD *678E2A46B8C71291A3915F92736C080819AD76DF || GRANT SELECT, ALTER ON huanqiu.* TO wang192.168.1.% |---------------------------------------------------------------------------------------------------------------2 rows in set (0.00 sec)发现revoke回收权限操作后只剩下select和alter权限了。revoke回收部分权限剩下的权限的密码保持不变。这里特别注意下如果给一个用户设置的权限过大除了上面使用revoke回收部分权限外还可以使用grant进行权限修改也就是说grant不仅可以添加权限也可以修改权限(实际上就是对同一用户名ip设置权限以覆盖之前的权限)grant修改后的权限将覆盖之前的权限那么问题来了授权后的密码是密文形式保存的如果记不住之前授权时的密码那么怎样保证覆盖后的权限跟之前的权限一致莫慌grant授权操作中其实不仅可以设置明文密码也可以设置密文密码如下1)grant 权限列表 on 库.表.* to 用户名ip identified by 明文密码2)grant 权限列表 on 库.表.* to 用户名ipidentified by password 密文密码也就是说在grant重置权限的时候可以用查看的密文密码当做新的密码然后去覆盖之前的权限这就保证了修改前后的密码一致如上的例子采用grant的操作如下mysql show grants for wang192.168.1.%;---------------------------------------------------------------------------------------------------------------| Grants for wang192.168.1.% |---------------------------------------------------------------------------------------------------------------| GRANT USAGE ON *.* TO wang192.168.1.% IDENTIFIED BY PASSWORD *678E2A46B8C71291A3915F92736C080819AD76DF || GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER ON huanqiu.* TO wang192.168.1.% |---------------------------------------------------------------------------------------------------------------2 rows in set (0.00 sec)mysql grant alter,select on huanqiu.* to wang192.168.1.% identified by password *678E2A46B8C71291A3915F92736C080819AD76DF;Query OK, 0 rows affected (0.00 sec)mysql flush privileges;Query OK, 0 rows affected (0.00 sec)mysql show grants for wang192.168.1.%;---------------------------------------------------------------------------------------------------------------| Grants for wang192.168.1.% |---------------------------------------------------------------------------------------------------------------| GRANT USAGE ON *.* TO wang192.168.1.% IDENTIFIED BY PASSWORD *678E2A46B8C71291A3915F92736C080819AD76DF || GRANT SELECT, ALTER ON huanqiu.* TO wang192.168.1.% |---------------------------------------------------------------------------------------------------------------2 rows in set (0.00 sec)通常开发同事在让运维同事开通mysql权限时他们会在自己本地mysql里生成一个密文密码然后把这个密文密码给运维同事运维同事在用这个密文密码进行授权那么授权的密码就只有开发同事自己知道了其他人都不知道比较安全的一种做法~