1. 程式人生 > >mysql 開發進階篇系列 54 許可權與安全(賬號管理的各種許可權操作 下)

mysql 開發進階篇系列 54 許可權與安全(賬號管理的各種許可權操作 下)

1. 檢視許可權

-- 如果host值不是%, 就要加上host值,下面檢視bkpuser使用者許可權(6個許可權, 限本地連線)
SHOW GRANTS FOR bkpuser@localhost;

    

-- 如果host值是%, 就只要輸入使用者名稱,下面檢視z1使用者許可權(顯示所有許可權,不限ip連線)
SHOW GRANTS FOR z1;

    

 

2. 更改許可權

  可以進行許可權的新增和回收,使用grant來新增,使用revoke來回收。在前面52章節中也有介紹revoke的使用。 也可以直接對user,db,tables_priv,columns_prive 四個許可權表進行更新,這個在上篇中也有講到。

-- 例1:
CREATE USER 'z2'@'localhost' IDENTIFIED BY '123456';
-- 賦給[email protected]使用者在所有資料庫上的所有表的select 許可權
GRANT SELECT ON *.* TO 'z2'@'localhost' 
-- 檢視許可權
    SHOW GRANTS FOR z2@localhost;

    

--例2: 使用grant 來新增許可權,新增一個insert許可權,並和已有的select 許可權進行合併
GRANT SELECT,INSERT ON *.* TO 'z2
'@'localhost'

    

--例3: 使用revoke語句可以回收已經賦予的許可權
  -- 語法如下:
REVOKE
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    FROM user [, user] ...
-- 回收insert許可權,注意像usage登入許可權是不能回收的。因為revoke並不能刪除使用者
REVOKE INSERT ON *.* FROM  'z2'@'localhost
';

    
  更多revoke語法的瞭解,請參考官方文件:https://dev.mysql.com/doc/refman/5.7/en/revoke.html

 

3. 修改密碼

  修改密碼有四種方法, (1)是使用mysqladmin命令,(2)是執行set password,(3)是使用grant。(4)是修改 user表。

 --  (1)使用mysqladmin來修改,如果host是%,則-h 的host為空
 [[email protected] ~]# mysqladmin -u z1 -h ''  password '123456' -p
Enter password: 
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

  翻譯是:在命令列介面上使用密碼是不安全的。警告:由於密碼將以純文字形式傳送到伺服器,因此使用ssl連線以確保密碼安全。

  修改密碼後驗證:使用客戶端sqlyog來連線時,原有密碼654321連線錯誤,改成123456 新密碼連線成功。

-- (2) set password 
SET PASSWORD FOR 'z1'@'%'=PASSWORD('654321')
Warning Code : 1287
'SET PASSWORD FOR <user> = PASSWORD('<plaintext_password>')' is deprecated and will be removed in a future release. 
Please use SET PASSWORD FOR <user> = '<plaintext_password>' instead

  翻譯是:1 個警告,該方法已棄用,將在將來的版本中刪除

  修改密碼後驗證:使用客戶端sqlyog來連線時,密碼改成654321連線成功

-- (3) 使用grant來修改密碼
GRANT USAGE  ON *.* TO 'z1'@'%' IDENTIFIED BY '123456'
Using GRANT statement to modify existing user's properties other than privileges is deprecated and will be removed in future release.
Use ALTER USER statement for this operation.

  翻譯是:使用GRANT語句修改現有使用者的屬性而不是特權是不贊成的,並將在以後的版本中刪除。對這個操作使用ALTER USER語句。

  修改密碼後驗證:使用客戶端sqlyog來連線時,密碼改成123456連線成功。

--(4) 修改 user表
UPDATE mysql.`user` SET   authentication_string=PASSWORD('654321') WHERE `Host`='%' AND `User`='z1'
Warning Code : 1681
'PASSWORD' is deprecated and will be removed in a future release.
-- 記住要重新整理才生效。
FLUSH PRIVILEGES

  修改密碼後驗證:使用客戶端sqlyog來連線時,密碼改成654321連線成功。

  修改密碼最後總結:2,4 案例在未來版本中會去掉,3案例在未來版本中使用alter user。 以後推薦使用mysqladmin和alter user 來修改密碼。

 

4. 刪除賬號    

  要徹底刪除賬號,同樣也有兩種方法:(1) drop user命令 (2) 修改許可權表。

--例如刪除z2使用者
DROP USER  'z2'@'localhost'
-- 檢視許可權
SHOW GRANTS FOR z2@localhost;

  檢視許可權顯示:There is no such grant defined for user 'z2' on host 'localhost'。再檢視user表也沒有了z2使用者的資訊了。第二種方法刪除,直接刪除user表的記錄就行了,不在演示。