7.2 MySQL权限系统原理

来源:互联网 发布:php简易查询系统源码 编辑:程序博客网 时间:2024/06/07 18:13
  • MySQL权限系统的用户接口由SQL语句组成,比如create user,grant,revoke。在数据库内部,MySQL把权限信息保存在MySQL database的赋权表中。MySQL服务器在启动时把这些的内容读入到内存中,并基于内存中这些表的拷贝做出存取控制的判断。
  • MySQL在鉴定身份时既考虑你连接的主机又考虑你的用户名。比如从office.example.com连接MySQL的用户Joe和从home.example.com连接MySQL的用户不一定是一个人。MySQL通过使你能区分不同主机上碰巧使用相同用户名的用户来处理这种情况。你可以通过show grant语句来确认一个给定的用户有什么权限。比如SHOW GRANTS FOR 'joe'@'office.example.com';SHOW GRANTS FOR 'joe'@'home.example.com';
  • 当你运行客户端程序连接服务器端时,MySQL权限控制分两步执行。第一步:服务器根据你的身份标识和是否能够提供此标识相应的正确密码来判断接受或拒绝你的连接请求。第二步:假设你连接上了,服务器检查你发的每一条语句来决定你是否有权限执行。
  • 如果你的权限在你连接服务器时发生改变,这些改变不一定在你发送下一条语句时生效**。 (7.2.6权限更改何时生效
    • 如果你通过使用账号管理语句比如grant/revoke/set password/rename user来间接地修改grant表,服务器注意到这些变化,并立马再次把grant表加载到内存中。
    • 如果你使用例如insert/update/delete等语句直接修改grant表,这些改变不会立即生效,除非你重启进程或者通过执行清除权限-flush-privileges操作来告诉进程重新加载grant表。手工重新加载grant表还可以通过执行mysqladmin flush-privileges或者mysqladmin reload命令。
    • grant表重载后对每个已经存在的客户端连接影响如下:
      • 表和列级的权限在发送下一个请求时生效;
      • 数据库级的权限在客户端下次执行use db_name语句后生效;
      • 全局权限和密码对于一个已经存在的连接不会生效,只有在以后的连接才会生效。)
0 0
原创粉丝点击