一、關於MySQL權限的幾點常識:
1、MySQL的權限系統主要用來驗證用戶的操作權限。
2、在MySQL內部,權限信息存放在MySQL數據庫的granttable裡。當mysql啟動後,granttable裡的信息會寫入內存。
3、MySQL 使用user name 加 host name 來作為標識符。
通過這種標識符,可以用來區分不同host上的相同的user name。
4、MySQL 權限控制有2種策略:
1)根據密碼是否正確來控制客戶端的連接。
2)假設可以正常connect,server還可以檢查每個satement是否有權限去執行。如果只有某張表的select 權限,就不能進行drop 操作。
5、如果用戶的權限改變,當前已連接的會話用戶不會受影響,下次登錄才會生效。
二、關於MySQL的幾個有關權限表的含義:
user:用戶賬號、全局權限
db:庫級別權限
host:廢棄
tables_priv:表級別權限
colums_priv:列級別權限
procs_priv:存儲過程和存儲函數相關的權限
proxies_priv:代理用戶權限
三、MySQL用戶賬號的創建規則
用戶名@主機
用戶名:16字符以內
主機:
主機名:www.test.com,mysql
IP:192.168.2.1
網絡地址:192.168.0.0/255.255.0.0
通配符:%,192.168.%.%,%.test.com
四、MySQL的用戶權限級別
服務管理類:super
庫:CREATE
表:DELETE、ALTER
列:INSERT、SELECT、UPDATE
更多級別可參考MySQL官方文檔
五、與權限相關的幾個命令
GRANT 權限,... ON [對象類型] db.{table|routine} TO 'username'@'host' [INDENTIFIED BY 'password'];
REVOKE 權限,... ON [對象類型] db.{table|routine} FROM 'username'@'host';
SHOW GRANTS FOR 'username'@'host';
CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];
DROP USER 'username'@'host';
RENAME USER old_name TO new_name;
六、權限的操作命令舉例
查看當前數據庫的所有用戶:
select user,host,password from mysql.user;
給用戶賦予super權限(super和ALL PRIVILEGES都可以):
GRANT super ON *.* TO 'mysql'@'localhost';
GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'localhost';
刪除用戶的super權限(super和ALL PRIVILEGES都可以):
REVOKE super ON *.* FROM 'mysql'@'localhost';
REVOKE ALL PRIVILEGES ON *.* FROM 'mysql'@'localhost';
查看賦予用戶的權限
SHOW GRANTS FOR 'mysql'@'localhost';
七、MySQL的問題處理
1、MySQL登錄密碼忘記時的恢復操作
啟動mysql_safe時傳遞兩個參數:
--skip-grant-tables 跳過授權表
--skip-networking 為了安全,防止網絡登錄
登錄方式一:
修改/etc/init.d/mysql
登錄方式二:
直接在my.cnf配置
[mysqld]
skip-grant-tables
skip-networking
而後修改密碼:
通過更新授權表方式直接修改其密碼,而後移除此兩個選項重啟服務器
UPDATE user SET PASSWORD=PASSWORD('123456') WHERE User='root'
2、客戶端連接MySQL數據庫速度慢的問題
直接在my.cnf配置,關閉DNS的反向解析參數
[mysqld]
skip-name-resolve