MySQL用戶管理



MySQL的用戶管理


用戶賬號格式

username@hostname


查看幫助

MySQL > help contents;
MySQL > help account management;


wKiom1hV1w7hVEq3AAAlPfMOAJw298.png-wh_50


wKioL1hV1z6jGNelAAAdlewVFPw185.png-wh_50


賬號管理命令(此時權限很有限)

create user
drop user
rename user
set password


權限管理命令:

grant
revoke


查看創建用戶命令幫助

MySQL> help create user;
  CREATE USER username@hostname
    [
        IDENTIFIED BY [PASSWORD] 'password'
    ]

主機也可以使用通配符:testuser@'172.16.100.1__'(172.16.100.100-172.16.100.199) 
                                       (兩個下劃線)
還可以使用%:testuser@'172.16.%.%'                                      
查看用戶能夠使用的權限:show grants for username@'hostname'


wKiom1hV2M2CeWcYAAA0G0maiyM571.png-wh_50


wKioL1hV2M7SRYKuAAGqb2JmUqA872.png-wh_50


wKioL1hV2M6QFXuvAAAoW6lEeww615.png-wh_50


重命名

MySQL > help rename user
  RENAME USER old_user TO new_user
    [, old_user TO new_user] ...
  mysql > RENAME USER 'jeffrey'@'localhost' TO 'jeff'@'127.0.0.1';


爲用戶設置密碼

MySQL > help set password;
  SET PASSWORD [FOR user] =
    {
        PASSWORD('cleartext password')
    }
MySQL > set password for testuser@'172.16.%.%' = password('123456'); 調用password函數


MySQL的權限類型:

       庫級別

       表級別

       字段級別

       管理類

       程序類(存儲過程,觸發器,存儲函數,時間調度器)


    管理類權限

         create temporary tables 臨時表

         create user

         file 允許用戶讀或者寫某些文件

         lock tables 添加顯式鎖

         process:查看用戶的線程

         reload:相當於執行flush和reset

         replication client 查詢有哪些複製客戶端

         replication slave 賦予用戶複製權限

         show databases

         shutdown

         super


    數據庫訪問權限(庫級別和表級別)

         alter:modify tables with alter tables

         alter routine 修改存儲歷程

         create

         create routine 存儲過程,存儲函數

         create view

         delete

         drop

         execute 是否能夠執行存儲過程,或存儲函數

         grant option 將自己的權限複製給別的用戶

         index 索引

         show view


    數據操作類權限(表級別)

        select

        insert

        update

        delete


    字段級別

       select(col1,....)

       update(col1,....)

       insert(col1,....)

    

   所有權限

       ALL [privileges]


查看幫助

MySQL > help GRANT
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    TO user_specification [, user_specification] ...
    [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
    [WITH with_option ...]
object_type:(默認爲表)
    TABLE
  | FUNCTION
  | PROCEDURE
priv_level:
    *
  | *.*
  | db_name.*
  | db_name.tbl_name
  | tbl_name
  | db_name.routine_name
user_specification:
    user
    [
        IDENTIFIED BY [PASSWORD] 'password'
      | IDENTIFIED WITH auth_plugin [AS 'auth_string']
    ] //可以實現授權並添加密碼
ssl_option:
    SSL
    ...
with_option:
    GRANT OPTION 轉贈給別人
  | MAX_QUERIES_PER_HOUR count 每小時允許執行的最大查詢次數
  | MAX_UPDATES_PER_HOUR count 每小時允許執行的最大更新次數
  | MAX_CONNECTIONS_PER_HOUR count 每小時允許執行的最大連接次數
  | MAX_USER_CONNECTIONS count 使用同一個賬號可以同時連接的次數


實例

給testuser用戶授權
MySQL > grant create on testdb.* to testuser@'192.168.139.1__';


此時testuser只能創建testdb庫


wKiom1hV2rHwU59BAAAYyfMaH5M457.png-wh_50


查看自己的權限
MySQL > show grants for testuser@'192.168.139.1__';


wKioL1hV2vuhKIFeAAIGDH35G9k426.png-wh_50


wKiom1hV2vuxavQyAAAYvUxIztk712.png-wh_50


此時可以在該數據庫下創建表,但是由於沒有select和drop權限,

所以不能查看錶數據及結構,不能刪除表


給testuser用戶刪除表的權限
MySQL > grant drop  on testdb.* to testuser@'192.168.139.1__';

查看權限
MySQL > show grants for testuser@'192.168.139.1__';


wKiom1hV24myxeMQAAEvZnqSJHs308.png-wh_50


給testuser用戶增、刪、查、改權限
MySQL > grant select,insert,update,delete  on testdb.* to testuser@'192.168.139.1__';

查看權限
MySQL > show grants for testuser@'192.168.139.1__';


wKioL1hV272BC7b7AAFDPo3axW0675.png-wh_50


注意:要想創建庫應該對所有表都有權限



收回授權

MySQL > help REVOKE
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    FROM user [, user] ...
    REVOKE ALL PRIVILEGES, GRANT OPTION
    FROM user [, user] ...
    REVOKE PROXY ON user
    FROM user [, user] ...


例子:

MySQL > revoke insert,select on testdb.* from testuser@'192.168.139.1__';

查看權限
MySQL > show grants for testuser@'192.168.139.1__';

  

wKioL1hV3CuSEGbGAAFj5gP_7-s413.png-wh_50



幾個跟用戶授權相關的表:(在mysql庫中)

db:庫級別的權限
host:主機級別權限,已廢棄
tables_priv:表級別權限
columns_priv:列級別的權限
procs_priv:存儲過程和存儲函數相關的權限
proxies_priv:代理用戶權限·


MySQL的每一次操作幾乎都要涉及權限管理檢查,所以把授權表載入內存中(爲了提升速度)




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章