浅谈MySQL权限管理

在我们安装完数据库后,只能在本地登录数据库,当进行远程登录时,会提示我们错误。这时,我们就要进行相应的配置,给特定的用户赋予特定的操作权限。MySQL中使用GRANT命令和REVOKE命令来管理用户的权限。

查看用户的权限:
(1):查看当前用户的所有权限(示例中使用root用户登录),使用show grants命令:

mysql> show grants \G
*************************** 1. row ***************************
Grants for root@localhost: GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `root`@`localhost` WITH GRANT OPTION
*************************** 2. row ***************************
Grants for root@localhost: GRANT BACKUP_ADMIN,BINLOG_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,GROUP_REPLICATION_ADMIN,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SET_USER_ID,SYSTEM_VARIABLES_ADMIN,XA_RECOVER_ADMIN ON *.* TO `root`@`localhost` WITH GRANT OPTION
*************************** 3. row ***************************
Grants for root@localhost: GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION
3 rows in set (0.00 sec)

(2):查看指定用户的所有权限,使用show grants for 'user'@'ip地址段'命令:

mysql> show grants for 'compony'@'192.168.0.1' \G
*************************** 1. row ***************************
Grants for 'compony'@'192.168.0.1': GRANT USAGE ON *.* TO `compony`@`192.168.0.1`
*************************** 2. row ***************************
Grants for 'compony'@'192.168.0.1': GRANT SELECT ON `noteclass`.* TO `compony`@`192.168.0.1`
2 rows in set (0.00 sec)

上面表示compony用户在192.168.0.1网络地址登录本机MySQL后,对noteclass数据库具有select权限。

使用GRANT命令进行授权:
grant语法

grant 权限 on 数据库.数据表 to 用户名@IP地址 identified by '密码' with grant option;
//例如
grant all privileges on *.* to 'user'@'192.168.0.1' identified by '123456' with grant option;

权限包括select、update、delete、insert等,详情请参考MySQL官方网站,传送门:https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html
on:表示这些权限对哪些数据库和表生效
to:权限授予的对象
identified by:设置用户的登录密码
with grant option:表示允许用户将自己的权限授予给其他用户
grant命令只能对已存在的用户生效,如果授权的用户不存在,则会出现如下错误:

mysql> grant all on noteclass.* to shi@'192.168.0.1' identified by '123456';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by '123456'' at line 1

使用grant命令给用户授予权限,权限会自动叠加而不是覆盖。在授权后,不要忘了执行命令更新权限表。

full privileges;

使用revoke命令收回授权
revoke命令语法跟grant命令差不多,只需把关键字to换成from即可,并且不需要设置密码。revoke可以收回所有权限,也可以收回部分权限,示例代码如下:

mysql> revoke all privileges on *.* from 'compony'@'192.168.1.0';              
mysql> revoke insert,select,update,delete,drop,create,alter on huanqiu.* from 'compony'@'192.168.0.1';
mysql> flush privileges 

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表指定列级权限。这里指定的权限适用于一个表的特定列。

问题解决:
在配置MySQL远程连接的过程中,可能存在Navicat无法连接的状况,造成这种状况的原因很有可能是MySQL的加密规则不一样,检索user表中的信息,如下:

mysql> select User,Host,plugin from user;
+------------------+----------------+-----------------------+
| User             | Host           | plugin                |
+------------------+----------------+-----------------------+
| compony          | 221.217.88.214 | mysql_native_password |
| mysql.infoschema | localhost      | caching_sha2_password |
| mysql.session    | localhost      | caching_sha2_password |
| mysql.sys        | localhost      | caching_sha2_password |
| root             | localhost      | caching_sha2_password |
+------------------+----------------+-----------------------+
5 rows in set (0.00 sec)

MySQL8默认的加密方式改为了caching_sha2_password,我们需要把这个改为mysql_native_password。修改方法如下:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';

或者在创建用户时直接指定加密规则:

CREATE USER 'user_name'@'192.168.0.1' IDENTIFIED WITH 'mysql_native_password' BY 'password';

也可以升级客户端修复上面的问题。

在授权时,还可能存在下面的情况,提示信息为You are not allowed to create a user with GRANT,造成该问题的的原因是授权语句中的IP地址写成了%,网上很多教程说%是通配所有的Host,但是在MySQL8中引起错误,具体原因不算太清楚,可能是新版本做了一些修改,如果有了解的可以分享一下。解决这个问题的办法就是把这个%换成用户在user表中对应的Host,更改过后使用flush privileges命令刷新一下权限即可。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容