MySQL學習第三篇:權限相關

MySQL權限總結(“--”表示說明)


MySQL權限控制通過表進行控制,分多個層次:
第一層登錄控制表:mysql.user 控制IP、賬號是否有登錄權限;
第二層庫控制表:mysql.db 控制賬號是否有訪問某數據庫的權限;
第三層對象級別控制表:mysql.tables_priv / columns_priv / procs_priv / proxies_priv  控制賬號對錶、表的列、存儲過程、代理用戶的權限。
賬號通過mysql.user表的權限驗證之後,進行權限分配時的順序 user->db->tables_priv->columns_priv ,具體驗證邏輯可參考官方文檔或者自行琢磨。

grant語法:
grant {[權限1]...[權限n]} on [數據庫].[數據庫對象] to [用戶名]@[登錄IP] identified by [密碼] [with grant option];--第一次添加賬號並授權。
grant {[權限1]...[權限n]} on [數據庫].[數據庫對象] to [用戶名]@[登錄IP];--爲已有賬號添加權限。
說明:{[權限1]...[權限n]} 包含所有權限可用all privileges代替;如果將讓授權的用戶,也可以將其所具有的權限grant給其他用戶,需要 with grant option選項

實例:
1、 mysql> show privileges;  -- 查看能夠被授予的權限,顯示結果爲三列內容:privilege 權限;Context 可授予對象;Comment說明。

2、 mysql> show grants for root; --查看root賬號具有的權限

3、 關於超級用戶root : grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option; 
--解釋:
grant 
all privileges  --授予所有權限
on 
*.*   --所有庫的所有對象
to 
'root'@'%'   --root賬號可通過任何IP地址訪問
identified by 
'password'  --root賬號可通過任何IP地址訪問時候的密碼
with 
grant option;   --root賬號可給其他賬號賦權限

4、 針對阿里雲RDS MySQL數據庫的高權限用戶的解釋

mysql> show grants for dba_admin; --RDS MySQL 高權限賬號,下面是結果。
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'dba_admin'@'%' IDENTIFIED BY PASSWORD '*****' WITH GRANT OPTION

--截斷解釋
GRANT 
SELECT, --select table 權限
INSERT, --insert table 權限 
UPDATE, --update table 權限 
DELETE, --delete table 權限 
CREATE, --create table 權限 
DROP,   --drop table 權限 
RELOAD, --執行flush tables|logs|privileges 的權限
PROCESS, --執行SHOW PROCESSLIST和KILL命令。默認情況下,每個用戶都可以執行SHOW PROCESSLIST命令,但是隻能查詢本用戶的進程
REFERENCES, --將其它表的一個字段作爲某一個表的外鍵約束的權限,即設置外鍵的權限
INDEX, --create|drop index權限
ALTER, --alter table 權限
CREATE TEMPORARY TABLES,  --創建臨時表的權限
LOCK TABLES, --lock table權限
EXECUTE, --執行sp和fun權限
REPLICATION SLAVE, --查看從服務器,從主服務器讀取二進制日誌權限,注主從複製賬號需要這個權限
REPLICATION CLIENT, --查詢master server、slave server狀態的權限,注主從複製賬號需要這個權限
CREATE VIEW,  --創建視圖權限
SHOW VIEW,  --執行show create view權限
CREATE ROUTINE, --create|alter|drop 存儲過程和函數權限(此權限自動包含EXECUTE 和 ALTER ROUTINE權限)
ALTER ROUTINE,  --alter|drop 存儲過程和函數權限
CREATE USER, --創建用戶的權限,即具有mysql庫的全局create user權限
EVENT, --查看event權限
TRIGGER --遊標權限
ON 
*.* 
TO 
'dbax_admin'@'%' 

注:第一次添加賬號權限時需要IDENTIFIED BY 'password' ;給已有賬號授予更多權限,則不需要此項。

5、 撤銷權限
revoke {[權限1]...[權限n]} on [數據庫].[數據庫對象] from [用戶名]@[登錄IP];  -- 語法跟grant 差不多,把to 換成from即可
例子: 
revoke all privileges on *.* from dbax_admin@'%';
revoke create user,insert on mytest.* from dbax_admin@'192.168.100.103';

6、 其他事項 
grant usage on 一般被授予權限的賬號,都默認有grant usage on 的權限,沒什麼卵用,就是用於連接的,並沒有任何權限,也不能使用revoke收回。
給表的列授權的語法稍有不同,如下:grant select(id, name, age) on mytest.userlist to dev@'%';

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章