Mysql 一般性操作

創建用戶

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 權限,分別可以作用在多個層次上。

  1. grant 作用在整個 MySQL 服務器上:
grant select on *.* to dba@localhost; -- dba 可以查詢 MySQL 中所有數據庫中的表。
grant all on *.* to dba@localhost; -- dba 可以管理 MySQL 中的所有數據庫
  1. grant 作用在單個數據庫上:
grant select on testdb.* to dba@localhost; -- dba 可以查詢 testdb 中的表。
  1. 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';
  1. grant 作用在表中的列上:
grant select(id, se, rank) on testdb.apache_log to dba@localhost;
  1. 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 語句。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章