標籤:
在mysql資料庫中,有mysql_install_db指令碼初始化許可權表,儲存許可權的表有:
- user表
- db表
- host表
- table_priv表
- columns_priv表
- proc_priv表
MySQL存取控制包含2個階段:
階段1:伺服器檢查你是否允許串連。
階段2:假定你能串連,伺服器檢查你發出的每個請求。看你是否有足夠的許可權實施它。例如,如果你從資料庫中一個表精選(select)行或從資料庫拋棄一個表,伺服器確定你對錶有select許可權或對資料庫有drop許可權。
伺服器在存取控制的兩個階段使用在mysql的資料庫中的user、db和host表表示,
表名稱 user db host
範圍欄位 Host Host Host
User Db Db
Password User
| 表名稱 |
user |
db |
host |
| 範圍欄位 |
host,use,password |
host,db,user |
host,db |
許可權的鍵以 _priv 結尾:
使用GRANT語句建立新使用者
GRANT USER語句可以用來建立帳戶,通過該語句可以在user表中添加一條新記錄
比起CREATE USER語句建立的新使用者,還需要使用GRANT語句
賦予使用者權限
使用GRANT語句建立新使用者時必須有GRANT許可權。
GRANT priv_type [(column_list)] [, priv_type [(column_list)]] …
ON [object_type] {tbl_name | * | . | db_name.*}
TO user [IDENTIFIED BY [PASSWORD] ‘password’]
[, user [IDENTIFIED BY [PASSWORD] ‘password’]] …
[REQUIRE
NONE |
[{SSL| X509}]
[CIPHER ‘cipher’ [AND]]
[ISSUER ‘issuer’ [AND]]
[SUBJECT ‘subject’]]
[WITH with_option [with_option] …]
使用GRANT語句建立一個新使用者testUser,密碼為testpwd,並授予使用者對所有資料表的SELECT和UPDATE許可權
GRANT SELECT ,UPDATE ON *.* TO ‘testUser‘@‘localhost‘ identified BY ‘testpwd‘SELECT `Host` ,`User` ,`Select_priv` ,`Update_priv` FROM mysql.user WHERE `User` =‘testUser‘;
執行結果顯示執行成功,使用SELECT語句查詢使用者testUser的許可權
Select ‘Host’,’User’,’Select_priv’,’Update_priv’ from mysql user where ‘User’ = ‘testUser’;
root使用者密碼丟失的解決辦法
使用–skip-grant-tables選項啟動MYSQL服務
使用–skip-grant-tables選項啟動MYSQL時,伺服器將不載入許可權判斷,任何使用者都能訪問資料庫
LINUX下
使用mysqld_safe來啟動MYSQL服務,也可以使用/etc/init.d/mysql命令來啟動mysql
mysqld_safe --skip-grant-tables user=mysql
或者
/etc/init.d/mysql start-mysqld --skip-grant-tables
啟動MYSQL服務後,就可以使用root使用者登入了
許可權管理
MYSQL中的各種許可權
對於GRANT和REVOKE語句,priv_type可以被指定為以下任何一種:
| 許可權 |
意義 |
| ALL [PRIVILEGES] |
設定除GRANT OPTION之外的所有簡單許可權 |
| ALTER |
允許使用ALTER TABLE |
| ALTER ROUTINE |
更改或取消已儲存的子程式 |
| CREATE |
允許使用CREATE TABLE |
| CREATE ROUTINE |
建立已儲存的子程式 |
| CREATE TEMPORARY TABLES |
允許使用CREATE TEMPORARY TABLE |
| CREATE USER |
允許使用CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES。 |
| CREATE VIEW |
允許使用CREATE VIEW |
| DELETE |
允許使用DELETE |
| DROP |
允許使用DROP TABLE |
| EXECUTE |
允許使用者運行已儲存的子程式 |
| FILE |
允許使用SELECT…INTO OUTFILE和LOAD DATA INFILE |
| INDEX |
允許使用CREATE INDEX和DROP INDEX |
| INSERT |
允許使用INSERT |
| LOCK TABLES |
允許對您擁有SELECT許可權的表使用LOCK TABLES |
| PROCESS |
允許使用SHOW FULL PROCESSLIST |
| REFERENCES |
未被實施 |
| RELOAD |
允許使用FLUSH |
| REPLICATION CLIENT |
允許使用者詢問從屬伺服器或主伺服器的地址 |
| REPLICATION SLAVE |
用於複製型從屬伺服器(從主伺服器中讀取二進位日誌事件) |
| SELECT |
允許使用SELECT |
| SHOW DATABASES SHOW DATABASES |
顯示所有資料庫 |
| SHOW VIEW |
允許使用SHOW CREATE VIEW |
| SHUTDOWN |
允許使用mysqladmin shutdown |
| SUPER |
允許使用CHANGE MASTER, KILL, PURGE MASTER LOGS和SET GLOBAL語句,mysqladmin debug命令;允許您串連(一次),即使已達到max_connections。 |
| UPDATE |
允許使用UPDATE |
| USAGE |
“無許可權”的同義字 |
| GRANT OPTION |
允許授予許可權 |
當從舊版本的MySQL升級時,要使用EXECUTE, CREATE VIEW, SHOW VIEW, CREATE USER, CREATE ROUTINE和ALTER ROUTINE許可權
授權
授權就是為某個使用者授予許可權
授與權限可以分為多個層級:
全域層級
全域許可權適用於一個給定伺服器中的所有資料庫。這些許可權儲存在mysql.user表中。GRANT ALL ON .和REVOKE ALL ON .只授予和撤銷全域許可權。
資料庫層級
資料庫許可權適用於一個給定資料庫中的所有目標。這些許可權儲存在mysql.db和mysql.host表中。GRANT ALL ONdb_name.和REVOKE ALL ON db_name.只授予和撤銷資料庫許可權。
表層級
表許可權適用於一個給定表中的所有列。這些許可權儲存在mysql.talbes_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤銷表許可權。
列層級
列許可權適用於一個給定表中的單一列。這些許可權儲存在mysql.columns_priv表中。當使用REVOKE時,您必須指定與被授權列相同的列。
子程式層級
CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT許可權適用於已儲存的子程式。這些許可權可以被授予為全域層級和資料庫層級。而且,除了CREATE ROUTINE外,這些許可權可以被授予為子程式層級,並儲存在mysql.procs_priv表中。
當後續目標是一個表、一個已儲存的函數或一個已儲存的過程時,object_type子句應被指定為TABLE、FUNCTION或PROCEDURE。當從舊版本的MySQL升級時,要使用本子句,您必須升級您的授權表
收回許可權
收回許可權就是取消已經賦予使用者的某些許可權。收回使用者不必要的許可權可以在一定程度上保證系統的安全性。
使用REVOKE收回許可權之後,使用者帳戶的記錄將從db、host、tables_priv、columns_priv表中刪除,但是使用者帳號記錄依然
在user表中儲存。
REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] {tbl_name | * | *.* | db_name.*} FROM user [, user] ... REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
使用REVOKE語句,必須擁有mysql資料庫的全域CREATE許可權或UPDATE許可權
使用REVOKE語句取消使用者grantUser的INSERT許可權
REVOKE INSERT ON *.* FROM ‘grantUser‘@‘localhost‘;
注意:當從舊版本的MYSQL升級時,如果要使用EXECUTE、CREATE VIEW、SHOW VIEW、CREATE USER、CREATE ROUTINE、ALTER ROUTINE許可權,必須先升級授權表
查看許可權
SHOW GRANT語句可以顯示使用者的許可權資訊
show grants FOR ‘user‘@‘host‘;
MySql-許可權管理