創建用戶
mysql創建用戶的方法分成三種:INSERT USER表的方法、CREATE USER的方法、GRANT的方法。
賬號名稱的構成方式
賬號的組成方式:用戶名+主機(所以可以出現重複的用戶名,跟其他的數據庫不一樣)
用戶名:16字符以內.
主機名:可以用主機名和IP地址,也可以用通配符
通配符說明:172.18.10.%(IP地址爲172.18.10段的所有IP地址都可以訪問)
通過CREATE USER命令進行創建用戶
腳本:
CREATE USER 'username@host' [IDENTIFIED BY 'PASSWORD']
其中密碼是可選項;
例子:
CREATE USER '[email protected]' IDENTIFIED BY "123";
CREATE USER '[email protected].%' IDENTIFIED BY "123";
CREATE USER 'john@' ;
說明:該方法創建出來的用戶只有連接數據庫的權限,需要後續繼續授權;
注意:用戶與@後主機地址是一體的,用一個分號連接,否則會報錯,ERROR 1396 (HY000): Operation CREATE USER failed for ‘remote’@’%’
通過GRANT命令創建用戶
當數據庫存在用戶的時候GRANT會對用戶進行授權,但當數據庫不存在該用戶的時候,就會創建相應的用戶並進行授權。(說明上面那步是多餘的)
命令:
GRANT <ALL|priv1,priv2,.....privn> ON
[object] [IDENTIFIED BY 'password']
[WITH GRANT OPTION];
MAX_QUERIES_PER_HOUR count
MAX_UPDATES_PER_HOUR count
MAX_CONNECTIONS_PER_HOUR count
MAX_USER_CONNECTIONS count
說明:priv代表權限
select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file
等14個權限
例子:
mysql>grant select,insert,update,delete,create,drop on test.hr to john@192.168.10.1 identified by '123';
說明:給主機爲192.168.10.1的用戶john分配可對數據庫test的hr表進行select,insert,update,delete,create,drop等操作的權限,並設定口令爲123。
mysql>grant all privileges on test.* to joe@192.168.10.1 identified by '123';
說明:給主機爲192.168.10.1的用戶john分配可對數據庫test所有表進行所有操作的權限,並設定口令爲123。
mysql>grant all privileges on *.* to john@192.168.10.1 identified by '123';
說明:給主機爲192.168.10.1的用戶john分配可對所有數據庫的所有表進行所有操作的權限,並設定口令爲123。
mysql>grant all privileges on *.* to john@localhost identified by '123';
說明:用戶john分配可對所有數據庫的所有表進行所有操作的權限,並設定口令爲123。
查看權限:
show grants for你的用戶;
show grants forroot@'localhost';
show grants for webgametest@10.3.18.158;
show createdatabase dbname;
這個可以看到創建數據庫時用到的一些參數。
showcreatetabletickets;
可以看到創建表時用到的一些參數
撤銷權限:
revoke all on *.* from dba@localhost;
直接向mysql.user表插入記錄(該方法個人很少用)
因爲數據庫的用戶信息都是保存在mysql.user這張表的,所以直接對該表進行插入語句,即可完成用戶的創建;
mysql> insert into user (host,user,password) values ('%','john',password('123'));
完成用戶的創建後,請記得刷新系統權限表;
mysql>flush privileges;
總結:雖然創建用戶的方法有三種,個人還是傾向於第二種方法,一步到位,簡單明瞭;
其他的兩種方法只是有助於理解數據庫的原理而已。
創建數據庫
mysql> CREATE DATABASE dbname;
給用戶分配數據庫管理權限
一、grant 普通數據用戶,查詢、插入、更新、刪除 數據庫中所有表數據的權利。
grant select on testdb.* to common_user@'%'
grant insert on testdb.* to common_user@'%'
grant update on testdb.* to common_user@'%'
grant delete on testdb.* to common_user@'%'
或者,用一條 MySQL 命令來替代:
grant select, insert, update, delete on testdb.* to common_user@'%'
二、grant 數據庫開發人員,創建表、索引、視圖、存儲過程、函數。。。等權限。
grant 創建、修改、刪除 MySQL 數據表結構權限。
grant create on testdb.* to developer@'192.168.0.%';
grant alter on testdb.* to developer@'192.168.0.%';
grant drop on testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 外鍵權限。
grant references on testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 臨時表權限。
grant create temporary tables on testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 索引權限。
grant index on testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 視圖、查看視圖源代碼 權限。
grant create view on testdb.* to developer@'192.168.0.%';
grant show view on testdb.* to developer@'192.168.0.%';
grant 操作 MySQL 存儲過程、函數 權限。
grant create routine on testdb.* to developer@'192.168.0.%'; -- now, can show procedure status
grant alter routine on testdb.* to developer@'192.168.0.%'; -- now, you can drop a procedure
grant execute on testdb.* to developer@'192.168.0.%';
三、grant 普通 DBA 管理某個 MySQL 數據庫的權限。
grant all privileges on testdb to dba@'localhost'
其中,關鍵字 privileges 可以省略。
四、grant 高級 DBA 管理 MySQL 中所有數據庫的權限。
grant all on *.* to dba@'localhost'
五、MySQL grant 權限,分別可以作用在多個層次上。
- grant 作用在整個 MySQL 服務器上:
grant select on *.* to dba@localhost; -- dba 可以查詢 MySQL 中所有數據庫中的表。
grant all on *.* to dba@localhost; -- dba 可以管理 MySQL 中的所有數據庫
- grant 作用在單個數據庫上:
grant select on testdb.* to dba@localhost; -- dba 可以查詢 testdb 中的表。
- grant 作用在單個數據表上:
grant select, insert, update, delete on testdb.orders to dba@localhost;
這裏在給一個用戶授權多張表時,可以多次執行以上語句。例如:
grant select(user_id,username) on smp.users to mo_user@'%' identified by '123345';
grant select on smp.mo_sms to mo_user@'%' identified by '123345';
- grant 作用在表中的列上:
grant select(id, se, rank) on testdb.apache_log to dba@localhost;
- grant 作用在存儲過程、函數上:
grant execute on procedure testdb.pr_add to 'dba'@'localhost'
grant execute on function testdb.fn_add to 'dba'@'localhost'
六、查看 MySQL 用戶權限
查看當前用戶(自己)權限:
show grants;
查看其他 MySQL 用戶權限:
show grants for dba@localhost;for dba@localhost;
七、撤銷已經賦予給 MySQL 用戶權限的權限。
revoke 跟 grant 的語法差不多,只需要把關鍵字 to 換成 from 即可:
grant all on *.* to dba@localhost;*.* to dba@localhost;
revoke all on *.* from dba@localhost;*.* from dba@localhost;
八、MySQL grant、revoke 用戶權限注意事項
1. grant, revoke 用戶權限後,該用戶只有重新連接 MySQL 數據庫,權限才能生效。
2. 如果想讓授權的用戶,也可以將這些權限 grant 給其他用戶,需要選項 grant option
grant select on testdb.* to dba@localhost with grant option;select on testdb.* to dba@localhost with grant option;
這個特性一般用不到。實際中,數據庫權限最好由 DBA 來統一管理。
注意:創建完成後需要執行 FLUSH PRIVILEGES 語句。