概述
为了便于说明,我先创建一个用户:
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 全局权限入门的全部内容,希望文章能够帮你解决mysql 全局权限入门所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复