2010年4月8日 星期四

MySQL帳號與權限設定

當有多人使用MySQL Server時,若都以MySQL管理者root身份登入,這是很危險的事情。root什麼事情都可以做,所以為了避免root密碼外洩造成資料庫資安風險提高,建議另外新增帳號,並賦予適當的存取權限。

--------------------------------------------------------------------------------
請以MySQL管理者root身份登入MySQL,你可以使用「grant on」指令新增使用者與權限的調整。當使用者不存在時會建立帳號,若存在則會變更權限,grant on指令基本設定如下:
grant 權限 on 資料庫.資料表 to 帳號@主機 identified by‘密碼’



權限可分為「使用者層級權限」與「管理者層級權限」共計14項。

使用者層級權限

create
建立資料庫及資料表的權限
delete
刪除資料庫及資料表的權限
execute
可執行程序的權限
indexa
新增或刪除索引的權限
insert
新增資料至資料表的權限
select
查詢資料表中資料的權限
update
更新資料表中資料的權限
usage
只可連線mysql伺服器但不具其它權限


管理者層級權限

all
所有權限
alter
調整資料表及欄位和索引的結構
drop
刪除資料庫及資料表的權限
file
讀取或刪除資料庫伺服器上的檔案的權限
process
查看級刪除mysql的系統行程的權限
reload
可使用flush敘述式
shutdown
關閉mysql伺服器



移除使用者帳號
若帳號已經無人使用,或者不需要某些權限,MySQL可以移除權限與刪除使用者嗎?若要移除權限,請以MySQL管理者root身份登入MySQL後,你可以使用「revoke on」指令移除使用者權限,基本指令設定如下:
revoke 權限 on 資料庫.資料表 from 帳號@主機

例如取消pcschool在資料庫裡delete權限:
revoke delete on *.* from pcschool@localhost;

上例是取消delete權限,如果是要取消所有權限:
revoke all privileges on *.* from pcschool@localhost;

你會發現這個帳號看不到剛剛所建立的資料庫,也無建立資料庫的權限。換句話說,這個帳號無法對資料庫做任何動作。



revoke on指令只能移除帳號權限,但無法將帳號刪除。若要將帳號刪除,請以MySQL管理者root身份登入MySQL後,先執行「use mysql」指令使用mysql資料庫,再輸入「delete from user where user='pcschool';」刪除使用者資料,並執行「flush privileges;」指令,讓系統重新整理,最後exit離開系統。



===================================================




1. 第一次設定 MySQL 的管理者密碼(MySQL 管理者預設無密碼):

語法:mysqladmin -u root -p舊密碼 password '新密碼' ('舊密碼'可先不寫,等下再互動示輸入)

# mysqladmin -u root -p password 'abcxyz' (將 MySQL root 密碼改為 abcxyz)





2. 新增使用者(本機使用者)

語法:grant 權限 on 資料庫(表) to 使用者名稱@主機名稱 identified by '使用者密碼'

例:將 MySQL 內所有的資料庫及資料表權限,都開放給 whitedog,且 whitedog 密碼為 IlovePU(注意:大小寫有別)。

mysql> grant all on *.* to whitedog@localhost identified by 'IlovePU';





3. 新增使用者(Foreign user)

3-1. 新增 whitedog 使用者並指定密碼為 abcxyz,讓 whitedog 僅可從 192.168.1.100 連到此電腦的 MySQL,並操作任何 Database 及 Table。

mysql> grant all on *.* to whitedog@192.168.1.100 identified by 'abcxyz';



3-2. 新增 twocats 使用者並指定密碼為 abcxyz,讓 twocats 可從任何 IP 連到此電腦的 MySQL,並操作任何 Database 及 Table。

mysql> grant all on *.* to twocats@"%" identified by 'abcxyz';
Query OK, 0 rows affected (0.00 sec)





3-3.新增 lazycat 使用者並指定密碼為 sleeping,讓 lazycat 可從任何 IP 連到此電腦的 MySQL,並對 A 資料庫底下的所有資料表有 select, insert, update, delete, create, drop 之權限。

mysql> grant select,insert,update,delete,create,drop on A.* to lazycat@'%' identified by 'sleeping';

沒有留言:

張貼留言