對於mysql的用戶管理,連接各個數據庫時候最好不要用root帳號,需要分配對應的用戶,保證mysql數據庫的安全和方便用戶管理。
一:用戶創建
方法1:執行命令
mysql》 CREATE USER 'username'@'host' IDENTIFIED BY 'password';
參數分析:
username:用戶名
host:指定用戶可以登錄的主機,本地登錄的話是localhost,遠程登錄的話是 % 通配符,還可以指定單獨的ip
password:用戶登錄密碼,不指定的話用戶可以不輸入密碼就可登錄
例子:
mysql> CREATE USER 'lxh'@'localhost' IDENTIFIED BY '123456'; //只允許本地登錄
mysql> CREATE USER 'lxh'@'%' IDENTIFIED BY '123456'; //允許用戶遠程登錄
mysql> CREATE USER 'lxh'@'%' IDENTIFIED BY ''; //允許用戶可不輸入密碼登錄(建議不要這樣做)
方法2:直接忘mysql數據庫中的user表插入用戶數據
mysql> user mysql;
mysql> insert into user(Host,User,Password) values("localhost","lxh",password("123456"));
二:用戶授權
首先得登錄root帳號(或者有可以授權權限的帳號)
全部權限授權:
mysql> GRANT all privileges ON databasename.tablename TO 'username'@'host';
部分權限授權
mysql> GRANT SELECT, INSERT ON databasename.tablename TO 'username'@'host';
參數分析:
databasename:要授權的數據庫名稱 ,如果是全部的數據庫,可以用 *
tablename:要授權的數據庫中的表名稱,如果是全部的表,可以用 *
username:mysql用戶名稱
host:主機名稱,可以使本機 localhost,也可以是遠程 % (這要看用戶是本機用戶還是遠程用戶)
ps:如果想讓用戶可以給其他用戶授權,執行以下命令即可:
mysql> GRANT all privileges ON databasename.tablename TO ‘username’@’host’ WITH GRANT OPTION;
授權後記得刷新下系統權限表:
mysql> flush privileges;
三:修改用戶的密碼
mysql> grant all privileges on databasename.* to username@localhost identified by 'newpwd';
或者直接利用mysql語句執行
mysql> update mysql.user set password=password('新密碼') where User="lxh" and Host="localhost";
四:刪除用戶
mysql> Delete FROM user Where User="lxh" and Host="localhost";
mysql> flush privileges;
ps:每次的更新操作後最好執行刷新系統權限表 flush privileges;
五:查看用戶權限的兩種方法
一. 使用MySQL grants
mysql> show grants for username@localhost;
實例:
mysql> show grants for root@localhost;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
1 row in set (0.01 sec)
二. 直接通過mysql select查詢語句:
mysql> select * from mysql.user where user='test' and host='127.0.0.1' \G;
*************************** 1. row ***************************
Host: 127.0.0.1
User: test
Password: *EB3C643405D7F53BD4BF7FBA98DCF5641E228833
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: N
File_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: N
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
Event_priv: N
Trigger_priv: N
Create_tablespace_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string:
password_expired: N
1 row in set (0.00 sec)
可以看到Select_priv,Insert_priv,Update_priv...等為N表示沒有權限,該用戶權限一目了然.這時可以使用命令
六: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@’%’
9>.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.%’;
10>.grant 普通 DBA 管理某個 MySQL 數據庫的權限。
grant all privileges on testdb to dba@’localhost’
其中,關鍵字 “privileges” 可以省略。
11>.grant 高級 DBA 管理 MySQL 中所有數據庫的權限。
grant all on *.* to dba@’localhost’
12>.MySQL grant 權限,分別可以作用在多個層次上。
1. grant 作用在整個 MySQL 服務器上:
grant select on *.* to dba@localhost; -- dba 可以查詢 MySQL 中所有數據庫中的表。
grant all on *.* to dba@localhost; -- dba 可以管理 MySQL 中的所有數據庫
2. grant 作用在單個數據庫上:
grant select on testdb.* to dba@localhost; -- dba 可以查詢 testdb 中的表。
3. grant 作用在單個數據表上:
grant select, insert, update, delete on testdb.orders to dba@localhost;
4. grant 作用在表中的列上:
grant select(id, se, rank) on testdb.apache_log to dba@localhost;
5. grant 作用在存儲過程、函數上:
grant execute on procedure testdb.pr_add to ’dba’@’localhost’
grant execute on function testdb.fn_add to ’dba’@’localhost’
注意:修改完權限以後 一定要刷新服務,或者重啟服務,刷新服務用:FLUSH PRIVILEGES。