程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MYSQL教程:MySQL用戶帳號管理

MYSQL教程:MySQL用戶帳號管理

編輯:關於MYSQL數據庫

MySQL用戶帳號管理主要用grant(授權)和revoke(撤權)兩個SQL指令來管理。這兩個指令實質是通過操作user(連接權限和全局權限)、db(數據庫級權限)、tables_priv(數據表級權限)、columns_priv(數據列級權限)四個權限表來分配權限的。host權限表不受這兩個指令影響。下面將會詳細介紹用戶權限管理的內容。

  • GRANT語法說明:

    GRANT privileges (columns)          #privileges表示授予的權限,columns表示作用的列(可選) 
          ON what                       #設置權限級別,全局級、數據庫級、數據表級和數據列級
          TO account                    #權限授予的用戶,用"user_name"@"host_name"這種用戶名、主機名格式
          IDENTIFIED BY 'passWord'      #設置用戶帳號密碼
          REQUIRE encryption requirements       #設置經由SSL連接帳號
          WITH grant or resource management options;   #設置帳號的管理和資源(連接服務器次數或查詢次數等)選項
    

    示例:

    mysql>grant all on db.* to 'test'@'localhost' identifIEd by 'test';
    上例運行後的效果是,test用戶只能通過‘test’密碼從本機訪問db數據庫
    
    MySQL>grant all on db.* to 'test'@'%' identifIEd by 'test';
    上例運行後的效果是,test用戶可通過‘test’密碼從任意計算機上訪問db數據庫。‘%’代表任意字符,‘_’代表一個任意字符。主機名部份還可以是IP地址。
    
        如果沒有給定主機部份,則默認為任意主機,也就是'test'和'test'@'%'是等價的。
  • Table 4.1. 訪問權限表

    權限 權限說明 CREATE TEMPORARY TABLES 創建臨時數據表 EXECUTE 執行存儲過程(暫不支持) FILE 操作系統文件 GRANT OPTION 可把本帳號的權限授予其它用戶 LOCK TABLES 鎖定指定數據表 PROCESS 查看運行著的線程信息 RELOAD 重新加載權限表或刷新日志及緩沖區 REPLICATION CLIENT 可查詢主/從服務器主機名 REPLICATION SLAVE 運行一個鏡像從服務器 SHOW DATABASES 可運行SHOW DATABASES指令 SHUTDOWN 關閉數據庫服務器 SUPER 可用kill終止線程以及進行超級用戶操作     ALTER 可修改表和索引的結構 CREATE 創建數據庫和數據表 DELETE 刪除數據表中的數據行 DROP 刪除數據表和數據行 INDEX 建立或刪除索引 INSERT 插入數據行 REFERENCES (暫時不支持) SELECT 查詢數據行 UPDATE 更新數據行     ALL 所有權限,但不包括GRANT。 USAGE 無權限權限
  • Table 4.2. 權限作用范圍(由ON子句設置)

    權限限定符 作用范圍 ON *.* 全局級權限,作用於所有數據庫 ON * 全局級權限,若未指定默認數據庫,其作用范圍是所有數據庫,否則,其作用范圍是當前數據庫 ON db_name.* 數據庫級權限,作用於指定數據庫裡的所有數據表 ON db_name.tbl_name 數據表級權限,作用於數據表裡的所有數據列 ON tbl_name 數據表級權限,作用於默認數據庫中指定的數據表裡的所有數據列
  • USAGE權限的用法:修改與權限無關的帳戶項,如:

    mysql>GRANT USAGE ON *.* TO account IDENTIFIED BY 'new_passWord';     #修改密碼
    mysql>GRANT USAGE ON *.* TO account REQUIRE SSL;                      #啟用SSL連接
    MySQL>GRANT USAGE ON *.* TO account WITH MAX_CONNECTIONS_PER_HOUR 10; #設置資源 
    
  • 擁有WITH GRANT OPTION權限的用戶可把自已所擁用的權限轉授給其他用戶,如:

    MySQL>GRANT ALL ON db.* TO 'test'@'%' IDENTIFIED BY 'passWord' WITH GRANT OPTION;
    這樣test用戶就有權把該權限授予其他用戶。
    
  • 限制資源使用,如:

    MySQL>GRANT ALL ON db.* TO account IDENTIFIED BY 'passWord' WITH MAX_CONNECTIONS_PER_HOUR 10 MAX_QUERIES_PER_HOUR 200 MAX_UPDATES_PER_HOUR 50;
    允許account用戶每小時最多連接20次服務器,每小時最多發出200條查詢命令(其中更新命令最多為50條)
    

    默認都是零值,即沒有限制。FLUSH USER_RESOURCES和FLUSH PRIVILEGES可對資源限制計數器清零。

  • REVOKE語法說明:

    MySQL>REVOKE privileges (columns) ON what FROM account;
    

    示例:

    MySQL>REVOKE SELECT ON db.* FROM 'test'@'localhost';
    刪除test帳號從本機查詢db數據庫的權限
    

    REVOKE可刪除權限,但不能刪除帳號,即使帳號已沒有任何權限。所以user數據表裡還會有該帳號的記錄,要徹底刪除帳號,需用DELETE命令刪除user數據表的記錄,如:

    % mysql -u root -p
    mysql>use mysql
    mysql>DELETE FROM user where User='test' and Host='localhost';
    MySQL fulsh privileges;
    

    REVOKE不能刪除REQUIRE和資源占用的配置。他們是要用GRANT來刪除的,如:

    GRANT USAGE ON *.* TO account REQUIRE NONE;      #刪除account帳號的SSL連接選項
    GRANT USAGE ON *.* TO account WITH MAX_CONNECTIONS_PER_HOUR 0 MAX_QUERIES_PER_HOUR 0 MAX
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved