個體戶做網(wǎng)站有優(yōu)勢嗎google谷歌搜索主頁
文章目錄
- MySQL權限
- 授予權限
- 查看權限
- 撤銷權限
- 權限生效機制
- 訪問控制的實現(xiàn)
在實際生產(chǎn)中,為了保證數(shù)據(jù)的安全,數(shù)據(jù)庫管理人員需要為不同的操作人員分配不同的權限,限制登錄MySQL服務器的用戶只能在其權限范圍內(nèi)操作。同時管理員還可以根據(jù)不同的情況為用戶授予權限或撤銷權限,從而控制操作人員的權限。
MySQL權限
MySQL的權限系統(tǒng)分為以下三個不同的層級:
- 全局性的權限:針對整個mysql實例。
- 數(shù)據(jù)庫級別的權限:針對某個具體的MySQL數(shù)據(jù)庫。
- 對象級別的權限:針對MySQL數(shù)據(jù)庫中某個具體的數(shù)據(jù)庫對象,如:表、表中的列、存儲過程和存儲函數(shù)等。
MySQL中的權限信息根據(jù)其作用范圍分別存儲在名稱為mysql的數(shù)據(jù)庫的不同表中。當MySQL啟動時會自動加載這些權限信息,并且將這些權限信息讀取到內(nèi)存中。
系統(tǒng)表名稱 | 描述 |
---|---|
user | 保存用戶賬號信息和全局權限信息 |
db | 保存數(shù)據(jù)庫級別的權限信息 |
tables_priv | 保存表級別的權限信息 |
columns_priv | 保存列級別的權限信息 |
procs_priv | 保存存儲過程和存儲函數(shù)相關的權限信息 |
proxies_priv | 保存代理用戶的權限信息 |
查看用戶的權限:
mysql> show grants for username@hostname;
MySQL權限可以分為數(shù)據(jù)權限、結構權限、管理權限。管理員可以為用戶授予或撤銷權限。
分類 | 權限名稱 | 權限級別 | 描述 |
---|---|---|---|
數(shù)據(jù)權限 | INSERT | 全局、數(shù)據(jù)庫、表、列 | 允許插入數(shù)據(jù) |
數(shù)據(jù)權限 | DELETE | 全局、數(shù)據(jù)庫、表 | 允許刪除數(shù)據(jù) |
數(shù)據(jù)權限 | UPDATE全局、數(shù)據(jù)庫、表、列 | 允許更新數(shù)據(jù) | |
數(shù)據(jù)權限 | SELECT | 全局、數(shù)據(jù)庫、表、列 | 允許訪問數(shù)據(jù) |
數(shù)據(jù)權限 | SHOW DATABASES | 全局 | 允許查看已存在的數(shù)據(jù)庫 |
數(shù)據(jù)權限 | SHOW VIEW | 全局、數(shù)據(jù)庫、表 | 允許查看已有視圖的視圖定義 |
數(shù)據(jù)權限 | PROCESS | 全局 | 允許查看正在運行的線程 |
結構權限 | CREATE | 全局、數(shù)據(jù)庫、表 | 允許創(chuàng)建數(shù)據(jù)庫和表 |
結構權限 | DROP | 全局、數(shù)據(jù)庫、表 | 允許刪除數(shù)據(jù)庫、表和視圖 |
結構權限 | CREATE ROUTINE | 全局、數(shù)據(jù)庫 | 允許創(chuàng)建存儲過程 |
結構權限 | CREATE TABLESPACE | 全局 | 允許創(chuàng)建、修改或刪除表空間和日志組件 |
結構權限 | CREATE TEMPORARY TABLES | 全局、數(shù)據(jù)庫 | 允許創(chuàng)建臨時表 |
結構權限 | CREATE VIEW | 全局、數(shù)據(jù)庫、表 | 允許創(chuàng)建和修改視圖 |
結構權限 | ALTER | 全局、數(shù)據(jù)庫、表 | 允許修改數(shù)據(jù)表 |
結構權限 | ALTER ROUTINE | 全局、數(shù)據(jù)庫、存儲過程 | 允許修改或刪除存儲過程 |
結構權限 | INDEX | 全局、數(shù)據(jù)庫、表 | 允許創(chuàng)建和刪除索引 |
結構權限 | TRIGGER | 全局、數(shù)據(jù)庫、表 | 允許觸發(fā)器的所有操作 |
結構權限 | REFERENCES | 全局、數(shù)據(jù)庫、表、列 | 允許創(chuàng)建外鍵 |
管理權限 | SUPER | 全局 | 允許使用其他管理操作,如CHANGE MASTER TO等 |
管理權限 | CREATE USER | 全局 | CREATE USER、DROP USER、RENAME USER和REVOKE ALL PRIVILEGES |
管理權限 | GRANT OPTION | 全局 | 允許授予或刪除用戶權限 |
管理權限 | RELOAD | 全局 | FLUSH操作 |
管理權限 | PROXY | 與被代理的用戶權限相同 | |
管理權限 | REPLICATION CLIENT | 全局 | 允許用戶訪問主服務器或從服務器 |
管理權限 | REPLICATION SLAVE | 全局 | 允許復制從服務器讀取主服務器二進制日志事件 |
管理權限 | SHUTDOWN | 全局 | 允許使用mysqladmin shutdown |
管理權限 | LOCK TABLES | 全局、數(shù)據(jù)庫 | 允許使用LOCK TABLES鎖定擁有SELECT權限的數(shù)據(jù)庫 |
權限級別指權限可以被應用在哪些數(shù)據(jù)庫內(nèi)容中。
例如,SELECT權限級別是指SELECT權限可以被授予到全局(任意數(shù)據(jù)庫下的任意內(nèi)容)、數(shù)據(jù)庫(指定數(shù)據(jù)庫下的任意內(nèi)容)、表(指定數(shù)據(jù)庫下的指定數(shù)據(jù)庫表)、列(指定數(shù)據(jù)庫下的指定數(shù)據(jù)表中的指定字段)。
授予權限
基本語法:
GRANT 權限名稱[(字段列表)][, 權限名稱[(字段列表)] ... ] ON 權限級別TO 'username'@'hostname' [, 'username'@'hostname' ... ] [WITH with_option]
- 權限名稱:上表中的權限名稱
- 字段列表:表示權限設置到哪些字段上。同時給多個字段設置同一個權限時,多個字段名之間使用逗號分隔。如果不指定字段,則設置的權限作用于整個表。
- 權限級別:上表中的權限級別,可以使用下面四種寫法
- *.*:表示全局級別的權限,即授予的權限適用于所有數(shù)據(jù)庫和數(shù)據(jù)庫表。
- *:如果當前未選擇數(shù)據(jù)庫,表示全局級別的權限;如果當前選擇了數(shù)據(jù)庫,則為當前選擇的數(shù)據(jù)庫授予權限。
- 數(shù)據(jù)庫名.*:表示數(shù)據(jù)庫級別的權限,即授予的權限適用于指定數(shù)據(jù)庫中的所有表。
- 數(shù)據(jù)庫名.表:表示表級別的權限。如果不指定將授予權限的字段,則授予的權限適用于指定數(shù)據(jù)庫的指定表中的所有列。
- TO子句用于指定一個或多個用戶。
- with_option的取值有5個:GRANT OPTION、MAX_QUERIES_PER_HOUR count、MAX_UPDATES_PER_HOUR count、MAX_CONNECTIONS_PER_HOUR count、MAX_USER_CONNECTIONS。
查看權限
tables_priv保存表級別的權限信息,columns_priv保存列級別的權限信息,管理員可以直接查詢表看到用戶的權限信息。也可以使用SHOW GRANTS
語句查看用戶權限?;菊Z法:
SHOW GRANTS FOR 'username'@'hostname';
撤銷權限
為保證數(shù)據(jù)庫的安全,對于用戶一些不必要的權限應該及時撤銷。MySQL提供了REVOKE語句用于撤銷用戶的權限,其基本語法:
REVOKE 權限名稱[(字段列表)] [, 權限名稱[(字段列表)] ...] ON 權限級別FROM 'username'@'hostname' [, 'username'@'hostname' ... ]
當撤銷的權限比較多時,這種方式就比較煩瑣。MySQL還提供了一次性撤銷所有權限的功能,基本語法:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'username'@'hostname' [, 'username'@'hostname' ... ]
要使用REVOKE語句,必須擁有MySQL數(shù)據(jù)庫的全局CREATE USER權限或UPDATE權限。
USAGE權限只能用于登錄MySQL數(shù)據(jù)庫,不能執(zhí)行其他任何的操作;該權限不能被撤銷。
權限生效機制
在MySQL中可以通過兩種方式完成授權和撤銷權限,但它們的生效機制卻不一樣。
- 通過GRANT、REVOKE語句對用戶進行授權、撤銷的操作,權限的修改會立即生效。
- 通過DML語句(insert、update和delete)直接修改權限系統(tǒng)表來完成授權和撤銷,需要手動執(zhí)行
flush privileges
語句讓MySQL重裝裝載權限系統(tǒng)表或重啟MySQL數(shù)據(jù)庫后,修改才會生效。
當MySQL生效新的權限信息時,對客戶端會有以下影響: - 全局性的權限更改和新密碼的設置會在下一次客戶端連接時生效。
- 數(shù)據(jù)庫級別的權限更改會在下一次使用
USE database_name
語句時生效。 - 對象級別的權限更改(如表和列),會在客戶端下一次請求該對象時生效。
訪問控制的實現(xiàn)
MySQL訪問控制實際上由兩個功能模塊共同完成:用戶管理模塊、訪問控制模塊。
用戶管理模塊主要是驗證用戶的合法性,驗證用戶是否能夠訪問MySQL數(shù)據(jù)庫;而訪問控制模塊則需要根據(jù)權限系統(tǒng)表中存儲的權限信息來決定用戶的權限。