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;