MYSQL  網頁設計 技巧

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

  • 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
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 dettori 的頭像
    dettori

    Web Design

    dettori 發表在 痞客邦 留言(0) 人氣()