Mysql——权限管理

安装Mysql时会自动安装一个名为mysql的数据库。这个数据库下面存储的是权限表
Mysql会根据这些权限表的内容为每个用户赋予相应的权限
所以我们也是通过这些表来实现管理用户和权限的

use mysql;
show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+


user表
1. user表的作用相当与mysql工作流程中的"用户管理模块",它决定着我们对一个连接允许或拒绝
2. user表用于记录允许连接到服务器的用户帐号信息,里面的权限是全局级的

3. 根据user表结构,表的字段可以分为4类
(1) 用户列
      Host主机名、User用户名、Password密码             
(2) 权限列(以priv结尾的)
      包含普通权限:查询权限、修改权限等
      和高级管理权限:关闭服务权限、超级权限、加载用户
      这些字段只有N和Y两个选项,为安全期间默认值都设为N
      Grant_priv是否有Grant权限、Shutdown_priv是否有停止mysql服务的权限
      Super_priv是否有超级权限、Execute_priv是否有执行存储过程和函数的权限
(3) 安全列
(4) 资源控制列  
      这些字段默认值为0,表示没有限制                  
      max_questions   每小时允许执行多少次查询
      max_updates     每小时允许执行多少次更新
      max_connections 每小时允许建立多少连接
      max_user_connections 单个用户可以同时具有的连接数

desc user;
+------------------------+-----------------------------------+------+-----+----
| Field                  | Type          | Null | Key | Default   | Extra |
+------------------------+-----------------------------------+------+-----+---
| Host                 | char(60)      | NO   | PRI |                       |       |
| User                   | char(16)      | NO   | PRI |                       |       |
| Password               | char(41)      | NO   |     |                       |       |
| Select_priv          | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Insert_priv            | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Update_priv            | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Delete_priv            | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Create_priv            | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Drop_priv              | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Reload_priv            | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Shutdown_priv          | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Process_priv           | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| File_priv              | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Grant_priv             | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| References_priv        | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Index_priv             | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Alter_priv             | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Show_db_priv           | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Super_priv             | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Create_tmp_table_priv  | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Lock_tables_priv       | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Execute_priv           | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Repl_slave_priv        | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Repl_client_priv       | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Create_view_priv       | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Show_view_priv         | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Create_routine_priv    | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Alter_routine_priv     | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Create_user_priv       | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Event_priv             | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Trigger_priv           | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| Create_tablespace_priv | enum(‘N‘,‘Y‘) | NO   |     | N                     |       |
| ssl_type               | enum(‘‘,‘ANY‘,‘X509‘,‘SPECIFIED‘) | NO   |     |
| ssl_cipher             | blob          | NO   |     | NULL                  |       |
| x509_issuer            | blob          | NO   |     | NULL                  |       |
| x509_subject           | blob          | NO   |     | NULL                  |       |
| max_questions          | int(11) unsigned | NO   |     | 0                     |       |
| max_updates            | int(11) unsigned | NO   |     | 0                     |       |
| max_connections        | int(11) unsigned | NO   |     | 0                     |       |
| max_user_connections   | int(11) unsigned | NO   |     | 0                     |       |
| plugin                 | char(64)         | YES  |     | mysql_native_password |       |
| authentication_string  | text             | YES  |     | NULL                  |       |
| password_expired       | enum(‘N‘,‘Y‘)    | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+----------------


db表
1. 用户被允许连接了,但是是不是可以就能操作所有数据库了呢?
2. 所以我们需要db表/host表,用来规定某一个用户对一个数据库的权限
3. db表的字段分为两类:
   (1)用户列
        Host主机名、Db数据库名、User用户名
   (2)权限列
       用户是先根据user表的内容获得权限,再根据db表的内容获取权限    
       例如,user表中某用户的Select_priv字段为‘N’,表示所有数据库中的表它都无权查询
       但db表中这一用户对student表的Select_priv字段设为了‘Y’,表示它只有查询student表的权限

desc db;
+-----------------------+---------------+------+-----+---------+-------+
| Field                 | Type          | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host                  | char(60)      | NO   | PRI |         |       |
| Db                    | char(64)      | NO   | PRI |         |       |
| User                  | char(16)      | NO   | PRI |         |       |
| Select_priv           | enum(‘N‘,‘Y‘) | NO   |     | N       |       |
| Insert_priv           | enum(‘N‘,‘Y‘) | NO   |     | N       |       |
| Update_priv           | enum(‘N‘,‘Y‘) | NO   |     | N       |       |
| Delete_priv           | enum(‘N‘,‘Y‘) | NO   |     | N       |       |
| Create_priv           | enum(‘N‘,‘Y‘) | NO   |     | N       |       |
| Drop_priv             | enum(‘N‘,‘Y‘) | NO   |     | N       |       |
| Grant_priv            | enum(‘N‘,‘Y‘) | NO   |     | N       |       |
| References_priv       | enum(‘N‘,‘Y‘) | NO   |     | N       |       |
| Index_priv            | enum(‘N‘,‘Y‘) | NO   |     | N       |       |
| Alter_priv            | enum(‘N‘,‘Y‘) | NO   |     | N       |       |
| Create_tmp_table_priv | enum(‘N‘,‘Y‘) | NO   |     | N       |       |
| Lock_tables_priv      | enum(‘N‘,‘Y‘) | NO   |     | N       |       |
| Create_view_priv      | enum(‘N‘,‘Y‘) | NO   |     | N       |       |
| Show_view_priv        | enum(‘N‘,‘Y‘) | NO   |     | N       |       |
| Create_routine_priv   | enum(‘N‘,‘Y‘) | NO   |     | N       |       |
| Alter_routine_priv    | enum(‘N‘,‘Y‘) | NO   |     | N       |       |
| Execute_priv          | enum(‘N‘,‘Y‘) | NO   |     | N       |       |
| Event_priv            | enum(‘N‘,‘Y‘) | NO   |     | N       |       |
| Trigger_priv          | enum(‘N‘,‘Y‘) | NO   |     | N       |       |
+-----------------------+---------------+------+-----+---------+-------+


tables_priv表和columns_priv表
1. 同理,即便用户有权对某一数据库操作,那么是不是对所有表都可以操作?对表中的所有记录都可以操作?
2. tables_priv表用来对单个表进行权限设置
3. columns_priv表用来对单条记录(列)进行权限设置
4. 其包含的字段主要有:
Host 主机名
Db    数据库名
User 用户名
Table_name表名
Table_priv对表进行操作的权限(select,insert,update,delete,create,drop,grant,references,index,alter)
Column_priv对记录进行操作的权限(select,insert,update,references)
Timestamp修改权限的时间
Grantor  权限的设置者



用户的权限分配规则
(1)Mysql的权限分配是按照user表--->db表--->tables_priv表--->columns_priv表的顺序进行分配的
(2)如果user表中某一权限的值为Y,就不许要检查往后的表了
(3)如果user表中某一权限的值为N,则一次往后检查每一张表

 

时间: 2024-10-10 08:01:10

Mysql——权限管理的相关文章

搞定linux上MySQL编程(四):mysql权限管理

[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] mysql中提供了比较完整的安全/权限管理系统,下面简单介绍权限的原理和使用. mysql数据库安装完成启动之后,能看当前数据库列表可以看到一个mysql的数据库: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | |

MySQL权限管理小程序

作业:      参考表结构:          用户类型          用户信息          权限          用户类型&权限     功能:           1. 登陆.注册.找回密码 2. 权限管理 3. 角色管理 4. 角色分配权限 5. 动态显示当前登陆用户权限菜单 注:可基于反射实现将权限和代码结合" 1 from sqlalchemy import create_engine 2 from sqlalchemy.ext.declarative impor

mysql权限管理总结

use mysql; 将dbname数据库的查询权限赋予[email protected]用户,应保持完整的用户信息,包含允许登录的IP,否则会新增任意主机的用户grant select on dbname.*  to [email protected]; 回收权限revoke select on dbname.*  from [email protected]; 多个权限以逗号间隔 如果想立即刷新权限请使用更新操作flush privileges; mysql数据库里user表管理用户的数据,

MySQL——权限管理和备份

1.用户管理 1.1.SQL yog 可视化管理 删除用户 添加新用户 1.2.SQL 命令操作 用户表: mysql.user 本质:读这张表进行增删改查 创建用户: 修改密码 重命名 用户授权 查询权限 ROOT用户权限 撤销权限 删除用户 -- 创建用户 CREATE USER 用户名 IDENTIFIED BY '密码' CREATE USER jiang IDENTIFIED BY '123456' -- 修改密码 (修改当前用户密码) SET PASSWORD = PASSWORD(

mysql权限管理,用户管理

1 创建用户 mysql> CREAT USER  'paris'@'localhost' IDENTIFIED BY  'password'; 此命令创建一个未授权的用户 2 删除用户 mysql> DROP USER 'username'@'domain'; 3 GRANT和REVOKE语句允许系统管理员创建MySQL用户账户,授予权限和撤销权限. 以上参考MySQL5.5手册13.5.1 4 也可以直接授权同时创建用户 mysql > GRANT ALL PRIVILEGES ON

mysql权限管理命令

新建用户,并授予所有权限: grant all privileges on *.* to 'username'@'localhost' identified by 'password' with grant option; 进入mysql数据库,查询user表和db表可见权限设置 user mysql; select * from user where user='username' and host='localhost' \G; select * from db \G;

mysql——权限管理——授权、收回权限、查看授权

前期准备,新建一个用户: create user 'sww'@'localhost' identified by '123456'; /*创建一个用户*/ select * from user; mysql -h localhost -P 3306 -u sww -p123456 /*DOS窗口中登录查看*/ ======================================================================================== 使用gra

mysql权限管理

Facebook使用了GTID 一个实例多个库 show privileges; 给开发一个账号 CRUD grant select,insert,update,delete on dnname.* to 'username'@'192.168.0.%'; help create user; 用户名长度 8-16字符 密码 8-20字符 create user 'app_dev'@'%' identified by 'a1'; create user 'app_dev'@'192.168.0.%

MySQL 权限管理简单篇

创建用户 CREATE USER 用户名 IDENTIFIED BY 密码 示例: CREATE USER  kaigexuetang  IDENTIFIED BY 'kaige123.com'; 删除用户 注意删除用户需要取消权限 DROP USER [] 示例: DROP USER kaigexuetang; 赋予用户权限 GRANT [功能] ON 库.表 TO 用户 示例: GRANT SELECT ON kaige.user TO kaigexuetang; 收回权限 REVOKE [