前言:


最近频繁在mysql权限控制这里栽跟斗,在翻阅了一些资料之后,简单地翻译一下官网关于flush privileges的描述,抛砖引玉。

 

翻译正文:


If the mysqld server is started without the -skip-grant-tables option, it reads all grant table contents into memory during its startup sequence. The in-memory tables become effective for access control at that point.

如果mysqld服务未使用--skip-grant-tables选项启动,mysql会在启动过程中将权限表的所有内容读取到内存中。此时,内存中的表将对访问控制生效。

 

If you modify the grant tables indirectly using an account-management statement, the server notices these changes and loads the grant tables into memory again immediately. Examples include GRANT, REVOKE, SET PASSWORD, and RENAME USER.

如果你不直接使用账号管理语句修改权限表,mysql服务会注意到这些改动并立即将其加载到内存当中。账号管理语句包括GRANT, REVOKE, SET PASSWORD, RENAME USER四个。

 

If you modify the grant tables directly using statements such as INSERT, UPDATE, or DELETE(which is not recommended), the changes have no effect on privilege checking until you either tell the server to reload the tables or restart it. Thus, if you change the grant tables directly but forget to reload them, the changes have no effect until you restart the server. This may leave you wondering why your changes seem to make no difference!

如果你直接使用INSERT, UPDATE, DELETE(DELETE不推荐使用)修改权限表,除非你重新加载这个表,或者重启数据库,这些操作是不会影响权限检查的。因此,如果你修改了权限表但是忘记重新加载它们,直到你重启数据库,这个修改都是无效的。这可能会让你发现,为什么你命名修改了,但是没生效!

 

To tell the server to reload the grant tables, perform a flush-privileges operation. This can be done by issuing a FLUSH PRIVILEGES statement or by executing a mysqladmin flush-privileges or mysqladmin reload command.

为了告诉服务器重新加载权限表,需要执行一个刷新权限的命令。我们可以在数据库中执行FLUSH PRIVILEGES语句,或者在命令行中执行mysqladmin flush privileges或者mysqladmin reload命令。

 

A grant table reload affects privileges for each existing client session as follows:

  • Table and column privilege changes take effect with the client's next request.

  • Database privilege changes take effect the next time the client executes a USE *db_name* statement.

**Note**

**Client applications may cache the database name; thus, this effect may not be visible to them without actually changing to a different database.**

  • Global privileges and passwords are unaffected for a connected client. These changes take effect only in sessions for subsequent connections.

每次权限表的加载都会对会话有以下影响:

  • 表级和行级的权限会在下次会话连接中改变

  • 数据库级的权限将会在下次USE DB_NAME后改变。

    注意:由于客户端存在缓存,如果不是真的切换数据库,此条改变可能不易被察觉。

  • 在同一个连接中,全局权限和密码不发生改变。只有开启新的会话时,才会生效。

 

If the server is started with the --skip-grant-tables option, it does not read the grant tables or implement any access control. Any user can connect and perform any operation, which is insecure. To cause a server thus started to read the tables and enable access checking, flush the privileges.

如果会话以--skip-grant-tables选项启动,它不会读取权限表,也没有相关访问控制的权限。任何人可以通过--skip-grant-tables进行连接和操作,这是不安全的。如果要从服务器开始读取权限表并保证访问检查,请刷新权限。

 

总结:


  1. flush privileges命令的作用是,使得在磁盘空间的修改写入到内存中,使其立即生效。
  2. 适合使用flush privileges的命令:INSERT、UPDATE、DELETE
  3. 不适合或不需要使用flush privileges的命令:GRANT、REVOKE、SET PASSWORD、RENAME USER
  4. 在相关改动之后(尤其是GRANT、REVOKE两箱操作,十分危险),千万不要,不要,不要轻易退出现有连接,否则就有你哭的了!

 

后记


链接地址,摘自官网:

privileges changeshttps://dev.mysql.com/doc/refman/5.7/en/privilege-changes.html)

[翻译向] 当flush privileges生效时的更多相关文章

  1. 创建MySQL用户 赋予某指定库表的权限 flush privileges才能生效!!!!;@'localhost'授权本地,@'%'授权远程

    update ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value 建议使用GRANT语句进行授权,语句如下: gra ...

  2. 42 | grant之后要跟着flush privileges吗?

    在 MySQL 里面,grant 语句是用来给用户赋权的.不知道你有没有见过一些操作文档里面提到,grant 之后要马上跟着执行一个 flush privileges 命令,才能使赋权语句生效.我最开 ...

  3. flush privileges是什么意思?

    flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里.MySQL用户数据和权限有修改后 ...

  4. mysql创建新的用户及flush privileges解析

    1.首先以root用户登录到mysql mysql -u root -p 2.接着要知道mysql的用户信息是存储在mysql.user(mysql数据库下的user数据表)下的,所以我们只需添加一个 ...

  5. flush privileges 什么意思

    mysql> update mysql.user set password=PASSWORD(‘新密码’) where User=’root’;­ mysql> flush privile ...

  6. 42 grant与flush privileges

    42 grant与flush privileges 在mysql里, grant是给用户赋权的,一些文档中经常提到在grant执行后,马上执行一个flush privileges,才能使赋权语句生效, ...

  7. mysql命令flush privileges命令

    修改一个用户的密码,命令如下 mysql> update user set password=password('新密码') where user='用户名'; 执行后报错: ERROR 105 ...

  8. mysql忘记root密码拯救方法(flush privileges)

    修改的用户都以root为列.一.拥有原来的myql的root的密码: 方法一:在mysql系统外,使用mysqladmin# mysqladmin -u root -p password " ...

  9. MySQL flush privileges 명령어

    INSERT나 UPDATE, DELETE문을 이용해서 MySQL의 사용자를 추가,삭제하거나, 사용자 권한 등을 변경하였을 때, MySQL에 변경사항을 적용하기 위해서 사용하는 명령 ...

随机推荐

  1. URL中的String参数问题

    测试一个查询数据的接口,类似这样的URL:.../search?type=Astring,在浏览器中输入URL获取到的数据为空,但通过其它方式确认数据库中确实已有数据,怀疑是接口实现问题.找接口实现的 ...

  2. 【csp模拟赛九】--dfs

    思路: 这道题可以宽搜,深搜,最短路 代码: #include<cstdio> #include<cstring> #include<iostream> #incl ...

  3. linux系列(二十四):du命令

    1.命令格式 du [选项][文件] 2.命令功能 显示每个文件和目录的磁盘使用空间. 3.命令参数 -a或-all 显示目录中个别文件的大小. -b或-bytes 显示目录或文件大小时,以byte为 ...

  4. 1069 The Black Hole of Numbers(20 分)

    For any 4-digit integer except the ones with all the digits being the same, if we sort the digits in ...

  5. 数据结构实验之查找一:二叉排序树 (SDUT 3373)

    二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),也称二叉搜索树. #include <stdio.h> #include <s ...

  6. Jetbrain全栈最新激活方法(2019年及之前所有新老版本)

    随着2019版的到来,之前的永久激活教程也不生效了,所以今天为大家带来一种新的永久激活方式. 1.下载新版破解补丁 破解补丁传送门提取码:3e8j 点击传送门下载补丁文件 jetbrains-agen ...

  7. [Go] 基础系列一: for-select中的break、continue和return

    break select中的break,类似c系列中的break,break后的语句不执行 for和select一同使用,有坑 break只能跳出select,无法跳出for package test ...

  8. codeforces#1251E2. Voting (Hard Version)(贪心)

    题目链接: http://codeforces.com/contest/1251/problem/E2 题意: 主角需要获得n个人的投票 有两种方式让某个人投票 1,已经投票的人数大于m 2,花p枚硬 ...

  9. mapred-site.xml 基本配置参考

    说明:这是hadoop2.x版本的参数.下面的value都是参数默认值. 常用配置: ♥♥♥ .mapreduce.job.hdfs-servers value:${fs.defaultFS} 说明: ...

  10. Tkinter 之Menu菜单标签

    一.参数说明 语法 作用 MenuBar = tk.Menu(window) 创建一个菜单栏 fileBar = tk.Menu(MenuBar, tearoff=0) 创建一个菜单项,不分窗. Me ...