一、基本的用戶管理
新安裝的mysql默認只有root用戶,如果所有應用都使用root用戶,將涉及到許多的權限與安全問題,所以需要創建不同的用戶並設置密碼來執行不同的操作。
mysql中的用戶與密碼存在mysql庫的user表裏。
登錄mysql使用如下命令查看用戶及密碼
mysql>select User,Password from mysql.user;
下面演示創建、刪除用戶與密碼設置
1.創建用戶
mysql> create user mytest1; Query OK, 0 rows affected (0.01 sec)
2.設置密碼
mysql> set password for mytest1 = password('mi123123'); Query OK, 0 rows affected (0.00 sec)
說明:1.使用“for username”爲指定用戶設置密碼,不然就是爲當前用戶設置密碼。
2.使用password('密碼')方式爲要設置的密碼進行加密,不然就會明文保存,不安全。
我們還可以在創建用戶的同時設置密碼
mysql> create user mytest2 identified by 'my123123'; Query OK, 0 rows affected (0.00 sec)
3.查看新建的用戶以及設置的密碼
mysql> select User,Password from user; +---------+-------------------------------------------+ | User | Password | +---------+-------------------------------------------+ | root | | | root | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | | mytest1 | *BB9971EEFFFEF5DB7694D41750FC84489F86A753 | +---------+-------------------------------------------+
4.如果需要更改用戶的名稱,可以使用rename user改變用戶名稱
mysql> rename user mytest1 to mytest3; Query OK, 0 rows affected (0.00 sec)
5.不再需要的用戶可以進行刪除
mysql> drop user mytest2; Query OK, 0 rows affected (0.00 sec)
二、基本的權限管理
以上的命令是用戶的創建與設置密碼等,雖然創建的用戶,但是還是不能登錄,必須授予權限。
演示登錄
# mysql -u mytest3 -p'my123123' ERROR 1045 (28000): Access denied for user 'mytest3'@'localhost' (using password: YES)
權限包括2個部分:
1)是否具有連接到mysql的權限;
2)是否具有對所執行動作、操作對象的權限;
對操作對象的權限分爲:全局層級、數據庫層級、表層級、列層級等
使用grant進行授權,使用revoke收回授權
grant 權限 on 權限層級 to 用戶名@主機 identified by '密碼';
1)權限可以單獨指定一些權限,如查詢、更新、刪除等,或者所有權限"all privileges";
2)權限層級可以設置爲全局(*.*)、數據庫級(mydbname.*)、表層級(mydbname.tablename)等;
3)用戶名可以是之前建好的,如果不存在會自動創建新用戶;
4)主機可以是本機('localhost'),可以是一個網段('192.168.1.%'),或者任意主機('%');
5)identified by 設置用戶訪問密碼,是可選的,如果沒有,將不需要密碼訪問。
1.授權mydbuser用戶在本機訪問mysql時,對mydbtest庫的所有表具有任意權限
mysql> grant all on mydbtest.* to mydbuser@'localhost' identified by 'my123'; Query OK, 0 rows affected (0.00 sec)
使用新用戶訪問
# mysql -u mydbuser -p'my123' Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 5.1.61 Source distribution Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
2.只爲mydbuser2在mydbtest數據庫中授予select、update、drop權限
mysql> grant select,update,drop on mydbtest.* to mydbuser2@'localhost' identified by 'my123'; Query OK, 0 rows affected (0.00 sec)
3.當權限不在需要的時候,使用revoke收回用戶權限,可以全部收回,也可部分收回
首先來查看mydbuser在mydbtest中的權限,在mysql庫中,有個db表,記錄着每個數據庫及對應用戶的權限
mysql> select * from mysql.db where user='mydbuser'\G *************************** 1. row *************************** Host: localhost Db: mydbtest User: mydbuser Select_priv: Y Insert_priv: Y Update_priv: Y Delete_priv: Y Create_priv: Y Drop_priv: Y Grant_priv: N References_priv: Y Index_priv: Y Alter_priv: Y Create_tmp_table_priv: Y Lock_tables_priv: Y Create_view_priv: Y Show_view_priv: Y Create_routine_priv: Y Alter_routine_priv: Y Execute_priv: Y Event_priv: Y Trigger_priv: Y 1 row in set (0.00 sec)
4.收回mydbuser對mydbtest庫的delete、drop、index操作權限。
mysql> revoke delete,drop,index on mydbtest.* from mydbuser@'localhost'; Query OK, 0 rows affected (0.00 sec)
revoke與grant使用方法類似,只需要將to改成from即可。
5.收回mydbuser對mydbtest庫所有的操作權限
mysql> revoke all on mydbtest.* from mydbuser@localhost; Query OK, 0 rows affected (0.00 sec)