mysql 全局权限入门

您所在的位置:网站首页 开启wifi权限什么意思呀 mysql 全局权限入门

mysql 全局权限入门

2024-07-17 18:48| 来源: 网络整理| 查看: 265

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

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;


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3