1. 程式人生 > 實用技巧 >MySQL-使用者賬號及許可權管理

MySQL-使用者賬號及許可權管理

使用者賬號管理

新增使用者

使用create建立使用者

語法格式:
CREATE USER <使用者> [ IDENTIFIED BY [ PASSWORD ] 'password' ] [ ,使用者 [ IDENTIFIED BY [ PASSWORD ] 'password' ]]
例:
	1.CREATE USER 'username'@'localhost' IDENTIFIED BY 'passwd';

使用insert新建使用者

語法格式:
INSERT INTO mysql.user(Host, User,  authentication_string, ssl_cipher, x509_issuer, x509_subject) VALUES ('hostname', 'username', PASSWORD('password'), '', '', '');
例:
	1.INSERT INTO mysql.user(Host,User,authentication_string,ssl_cipher,x509_issuer,x509_subject) VALUES ('localhost','test',PASSWORD('passwd'),'','','');
	2.FLUSH PRIVILEGES;

使用GRANT新建使用者

語法格式:
GRANT priv_type ON database.table TO user [IDENTIFIED BY [PASSWORD] 'password']
	priv_type 引數表示新使用者的許可權;
	database.table 引數表示新使用者的許可權範圍,即只能在指定的資料庫和表上使用自己的許可權;
	user 引數指定新使用者的賬號,由使用者名稱和主機名構成;
	IDENTIFIED BY 關鍵字用來設定密碼;
	password 引數表示新使用者的密碼。
例:
	1.GRANT SELECT ON *.* TO 'test'@localhost IDENTIFIED BY 'passwd';

修改使用者

修改使用者名稱

語法格式:
RENAME USER <舊使用者> TO <新使用者>
	<舊使用者>:系統中已經存在的 MySQL 使用者賬號。
	<新使用者>:新的 MySQL 使用者賬號。
	RENAME USER 語句用於對原有的 MySQL 使用者進行重新命名。
	若系統中舊賬戶不存在或者新賬戶已存在,該語句執行時會出現錯誤。
	使用 RENAME USER 語句,必須擁有 mysql 資料庫的 UPDATE 許可權或全域性 CREATE USER 許可權。
例:
	RENAME USER 'test1'@'localhost' TO 'test02'@'localhost';

修改使用者密碼

  1. 使用set修改

    語法格式:
    	SET PASSWORD FOR 'username'@'hostname' = PASSWORD('newpasswd');
    
  2. 使用UPDATE修改

    語法格式:
    	UPDATE mysql.user SET authentication_string = PASSWORD('newpasswd') WHERE User='username' AND Host='hostname';FLUSH PRIVILEGES;
    例:
    	mysql>UPDATE mysql.user SET authentication_string = PASSWORD('newpasswd') WHERE User='test' AND Host='localhost';
    	mysql>FlUSH PRIVILEGES;
    
  3. 使用GRANT修改

    語法格式:
    	GRANT USAGE ON *.* TO 'user'@'hostname' IDENTIFIED BY 'newpasswd';
    例:
    	GRANT USAGE ON *.* TO 'test'@'localhost' IDENTIFIED BY 'newpasswd';
    

刪除使用者

使用DROP刪除使用者

語法格式:
DROP USER 'username'@'host'[,user@host]...
注意:使用者的刪除不會影響他們之前所建立的表、索引或其他資料庫物件,MySQL不會記錄是誰建立了這些物件
例:
	DROP USER 'test1'@'localhost';

使用DELETE刪除使用者

語法格式:
DELETE FROM mysql.user WHERE Host='hostname' AND User='username';
例:
	DELETE FROM mysql.user WHERE Host='localhost' AND User='test1';

檢視使用者許可權

使用SELECT查詢

語法格式:
SELETE * FROM 'username'@'hostname';
注意:
	1.新建使用者只有登入許可權,沒有任何其它許可權,不能查詢user表

使用SHOW GRANTS FOR查詢

SHOW GRANTS FOR 'username'@'host'; #檢視指定使用者的許可權
SHOW GRANTS FOR CURRENT_USER; #檢視當前使用者的許可權

使用者許可權管理

賦予許可權

語法格式:
GRANT priv_type [(column_list)] ON database.table TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user[IDENTIFIED BY [PASSWORD] 'password']] ...
[WITH with_option [with_option]...]
    priv_type 引數表示許可權型別;
    columns_list 引數表示許可權作用於哪些列上,省略該引數時,表示作用於整個表;
    database.table 用於指定許可權的級別;
    user 引數表示使用者賬戶,由使用者名稱和主機名構成,格式是“'username'@'hostname'”;
    IDENTIFIED BY 引數用來為使用者設定密碼;
    password 引數是使用者的新密碼。

    WITH 關鍵字後面帶有一個或多個 with_option 引數。這個引數有 5 個選項,詳細介紹如下:
    GRANT OPTION:被授權的使用者可以將這些許可權賦予給別的使用者;
    MAX_QUERIES_PER_HOUR count:設定每個小時可以允許執行 count 次查詢;
    MAX_UPDATES_PER_HOUR count:設定每個小時可以允許執行 count 次更新;
    MAX_CONNECTIONS_PER_HOUR count:設定每小時可以建立 count 個連線;
    MAX_USER_CONNECTIONS count:設定單個使用者可以同時具有的 count 個連線。
    
    1.授予資料庫許可權時,<許可權型別>可以指定為以下值
    SELECT	Select_priv	表示授予使用者可以使用 SELECT 語句訪問特定資料庫中所有表和檢視的許可權。
    INSERT	Insert_priv	表示授予使用者可以使用 INSERT 語句向特定資料庫中所有表新增資料行的許可權。
    DELETE	Delete_priv	表示授予使用者可以使用 DELETE 語句刪除特定資料庫中所有表的資料行的許可權。
    UPDATE	Update_priv	表示授予使用者可以使用 UPDATE 語句更新特定資料庫中所有資料表的值的許可權。
    REFERENCES	References_priv	表示授予使用者可以建立指向特定的資料庫中的表外來鍵的許可權。
    CREATE	Create_priv	表示授權使用者可以使用 CREATE TABLE 語句在特定資料庫中建立新表的許可權。
    ALTER	Alter_priv 	表示授予使用者可以使用 ALTER TABLE 語句修改特定資料庫中所有資料表的許可權。
    SHOW VIEW	Show_view_priv	表示授予使用者可以檢視特定資料庫中已有檢視的檢視定義的許可權。
    CREATE ROUTINE	Create_routine_priv	表示授予使用者可以為特定的資料庫建立儲存過程和儲存函式的許可權。
    ALTER ROUTINE	Alter_routine_priv	表示授予使用者可以更新和刪除資料庫中已有的儲存過程和儲存函式的許可權。
    INDEX	Index_priv	表示授予使用者可以在特定資料庫中的所有資料表上定義和刪除索引的許可權。
    DROP	Drop_priv	表示授予使用者可以刪除特定資料庫中所有表和檢視的許可權。
    CREATE TEMPORARY TABLES	Create_tmp_table_priv	表示授予使用者可以在特定資料庫中建立臨時表的許可權。
    CREATE VIEW	Create_view_priv	表示授予使用者可以在特定資料庫中建立新的檢視的許可權。
    EXECUTE ROUTINE	Execute_priv	表示授予使用者可以呼叫特定資料庫的儲存過程和儲存函式的許可權。
    LOCK TABLES	Lock_tables_priv	表示授予使用者可以鎖定特定資料庫的已有資料表的許可權。
    ALL 或 ALL PRIVILEGES 或 SUPER	Super_priv	表示以上所有許可權/超級許可權
    
    2.授予表許可權時,<許可權型別>可以指定為以下值
    SELECT	Select_priv	授予使用者可以使用 SELECT 語句進行訪問特定表的許可權
    INSERT	Insert_priv	授予使用者可以使用 INSERT 語句向一個特定表中新增資料行的許可權
    DELETE	Delete_priv	授予使用者可以使用 DELETE 語句從一個特定表中刪除資料行的許可權
    DROP	Drop_priv	授予使用者可以刪除資料表的許可權
    UPDATE	Update_priv	授予使用者可以使用 UPDATE 語句更新特定資料表的許可權
    ALTER	Alter_priv 	授予使用者可以使用 ALTER TABLE 語句修改資料表的許可權
    REFERENCES	References_priv	授予使用者可以建立一個外來鍵來參照特定資料表的許可權
    CREATE	Create_priv	授予使用者可以使用特定的名字建立一個數據表的許可權
    INDEX	Index_priv	授予使用者可以在表上定義索引的許可權
    ALL 或 ALL PRIVILEGES 或 SUPER	Super_priv	所有的許可權名
    
例:
	1. GRANT SELECT,INSERT ON *.* TO 'test'@'localhost' IDENTIFIED BY 'passwd' WITH GRANT OPTION;

回收許可權

回收使用者的某些特定許可權

語法格式:
REVOKE priv_type [(column_list)]... ON database.table FROM user [, user]...
    priv_type 引數表示許可權的型別;
    column_list 引數表示許可權作用於哪些列上,沒有該引數時作用於整個表上;
    user 引數由使用者名稱和主機名構成,格式為“username'@'hostname'”。
例:
	REVOKE SELECT,DROP ON *.* FROM 'test'@'localhost';

回收特定使用者的所有許可權

語法格式:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
    REVOKE 語法和 GRANT 語句的語法格式相似,但具有相反的效果
    要使用 REVOKE 語句,必須擁有 MySQL 資料庫的全域性 CREATE USER 許可權或 UPDATE 許可權
例:
	REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'test'@'localhost';