时间:2021-07-01 10:21:17 帮助过:2人阅读
MySQL权限系统通过下面两个阶段进行认证:
对通过认证的合法用户授予相应的权限,用户可以通过再这些权限范围内对数据库做相应的操作。 
在权限存取过程中,主要涉及到mysql数据库下user表和db表。user表的数据结构如下: 
 
db表数据结构如下: 
 
表的说明:其中包含用户列、权限列、安全列和资源控制列。用的最频繁的是用户列和权限列,权限分为普通权限和管理权限。普通权限用户数据库的操作如select_priv、insert_priv等。管理权限主要用来对数据库进行管理的操作,比如process_priv、super_priv等。 
用户进行连接的时候,权限表的存取过程:
先从user表中的host、user和password这三个字段中判断连接的ip、用户名以及密码是否存在表中,如果存在,则通过验证,否则拒绝连接。
创建用户,可以使用grant语法创建或者直接操作user表。 
方法一: 
直接操作use表 
insert into user(Host,User,Password) values(“127.0.0.1”,”test”,password(“51testit”)); 
方法二: 
格式 CREATE USER ‘username’@’host’ IDENTIFIED BY ‘password’;  
eg:CREATE USER ‘test’@’127.0.0.1’ IDENTIFIED BY ‘51testit’;  
 
创建之后,登录如下: 
 
MySQL加密方式: MYSQL323加密中生成的是16位字符串,而在MySQLSHA1中生存的是41位字符串,其中是不加入实际的密码运算中,通过观察在很多用户中都携带了”“,在实际破解过程中去掉”*”,也就是说MySQLSHA1加密的密码的实际位数是40位。 
Host字段描述
| Host | User | 解析 | 
|---|---|---|
| myweb.wang | pps | pps,从myweb.wang连接 | 
| % | pps | pps,从任何主机连接 | 
| % | ” | 任何用户,从任何主机连接 | 
| 122.164.35.127 | pps | pps,从122.164.35.127连接 | 
| 122.164.35.% | pps | pps,从122.164.35.类型子网的任何主机连接 | 
对于上面创建的test,我没有进行任何授权操作,当我使用test用户去操作数据库时候,发现: 
 
没有数据库操作权限,怎样才能查看用户拥有的权限呢? 
查看权限 
方法一: 
show grants for test@127.0.0.1; 
方法二: 
查看user表中记录的权限。 
select * from mysql.user where user=’test’ and host=’127.0.0.1’ \G; 
语法格式如下: 
grant [privilege1|privilege2|all privileges] on dbName|.tableName 或 to user@hostName ; 
当给test用户授予xxpt选择权限时候: 
grant select On xxpt.* to test.127.0.0.1; 
db表发生了变化,新增加一条记录。但是user表并没有改变。如下: 
 
此时,可以使用test用户进行数据查询操作,但是不能进行增、删、改。于是授予其关于xxpt数据库的所有权限。 
grant all privileges on xxpt.* to test@127.0.0.1; 
用户test权限如下: 
 
此时可以更新数据 
 
管理权限sueper、process、file授予 
grant sueper,process,file On . to ‘test’@’127.0.0.1’; 
语句中on后面只能是. 
备注:usage 权限用于登录,不能进行任何操作。
使用grant新增权限,使用revoke进行权限回收。当然回收权限,也可以直接对user、db、tables_priv和columns_priv表进行操作。但是usage权限是没法收回的。 
如回收test对所有数据库的读写权限: 
revoke select ,insert on . from test@127.0.0.1;
1.使用mysqladmin 
2.使用set password for test@127.0.0.1 =password(‘isayhello’); 
3.通过grant usage 
grant usage on . to ‘test’@’127.0.0.1’ identified by ‘isayhello’; 
4.直接修改user表 
update user set Password=password(“newpassword”) where ***;
| 
                 权限  | 
            
                 权限级别  | 
            
                 权限说明  | 
        
| 
                 CREATE  | 
            
                 数据库、表或索引  | 
            
                 创建数据库、表或索引权限  | 
        
| 
                 DROP  | 
            
                 数据库或表  | 
            
                 删除数据库或表权限  | 
        
| 
                 GRANT OPTION  | 
            
                 数据库、表或保存的程序  | 
            
                 赋予权限选项  | 
        
| 
                 REFERENCES  | 
            
                 数据库或表  | 
            
                 
  | 
        
| 
                 ALTER  | 
            
                 表  | 
            
                 更改表,比如添加字段、索引等  | 
        
| 
                 DELETE  | 
            
                 表  | 
            
                 删除数据权限  | 
        
| 
                 INDEX  | 
            
                 表  | 
            
                 索引权限  | 
        
| 
                 INSERT  | 
            
                 表  | 
            
                 插入权限  | 
        
| 
                 SELECT  | 
            
                 表  | 
            
                 查询权限  | 
        
| 
                 UPDATE  | 
            
                 表  | 
            
                 更新权限  | 
        
| 
                 CREATE VIEW  | 
            
                 视图  | 
            
                 创建视图权限  | 
        
| 
                 SHOW VIEW  | 
            
                 视图  | 
            
                 查看视图权限  | 
        
| 
                 ALTER ROUTINE  | 
            
                 存储过程  | 
            
                 更改存储过程权限  | 
        
| 
                 CREATE ROUTINE  | 
            
                 存储过程  | 
            
                 创建存储过程权限  | 
        
| 
                 EXECUTE  | 
            
                 存储过程  | 
            
                 执行存储过程权限  | 
        
| 
                 FILE  | 
            
                 服务器主机上的文件访问  | 
            
                 文件访问权限  | 
        
| 
                 CREATE TEMPORARY TABLES  | 
            
                 服务器管理  | 
            
                 创建临时表权限  | 
        
| 
                 LOCK TABLES  | 
            
                 服务器管理  | 
            
                 锁表权限  | 
        
| 
                 CREATE USER  | 
            
                 服务器管理  | 
            
                 创建用户权限  | 
        
| 
                 PROCESS  | 
            
                 服务器管理  | 
            
                 查看进程权限  | 
        
| 
                 RELOAD  | 
            
                 
 
 服务器管理  | 
            
                 执行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的权限  | 
        
| 
                 REPLICATION CLIENT  | 
            
                 服务器管理  | 
            
                 复制权限  | 
        
| 
                 REPLICATION SLAVE  | 
            
                 服务器管理  | 
            
                 复制权限  | 
        
| 
                 SHOW DATABASES  | 
            
                 服务器管理  | 
            
                 查看数据库权限  | 
        
| 
                 SHUTDOWN  | 
            
                 服务器管理  | 
            
                 关闭数据库权限  | 
        
| 
                 SUPER  | 
            
                 服务器管理  | 
            
                 执行kill线程权限  | 
        
MYSQL的权限如何分布,就是针对表可以设置什么权限,针对列可以设置什么权限等等,这个可以从官方文档中的一个表来说明:
| 
                 权限分布  | 
            
                 可能的设置的权限  | 
        
| 
                 表权限  | 
            
                 ‘Select’, ‘Insert’, ‘Update’, ‘Delete’, ‘Create’, ‘Drop’, ‘Grant’, ‘References’, ‘Index’, ‘Alter’  | 
        
| 
                 列权限  | 
            
                 ‘Select’, ‘Insert’, ‘Update’, ‘References’  | 
        
| 
                 过程权限  | 
            
                 ‘Execute’, ‘Alter Routine’, ‘Grant’  | 
        
MySQL中权限管理
标签: