一、权限表
默认创建名为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” 博客,谢绝转载!