1. 程式人生 > >MySQL建立刪除使用者相關操作詳解

MySQL建立刪除使用者相關操作詳解

Mark一篇有關MySQL使用者操作的文章

宣告:本文部分轉載文中紅色加粗網頁連結,修改了部分程式碼格式以及刪減部分內容。
一, 建立使用者:

命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password';

注意:這裡的username是使用 鍵盤ESC鍵下方的按鍵在英文輸入模式輸入的 ,不要用 ' 單引號。在workbench中會報錯。

說明:username - 你將建立的使用者名稱, host - 指定該使用者在哪個主機上可以登陸,如果是本地使用者可用localhost, 如果想讓該使用者可以從任意遠端主機登陸,可以使用萬用字元%. password - 該使用者的登陸密碼,密碼可以為空,如果為空則該使用者可以不需要密碼登陸伺服器.

例子:

CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456'; 
CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY '123456'; 
CREATE USER 'pig'@'%' IDENTIFIED BY '123456'; 
CREATE USER 'pig'@'%' IDENTIFIED BY ''; 
CREATE USER 'pig'@'%'; 

二,授權:

命令:GRANT privileges ON databasename.tablename TO ‘username’@’host’

說明: privileges - 使用者的操作許可權,如SELECT , INSERT , UPDATE 等(詳細列表見該文最後面).如果要授予所的許可權則使用ALL。如果要授予使用者某個資料庫的某個表的許可權,則可以寫為:databasename(資料庫名),tablename(表名)如果要授予該使用者對所有資料庫和表的相應操作許可權則可用*表示, 如*.*.

例子:

GRANT SELECT, INSERT ON test.user TO 'pig'@'%'; 
GRANT ALL ON *.* TO 'pig'@'%'; 

注意:用以上命令授權的使用者不能給其它使用者授權,如果想讓該使用者可以授權,用以下命令:

GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION; 

三.設定與更改使用者密碼

命令:SET PASSWORD FOR ‘username’@’host’ = PASSWORD(‘newpassword’);
在這裡,若是使用MySQL最新版本(MySQL 8.0)會報錯,於是執行以下語句則通過。

SET PASSWORD FOR 'jason'@'localhost' = '12345';

若要修改當前登陸使用者則使用

SET PASSWORD = PASSWORD("newpassword");

四.撤銷使用者許可權

命令: REVOKE privilege ON databasename.tablename FROM 'username'@'host';

說明: privilege, databasename, tablename - 同授權部分.

例子: REVOKE SELECT ON . FROM ‘pig’@’%’;

注意: 假如你在給使用者'pig'@'%'授權的時候是這樣的(或類似的):GRANT SELECT ON test.user TO 'pig'@'%', 則在使用REVOKE SELECT ON *.* FROM 'pig'@'%';命令並不能撤銷該使用者對test資料庫中user表的SELECT 操作。相反,如果授權使用的是GRANT SELECT ON *.* TO 'pig'@'%';則REVOKE SELECT ON test.user FROM 'pig'@'%';命令也不能撤銷該使用者對test資料庫中user表的Select 許可權.

具體資訊可以用命令SHOW GRANTS FOR ‘pig’@’%’; 檢視.

五.刪除使用者

命令: DROP USER 'username'@'host';

附表:在MySQL中的操作許可權

ALTER Allows use of ALTER TABLE.
ALTER ROUTINE Alters or drops stored routines.
CREATE Allows use of CREATE TABLE.
CREATE ROUTINE Creates stored routines.
CREATE TEMPORARY TABLE Allows use of CREATE TEMPORARY TABLE.
CREATE USER Allows use of CREATE USER, DROP USER, RENAME USER, and REVOKE ALL PRIVILEGES.
CREATE VIEW Allows use of CREATE VIEW.
DELETE Allows use of DELETE.
DROP Allows use of DROP TABLE.
EXECUTE Allows the user to run stored routines.
FILE Allows use of SELECT… INTO OUTFILE and LOAD DATA INFILE.
INDEX Allows use of CREATE INDEX and DROP INDEX.
INSERT Allows use of INSERT.
LOCK TABLES Allows use of LOCK TABLES on tables for which the user also has SELECT privileges.
PROCESS Allows use of SHOW FULL PROCESSLIST.
RELOAD Allows use of FLUSH.
REPLICATION Allows the user to ask where slave or master
CLIENT servers are.
REPLICATION SLAVE Needed for replication slaves.
SELECT Allows use of SELECT.
SHOW DATABASES Allows use of SHOW DATABASES.
SHOW VIEW Allows use of SHOW CREATE VIEW.
SHUTDOWN Allows use of mysqladmin shutdown.
SUPER Allows use of CHANGE MASTER, KILL, PURGE MASTER LOGS, and SET GLOBAL SQL statements. Allows mysqladmin debug command. Allows one extra connection to be made if maximum connections are reached.
UPDATE Allows use of UPDATE.
USAGE Allows connection without any specific privileges

來源:http://yingxiong.javaeye.com/blog/451208

本文例項,運行於 MySQL 5.0 及以上版本。

MySQL 賦予使用者許可權命令的簡單格式可概括為:

grant 許可權 on 資料庫物件 to 使用者

一、grant 授予普通資料使用者,查詢、插入、更新、刪除 資料庫中所有表資料的權利。

grant insert   on testdb.*to [email protected]'host'
grant update on testdb.*to [email protected]'host'
grant delete  on testdb.*to [email protected]'host'

或者,用一條 MySQL 命令來替代:

grantselect, insert, update, deleteon testdb.*to [email protected]'%'

二、grant 資料庫開發人員,建立表、索引、檢視、儲存過程、函式。。。等許可權。

grant 建立、修改、刪除 MySQL 資料表結構許可權。

grant create on testdb.*to [email protected]'192.168.0.%';
grant alter   on testdb.*to [email protected]'192.168.0.%';
grant drop   on testdb.*to [email protected]'192.168.0.%';

grant 操作 MySQL 外來鍵許可權。

grant references on testdb.*to [email protected]'192.168.0.%';

grant 操作 MySQL 臨時表許可權。

grant create temporary tables on testdb.*to [email protected]'192.168.0.%';

grant 操作 MySQL 索引許可權。

grant index on testdb.*to [email protected]'192.168.0.%';

grant 操作 MySQL 檢視、檢視檢視原始碼 許可權。

grant create view on testdb.*to [email protected]'192.168.0.%';
grant show viewon testdb.*to [email protected]'192.168.0.%';

grant 操作 MySQL 儲存過程、函式 許可權。

grant create routine on testdb.*to [email protected]'192.168.0.%';
grant alter routine on testdb.*to [email protected]'192.168.0.%';
grant executeon testdb.*to [email protected]'192.168.0.%';

三、grant 普通使用者user管理某個 MySQL 資料庫的許可權。

grant all privileges on testdb to [email protected]'localhost'

其中,關鍵字 “privileges” 可以省略。

四、grant 高階 user 管理 MySQL 中所有資料庫的許可權。

grant all on *.* to [email protected]'localhost'

五、MySQL grant 許可權,分別可以作用在多個層次上。

  1. grant 作用在整個 MySQL 伺服器上:

grant select on*.*to [email protected]; 可以查詢 MySQL 中所有資料庫中的表。
grant all on*.*to [email protected]; 可以管理 MySQL 中的所有資料庫

  1. grant 作用在單個數據庫上:

grant select on testdb.* to 'user'@'localhost'; 可以查詢 testdb 中的表。

  1. grant 作用在單個數據表上:

grant select, insert, update, delete on testdb.orders to 'user'@'localhost';

這裡在給一個使用者授權多張表時,可以多次執行以上語句。例如:

grant select(user_id,username) on smp.users to 'user'@'host' identified by'123345';
grant select on smp.mo_sms to 'user'@'host' identified by'123345';

  1. grant 作用在表中的列上:

grant select(id, se, rank) on testdb.apache_log to 'user'@'localhost';

  1. grant 作用在儲存過程、函式上:

grant execute on procedure testdb.pr_add to'user'@'localhost'
grant execute on function testdb.fn_add to'user'@'localhost'

六、檢視 MySQL 使用者許可權

檢視當前使用者(自己)許可權:

show grants;

檢視其他 MySQL 使用者許可權:

show grants for [email protected];

七、撤銷已經賦予給 MySQL 使用者許可權的許可權。

revoke 跟 grant 的語法差不多,只需要把關鍵字 “to” 換成 “from” 即可:

grant all on*.*to [email protected];
revoke all on*.*from [email protected];

八、MySQL grant、revoke 使用者許可權注意事項

  1. grant, revoke 使用者許可權後,該使用者只有重新連線 MySQL 資料庫,許可權才能生效。

  2. 如果想讓授權的使用者,也可以將這些許可權 grant 給其他使用者,需要選項 “grant option“

grant select on testdb.*to ‘user’@’localhost’with grant option;
這個特性一般用不到。實際中,資料庫許可權最好由 user 來統一管理。


遇到 SELECT command denied to user ‘使用者名稱’@’主機名’ for table ‘表名’ 這種錯誤,解決方法是需要把後面的表名授權,即是要你授權核心資料庫也要。

我遇到的是SELECT command denied to user ‘my’@’%’ for table ‘proc’,是呼叫儲存過程的時候出現,原以為只要把指定的資料庫授權就行了,什麼儲存過程、函式等都不用再管了,誰知道也要把資料庫mysql的proc表授權


mysql授權表共有5個表:user、db、host、tables_priv和columns_priv。

授權表的內容有如下用途:
user表
user表列出可以連線伺服器的使用者及其口令,並且它指定他們有哪種全域性(超級使用者)許可權。在user表啟用的任何許可權均是全域性許可權,並適用於所有資料庫。例如,如果你啟用了DELETE許可權,在這裡列出的使用者可以從任何表中刪除記錄,所以在你這樣做之前要認真考慮。

db表
db表列出資料庫,而使用者有許可權訪問它們。在這裡指定的許可權適用於一個數據庫中的所有表。

host表
host表與db表結合使用在一個較好層次上控制特定主機對資料庫的訪問許可權,這可能比單獨使用db好些。這個表不受GRANT和REVOKE語句的影響,所以,你可能發覺你根本不是用它。

tables_priv表
tables_priv表指定表級許可權,在這裡指定的一個許可權適用於一個表的所有列。

columns_priv表
columns_priv表指定列級許可權。這裡指定的許可權適用於一個表的特定列。