为了便于说明,我先创建一个用户:

create user 'ua'@'%' identified by 'pa';

这条语句的逻辑是创建一个用户’ua’@’%’,密码是 pa

注意,在 MySQL 里面,用户名 (user)+ 地址 (host) 才表示一个用户,因此 ua@ip1 和 ua@ip2
代表的是两个不同的用户。

这条命令做了两个动作:

  • 磁盘上,往 mysql.user 表里插入一行,由于没有指定权限,所以这行数据上所有表示权限的字段的值都是 N;
  • 内存里,往数组 acl_users 里插入一个 acl_user 对象,这个对象的 access 字段值为 0。

图 1 就是这个时刻用户 ua 在 user 表中的状态。

SELECT * FROM mysql.user WHERE USER='ua'
Host                                                                                                                                                                                User                                                                                            Select_privInsert_privUpdate_privDelete_privCreate_privDrop_priv  Reload_privShutdown_privProcess_privFile_priv  Grant_priv References_privIndex_priv Alter_priv Show_db_privSuper_priv Create_tmp_table_privvLock_tables_priv_privvExecute_privRepl_slave_privRepl_client_priv_privvCreate_view_priv_privvShow_view_privCreate_routine_privivvAlter_routine_privvivvCreate_user_privivvivvEvent_priv Trigger_privCreate_tablespace_privssl_type                   max_questionsmax_updatesmax_connectionsmax_user_connectionsivplugin                                                                                                                                                                                          password_expiredionsivpassword_last_changedpassword_lifetimeonsivaccount_locked
%                                                                                                                                                                                   ua                                                                                              N          N          N          N          N          N          N          N          N          N          N          N          N          N          N          N          N          N          N          N          N          N          N          N          N          N          N          N          N                                     0          0          0          0          mysql_native_password                                                                                                                                                                           N          2021-07-09 08:08:59     N

在 MySQL 中,用户权限是有不同的范围的。接下来,我就按照用户权限范围从大到小的顺序依次和你说明。

全局权限

全局权限,作用于整个 MySQL 实例,这些权限信息保存在 mysql 库的 user 表里。如果我要给用户 ua 赋一个最高权限的话,语句是这么写的:

grant all privileges on *.* to 'ua'@'%' with grant option;

这个 grant 命令做了两个动作:

  • 磁盘上,将 mysql.user 表里,用户’ua’@’%'这一行的所有表示权限的字段的值都修改为‘Y’;
  • 内存里,从数组 acl_users 中找到这个用户对应的对象,将 access 值(权限位)修改为二进制的“全 1”。

在这个 grant 命令执行完成后,如果有新的客户端使用用户名 ua 登录成功,MySQL 会为新连接维护一个线程对象,然后从 acl_users 数组里查到这个用户的权限,并将权限值拷贝到这个线程对象中。之后在这个连接中执行的语句,所有关于全局权限的判断,都直接使用线程对象内部保存的权限位。

基于上面的分析我们可以知道:grant 命令对于全局权限,同时更新了磁盘和内存。命令完成后即时生效,接下来新创建的连接会使用新的权限。对于一个已经存在的连接,它的全局权限不受 grant 命令的影响。

需要说明的是,一般在生产环境上要合理控制用户权限的范围。我们上面用到的这个 grant 语句就是一个典型的错误示范。如果一个用户有所有权限,一般就不应该设置为所有 IP 地址都可以访问。

如果要回收上面的 grant 语句赋予的权限,你可以使用下面这条命令:

revoke all privileges on *.* from 'ua'@'%';

这条 revoke 命令的用法与 grant 类似,做了如下两个动作:

  • 磁盘上,将 mysql.user 表里,用户’ua’@’%'这一行的所有表示权限的字段的值都修改为“N”;
  • 内存里,从数组 acl_users 中找到这个用户对应的对象,将 access 的值修改为 0。

总结

  • 授予全局权限 就是grant all privileges on *.* to 'ua'@'%' with grant option;

mysql 全局权限入门相关推荐

  1. mysql全局权限账户%登录不上ERROR 1045 (28000): Access denied for user #39;mhz#39;@#39;localhost#39; (using ...

    mysql全局权限账户%登录不上 ERROR 1045 (28000): Access denied for user 'mhz'@'localhost' (using password: YES)  ...

  2. mysql 全局权限_mysql的大局权限GLOBAL PRIVILEGES

    mysql的全局权限GLOBAL PRIVILEGES 在执行付权限时 GRANT CREATE,ALTER,DROP,LOCK TABLES,RELOAD,PROCESS ON dbName.* T ...

  3. Mysql 全局锁入门

    全局锁顾名思义,全局锁就是对整个数据库实例加锁. 如何手动使用全局锁? MySQL 提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTWRL).当你需要 ...

  4. mysql全局权限账户%登录不上ERROR 1045 (28000): Access denied for user 'zzq'@'localhost' (using password: YES)

    mysql中有新建了一个%(允许所有主机连接)和ALL权限的账户.但是竟然连不上.用root或者其他localhost的用户却可以登录.首先检查下防火墙打开了没,可以用service iptables ...

  5. mysql数据库index权限_MySQL数据库权限体系入门(4)---管理全局权限

    三.权限级别 总的来看,MYSQL的权限从大的粒度上划分可以分成5类:全局.数据库.表.列.程序,通过对这5个大类权限的细分,可以精确地为某个用户分配从某台机器连接进来访问某个数据库下某个表的某个列的 ...

  6. 教您如何查看MySQL用户权限

    教您如何查看MySQL用户权限 如果需要查看MySQL用户权限,应该如何实现呢?下面就为您介绍查看MySQL用户权限的方法,并对授予MySQL用户权限的语句进行介绍,供您参考. 查看MySQL用户权限 ...

  7. 您如何查看MySQL用户权限

    如果需要查看MySQL用户权限,应该如何实现呢?下面就为您介绍查看MySQL用户权限的方法,并对授予MySQL用户权限的语句进行介绍,供您参考. 查看MySQL用户权限: show grants fo ...

  8. 查看linux mysql 账户权限设置_Linux下mysql新建账号及权限设置各种方式总结

    来自:http://justcoding.iteye.com/blog/1941116 1.权限赋予 说明:mysql部署在服务器A上,内网上主机B通过客户端工具连接服务器A以进行数据库操作,需要服务 ...

  9. 如何设置mysql的权限_mysql 权限控制

    1.mysql的权限是,从某处来的用户对某对象的权限. 2.mysql的权限采用白名单策略,指定用户能做什么,没有指定的都不能做. 3.权限校验分成两个步骤: a.能不能连接,检查从哪里来,用户名和密 ...

最新文章

  1. git遇到的一些小问题
  2. Operation not allowed after ResultSet closed--操作mysql数据库
  3. WSL(windows subsystem for linux)安装错误:安装过程中遇到错误,但可以继续安装。组件: ‘WSL 内核‘ 错误代码: 0x80072f78解决方法
  4. ffmpeg 声音参数_ffmpeg转换参数和压缩输出大小的比率
  5. c语言万能预编译,Objective-C学习笔记
  6. netflow流量分析工具 linux,Centos5/Linux安装Nfdump和Nfsen图形界面分析netflow数据
  7. Maven入门详解以及Eclisp的集成
  8. 优麒麟 使用samba的windows打印机_优麒麟 19.10 将于本月结束生命周期
  9. html链接增加参数,插入当前URL到@ Html.RouteLink参数来建立一个链接
  10. 【排序算法】快速排序-迭代方法
  11. jquery mobile页面跳转后js不执行的问题
  12. bootstrap插件bootbox参数
  13. 剑指offer刷题总结
  14. 电视与电脑连接html线,电视机与电脑连接的方法
  15. Maven中的pom.xml文件超详细解析
  16. android 实现果冻动画效果,Android实现果冻滑动效果的控件
  17. OCR识别技术 文档识别的三种形式
  18. 抵押贷款买房,一旦房价暴跌,银行可能会收走你家的房子
  19. html标签中文字换行
  20. ipad一直显示连接app服务器出错,iPad显示无法连接到App Store怎么办 打开不了解决方法...

热门文章

  1. 哲学家晚餐问题的Haskell求解
  2. 便宜php扩展,php扩展【货币问答】- php扩展所有答案 - 联合货币
  3. pandas怎么去除nan_pandas缺失值处理之——如何消去Nan值对数字型字符串数据类型的影响,让数字型字符串保持原始str类型,而不会自动变为float类型?...
  4. docker 安装最新mysql
  5. centos报acpi 错误解决方法实测有用
  6. jquery 获取 radio值 与 jQuery filter() 方法
  7. mysql maven 自动生成_【图文经典版】maven自动生成dao层
  8. p6s与onvif_onvif规范的实现:成功实现ONVIF协议RTSP-Video-Stream与OnvifDeviceManager的视频对接...
  9. centos安装python环境_Centos7 安装python3 环境 并使用pip安装docker-compose
  10. linux上验证cudnn是否安装成功_Ubuntu 18.04安装CUDA(版本10.2)和cuDNN