MySQL用户管理

一、权限表

默认创建名为mysql的数据库,存储的是每个用户的权限信息

 

user表

存储每个用户的权限

 

用户列

Host、User、Password字段

用户基本的登录信息,命令修改密码也是改password字段

 

权限列

Select_priv、Insert_priv等字段

查询、增删改等权限,以及管理权限

Y表示该权限应用到所有数据库,N则不能应用到所有,默认为N

 

安全列

ssl_type、ssl_cipher、x509_issuer、x509_subject字段

ssl用于加密,x509标识用户

 

资源控制列

max_questions、max_updates、max_connections、max_user_connections字段

max_question字段:每小时最大查询

update字段:每小时最大更新

conn字段:每小时建立的最大连接

nuser_conn字段:单个用户最大连接数

 

db表

存储用户操作数据库的权限

 

用户列

Host、Db、User字段

 

权限列

相比user表多了Create_routine_priv、Alter_routine_priv字段,用于创建、修改存储过程

 

tables_priv表

可对单个表进行权限设置

字段:

Host、Db、User

Table_priv:设置表的权限

Timestamp:修改权限时间

Grantor:指定用户

 

columns_priv表

单个数据列进行权限设置

字段:

Host、Db、User、Table_name、Timestamp略

Columns_priv:设置列的权限

Columns_name:指定哪一列

 

procs_priv表

可对存储过程存储函数进行权限设置

字段:

Host、Db、User、Grantor、Timestamp略

Routine_name:存储过程名

Routine_type:存储过程类型,有FUNCTION、PROCEDURE

 

、用户管理

查看

mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
+------------------------------+
| query                        |
+------------------------------+
| User: 'user1@localhost'@'%'; | 
| User: 'root'@'127.0.0.1';    |
| User: 'root'@'::1';          |
| User: 'root'@'localhost';    |
+------------------------------+

 

创建

用户user1,密码123,主机名localhost

mysql> create user 'user1@localhost' identified by '123';

 

INSERT创建用户,必须为后3个字段设置默认值

mysql> insert into mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject)
-> values('localhost','user1',PASSWORD('123'),'','','');
mysql> flush privileges;--重新从user表加载权限

 

user1远程登录,且拥有所有权限。%表示任意主机可登录

mysql> create user 'user1'@'%' identified by '123456';
mysql> grant all privileges on *.* to 'user1'@'%';

 

删除

mysql> drop user 'user1@localhost';
mysql> delete from mysql.user where Host='localhost' and User='user1';

 

修改密码

修改user1密码

mysql> set password for 'user1@localhost'=password("123456");
 
mysql> update mysql.user
    -> set password=password("123")
-> where User="user1" and host="localhost";
 
mysql> grant select on *.* to 'user1@localhost' identified by '123';

 

修改root密码

mysql> set password=password("123456");

 

破解root密码

1、关闭服务

[root@CentOS ~]# service mysql stop

 

2、不加载权限表启动

[root@CentOS ~]# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

 

3、连接数据库

[root@CentOS ~]# mysql -u root mysql

 

4、修改密码

mysql> update mysql.user
    -> set password=password("123456")
-> where user="root";

 

5、刷新权限表

mysql> flush privileges;

 

6、重启服务

[root@CentOS ~]# service mysql restart

 

三、权限管理

查看

查看当前用户

mysql> show grants;

 

查看root

mysql> show grants for root@localhost; 

 

类型

所有权限:ALL PRIVILEGES

DDL:CREATE、DROP、ALTER、CREATE TEMPORARY TABLES(创建临时表)、LOCK TABLES(锁定表)、GRANT OPTION

DML:SELECT、INSERT、UPDATE、DELETE、INDEX(索引查询表)、REFERENCE

视图:CREATE VIEW、SHOW VIEW

存储过程:ALTER ROUTINE、CREATE ROUTINE、EXECUTE

用户:CREATE USER

服务器:SHOW DATABASE、FILE(加载服务器文件)、PROCESS(服务器管理)、RELOAD(重新加载权限表)、REPLICATION CLIENT、REPLICATION SLAVE、SHUTDOWN、SUPER(超级权限)

 

授予

语法:

GRANT priv_type [column_list] ON 数据库.表

TO user [IDENTIFIED BY [PASSWORD] 'PASSWORD']

[ user [IDENTIFIED BY [PASSWORD] 'PASSWORD'] ]

[WITH with_option [with_option] ]

 

#priv_type:权限类型

#column_list:列

#identified by:设置密码

#with_option:

GRANT OPTION:用户还可授权给别的用户

MAX_QUERIES_PER_HOUR 10:每小时最多查询10次

MAX_UPDATES_PER_HOUR 10:每小时最多更新10次

MAX_CONNECTIONS_PER_HOUR 10:每小时最多建立10次连接

MAX_USER_CONNECTIONT 10:每个用户每小时最多建立10个连接

 

创建用户user4,有查询、更新所有表权限

mysql> grant select,update on *.*
    -> to 'user4'@'localhost' identified by '123'
-> with grant option;

 

授权user3查看mysql数据库的所有表

mysql> grant select on mysql.*
-> to 'user3@localhost';

 

收回

撤销user4所有权限

mysql> revoke all on *.*
-> from user4@localhost;

 

本文出自 “运维菜鸟.log” 博客,谢绝转载!

posted @ 2015-09-24 14:19  进壹  阅读(1038)  评论(0编辑  收藏  举报