当前位置:硬件测评 > MySQL操作命令排序(4)

MySQL操作命令排序(4)

  • 发布:2023-09-29 07:24

在mysql维护工作中,权限管理是一个非常重要的环节。以下是mysql权限操作总结:

mysql的权限命令为grant,权限撤销命令为revoke;
授予授权格式:授予权限列表onlibrary.tableto通过“密码”标识的用户名@'ip';
revoke撤销权限格式:撤销权限列表onlibrary.tablefromusername@'ip';

下面通过一些例子来解释:
1.授予授权
1)授予普通数据用户对数据库中所有表数据进行查询、插入、更新、删除的权限。

mysql> 将*.*上的所有内容授予由“密码”标识的wang@'192.168.1.150'; //all相当于所有特权,特权可以省略
mysql> 将*.*上的所有权限授予wang@'192.168.1.%'(由“123456”标识); //192.168.1.%代表一个网段
mysql> grant insert,select,update,delete,drop,create,alter on huanqiu.* to wang@'%'identified by "123456";
mysql>lushprivileges //授权后别忘了更新权限表

2。查看权限
1)查看当前用户下的所有权限

mysql> 显示补助金;
+------------------------------------------------ -------------------------------------------------- ----------------------------------------------------+|为 root@localhost 提供资助 |
+------------------------------------------------ -------------------------------------------------- ----------------------------------------------------+
|使用授予选项将 *.* 上的所有权限授予由密码“*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9”标识的“root”@“localhost”|
|使用授予选项将“@”上的代理授予“root”@“localhost”|
+------------------------------------------------ -------------------------------------------------- ----------------------------------------------------+
2 行一组(0.00 秒)

2)查看指定用户下的所有权限
USAGE是默认初始状态,即没有权限! !
以下表示用户wang登录192.168.1.0/24网段的本地mysql后,对环球库下的所有表都有insert、update、alter、delete、create、select操作权限!

mysql> 显示 wang@'192.168.1.%' 的补助金; //从mysql.user执行结果中可以找到select user、host、password中对应的权限用户信息
+------------------------------------------------ -------------------------------------------------- ------------+
|资助 wang@192.168.1.% |
+------------------------------------------------ -------------------------------------------------- ------------+
|将 *.* 的使用权限授予由密码“*678E2A46B8C71291A3915F92736C080819AD76DF”标识的“wang”@“192.168.1.%”|
|将 `huanqiu`.* 上的选择、插入、更新、删除、创建、更改授予 'wang'@'192.168.1.%' |
+------------------------------------------------ -------------------------------------------------- ------------+
2 行一组(0.00 秒)

3.revoke 撤销权限
revoke 与 grant 语法类似。只需要将关键字“to”替换为“from”,并且不需要在revoke语句中设置密码。
注:撤销可以撤销全部权限或部分权限。

mysql> 撤销 wang@'192.168.1.150' 上 *.* 上的所有内容;
mysql> 撤销 wang@'192.168.1.%' 对 *.* 的所有权限;
mysql> 撤销 wang@'%' 上的 huanqiu.* 上的 insert,select,update,delete,drop,create,alter;
mysql> 刷新权限

注意事项:
1)授予和撤销用户权限后,用户必须重新连接MySQL数据库才能使权限生效。
2)如果你想让授权用户将这些权限授予其他用户,那么你需要在授权时添加“grant option”选项!
经过以下设置后,wang用户连接mysql后也可以将这些权限授予其他用户。

mysql> 将 huanqiu.* 上的 insert、select、update、alter 授予 wang@'%',并由“123456”标识,并带有授予选项;

------------------------------------------------------------ --- ---------------------------------------------------------- --- ------------------
mysql授权表共涉及5张表,分别是user、db、host、tables_priv和columns_priv。
这 5 个表的内容和用途如下:
1)用户表
用户表列出了可以连接到服务器的用户及其密码,并指定了哪种全局(超级用户) ) 他们拥有的权限。对用户表启用的任何权限都是全局权限,适用于所有数据库。例如,如果您启用了 DELETE 权限,则此处列出的用户可以从任何表中删除记录,因此在执行此操作之前请仔细考虑。

2) db 表
db 表列出了数据库以及用户有权访问它们。此处指定的权限适用于数据库中的所有表。

3)Host表
host表与db表配合使用,可以更好地控制特定主机对数据库的访问权限,可能比单独使用db效果更好。该表不受 GRANT 和 REVOKE 语句的影响,因此您可能会发现您根本没有使用它。

4)tables_priv表
tables_priv表指定表级权限。此处指定的权限适用于表的所有列。

5) columns_priv 表
columns_priv 表指定列级权限。此处指定的权限适用于表的特定列。
------------------------------------------------------------ --- ---------------------------------------------------------- --- ------------------
看下面的例子:
给用户wang授予的权限太大了。现在需要撤销一些权限,只剩下wang用户可以选择。并更改权限。

mysql> 显示 wang@'192.168.1.%' 的补助金;
+------------------------------------------------ -------------------------------------------------- ------------+
|资助 wang@192.168.1.% |
+------------------------------------------------ -------------------------------------------------- ------------+|将 *.* 的使用权限授予由密码“*678E2A46B8C71291A3915F92736C080819AD76DF”标识的“wang”@“192.168.1.%”|
|将 `huanqiu`.* 上的选择、插入、更新、删除、创建、更改授予 'wang'@'192.168.1.%' |
+------------------------------------------------ -------------------------------------------------- ------------+
2 行一组(0.00 秒)
mysql> 撤销 wang@'192.168.1.%' 在 huanqiu.* 上的插入、更新、删除、创建;
查询正常,0 行受影响(0.00 秒)

mysql> 刷新权限;
查询正常,0 行受影响(0.00 秒)

mysql> 显示 wang@'192.168.1.%' 的补助金;
+------------------------------------------------ -------------------------------------------------- ------------+
|资助 wang@192.168.1.% |
+------------------------------------------------ -------------------------------------------------- ------------+|将 *.* 的使用权限授予由密码“*678E2A46B8C71291A3915F92736C080819AD76DF”标识的“wang”@“192.168.1.%”|
|授予选择权,将 `huanqiu`.* 更改为 'wang'@'192.168.1.%' |
+------------------------------------------------ -------------------------------------------------- ------------+
2 行一组(0.00 秒)

发现revoke操作回收权限后,只剩下select和alter权限了。
撤销撤销部分权限,其余权限密码不变。

这里要特别注意:
如果给用户设置的权限太大,除了上面使用revoke恢复部分权限外,还可以使用grant来修改权限!
也就是说,grant不仅可以添加权限,还可以修改权限(实际上是为同一个'用户名'@'ip'设置权限,覆盖之前的权限);
修改后的grant权限会覆盖之前的权限!
那么问题就来了:授权后的密码是用密文存储的。如果您忘记了之前授权时的密码,如何保证覆盖后的权限与之前的权限一致?

别惊慌!
实际上,授权操作时不仅可以设置明文密码,还可以设置密文密码,如下:
1)将library.table.*上的权限列表授予username@'ip ' 由“纯文本密码”识别
2) 将library.table.*上的权限列表授予用户名@'ip'由密码“密文密码”识别

也就是说:
grant重置权限时,可以使用查看到的密文密码作为新密码,然后覆盖之前的权限。这样就保证了修改前后的密码是一致的!
对于上面的例子,使用grant的操作如下:

mysql> 显示 wang@'192.168.1.%' 的补助金;
+------------------------------------------------ -------------------------------------------------- ------------+
|资助 wang@192.168.1.% |
+------------------------------------------------ -------------------------------------------------- ------------+
|将 *.* 的使用权限授予由密码“*678E2A46B8C71291A3915F92736C080819AD76DF”标识的“wang”@“192.168.1.%”|
|将 `huanqiu`.* 上的选择、插入、更新、删除、创建、更改授予 'wang'@'192.168.1.%' |
+------------------------------------------------ -------------------------------------------------- ------------+
2 行一组(0.00 秒)

mysql> grant alter,select on huanqiu.* to wang@'192.168.1.%' 密码为 '*678E2A46B8C71291A3915F92736C080819AD76DF';
查询正常,0 行受影响(0.00 秒)

mysql> 刷新权限;查询正常,0 行受影响(0.00 秒)

mysql> 显示 wang@'192.168.1.%' 的补助金;
+------------------------------------------------ -------------------------------------------------- ------------+
|资助 wang@192.168.1.% |
+------------------------------------------------ -------------------------------------------------- ------------+
|将 *.* 的使用权限授予由密码“*678E2A46B8C71291A3915F92736C080819AD76DF”标识的“wang”@“192.168.1.%”|
|授予选择权,将 `huanqiu`.* 更改为 'wang'@'192.168.1.%' |
+------------------------------------------------ -------------------------------------------------- ------------+
2 行一组(0.00 秒)

通常开发同事要求运维同事开启mysql权限时,会在自己本地mysql生成一个密文密码,然后把这个密文密码交给运维同事,运维同事再用这个密文密码进行操作授权,
那么授权密码只有开发同事知道,其他人都不知道!更安全的方法~

相关文章