標籤:
MySQL中主要包括兩種使用者:root使用者和普通使用者,其中前者為超級管理員,擁有MySQL提供的一切許可權;而普通使用者則只能擁有建立使用者時賦予它的許可權。
MySQL的安全性機制主要包括許可權機制,使用者機制和對使用者進行許可權管理。
1.MySQL所提供的許可權
在系統資料庫mysql下儲存的都是許可權的表,其中最重要的表是mysql.user,mysql.db,mysql.host。
1.1 系統資料表mysql.user
該表有39個欄位,這些欄位大致可以分為4類,分別為使用者欄位,許可權欄位,安全欄位和資源控制欄位。
使用者欄位:使用者欄位包含三個欄位,主要用來判斷使用者是否能夠登入成功。
許可權欄位:user表中擁有一系列以"_priv"字串結尾的欄位,這些欄位決定了使用者權限。
安全欄位:安全欄位主要包括4個欄位,包含ssl欄位的欄位主要用來實現加密,包含x509的欄位主要用來標識使用者。
資源控制欄位:資源控制欄位主要包括4個欄位,主要用來控制資源,所有資源控制欄位的預設值為0,表示沒有任何限制。
1.2 系統資料表mysql.db和mysql.host
在系統資料庫mysql中,許可權除了表user外,還有表db和表host。這兩張表中都儲存了某個使用者對相關資料庫的許可權,結構大致相同。
2. MySQL所提供的使用者機制
為了資料庫的安全性和完整性,MySQL提供了一整套使用者管理機制。使用者管理機制包括登入和退出MySQL伺服器,建立使用者,刪除使用者,修改使用者密碼和為使用者賦許可權等內容。
2.1 登入和退出MySQL
2.1.1 登入MySQL:
串連MySQL伺服器的完整DOS命令如下所示:
mysql -h hostname | hostIp -p port -u username -p DataBaseName -e "SQL語句"
參數說明:
-h:用來指定所串連的MySQL伺服器的地址,可以用兩種方式來表示。參數hostname表示主機名稱,參數hostIp表示主機IP地址。
-p:用來指定所串連的MySQL伺服器的連接埠號碼。
-u:用來指定哪個使用者要串連MySQL伺服器。
-p:表示將提示輸入密碼。
DataBaseName:用來指定串連到MySQL伺服器後,登入到哪一個資料庫中。如果沒有指定,預設為系統資料庫mysql。
-e:用來指定所執行的SQL語句。
樣本:
通過使用者賬戶root登入到MySQL伺服器的資料庫cmpany中,命令如下:
mysql -h 127.0.0.1 -u root -p company
mysql -h 127.0.0.1 -u root -p company -e "SELECT * FROM t_dept";
如果想在具體串連中直接設定密碼,而不是在輸入密碼提示中進行設定,可以通過下面命令來實現,不過該密碼需要直接加在參數-p後面,中間絕對不能有空格。
mysql -h 127.0.0.1 -u root -p123456 company
2.1.2 退出MySQL
退出MySQL伺服器的DOS命令如下:
EXIT | QUIT
2.2 建立普通使用者帳號
2.2.1 執行CREATE USER語句來建立使用者賬戶
CREATE USER username[IDENTIFIED BY [PASSWORD] ‘password‘] [,username[IDENTIFIED BY [PASSWORD] ‘password‘]] …… [,username[IDENTIFIED BY [PASSWORD] ‘password‘]]
樣本如下:
CREATE USER ‘cjgong‘@‘localhost‘ IDENTIFIED BY ‘123456‘;
2.2.2 執行INSERT語句來建立使用者
當向系統資料表mysql.user中插入資料記錄時,一般只需插入Host,User,和Password這三個欄位即可。文法如下:
INSERT INTO USER(HOST,USER,PASSWORD) VALUES(‘hostname‘,‘username‘,PASSWORD(‘password‘);
2.2.3 執行GRANT語句來建立使用者
GRANT priv_type ON databasename.tablename TO username[IDENTIFIED BY [PASSWORD] ‘password‘] [,username[IDENTIFIED BY [PASSWORD] ‘password‘]] …… [,username[IDENTIFIED BY [PASSWORD] ‘password‘]]]
樣本如下:
GRANT SELECT ON company.t_dept TO ‘cjogng2‘@‘localhost‘ IDENTIFIED BY ‘123456‘;
該語句不僅可以建立使用者賬戶,還可以對其進行賦許可權。
2.3 利用擁有超級許可權使用者root修改賬戶密碼
2.3.1 通過mysqladmin命令修改root使用者密碼
mysqladmin -u username -p PASSWORD "new_password"
樣本如下:
mysqladmin -u root -p PASSWORD "123456"
2.3.2 通過SET命令修改root使用者密碼
SET PASSWORD=PASSWORD("new_password")
樣本如下:
SET PASSWORD=PASSWORD("123456")
2.3.3 更新系統資料表mysql.user資料記錄修改root使用者密碼
UPDATE USER SET PASSWORD=PASSWORD("new_password") WHERE USER="root" AND HOST="localhost";
樣本如下:
UPDATE USER SET PASSWORD=PASSWORD("123456") WHERE USER="root" AND HOST="localhost";
2.4 利用擁有超級許可權使用者root修改普通使用者賬戶密碼
2.4.1 通過GRANT命令修改普通使用者密碼
文法如下所示:
GRANT priv_type ON database.table TO user[IDENTIFIED BY [PASSWORD] ‘new_password’]
樣本如下:
GRANT SELECT,CREATE,DROP ON *.* TO ‘cjgong‘@‘localhost‘ IDENTIFIED BY ‘123456‘
2.4.2 通過SET命令修改普通使用者密碼
文法如下:
SET PASSWORD FOR ‘username‘@‘hostname‘=PASSWORD("new_password");
樣本如下:
SET PASSWORD FOR ‘cjgong‘@‘localhost‘=PASSWORD("123456");
2.4.3 更新系統資料表mysql.user資料記錄修改root使用者密碼
文法如下:
UPDATE USER SET PASSWORD=PASSWORD("new_password") WHERE USER="user" AND HOST="localhost";
樣本如下:
UPDATE USER SET PASSWORD=PASSWORD("new_password") WHERE USER="cjgong" AND HOST="localhost";
2.4.4 通過SET命令修改普通使用者密碼(2)
使用普通使用者登入MySQL伺服器,可以通過SET命令修改自己的秘密。
文法如下:
SET PASSWORD=PASSWORD("new_password");
樣本如下:
SET PASSWORD=PASSWORD("123456");
2.5 刪除普通使用者帳號
2.5.1 通過DROP USER語句刪除普通使用者
文法如下:
Drop user user1 [,user2]...
樣本如下:
DROP USER ‘cjgong‘@‘localhost‘;
2.5.2 刪除系統資料表mysql.user資料記錄實現刪除普通使用者帳號
DELETE FROM USER WHERE USER="user" AND HOST="localhost"
樣本如下:
DELETE FROM USER WHERE USER="cjgong" AND HOST="localhost"
3. 許可權管理
mysql的安全性機制