1. 程式人生 > >mysql訪問許可權GRANT ALL PRIVILEGES ON,訪問許可權表

mysql訪問許可權GRANT ALL PRIVILEGES ON,訪問許可權表

 

 

 

 


開啟遠端連線:
2, 修改 Mysql-Server 使用者配置
mysql> USE mysql; -- 切換到 mysql DB
Database changed
mysql> SELECT User, Password, Host FROM user; -- 檢視現有使用者,密碼及允許連線的主機
+------+----------+-----------+
| User | Password | Host      |
+------+----------+-----------+
| root |          | localhost |
+------+----------+-----------+
1 row in set (0.00 sec)
mysql> -- 只有一個預設的 root 使用者, 密碼為空, 只允許 localhost 連線
12
mysql> -- 下面我們另外新增一個新的 root 使用者, 密碼為空, 只允許 192.168.1.100 連線
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.100' IDENTIFIED BY '' WITH GRANT OPTION;
mysql> -- @'192.168.1.100'可以替換為@‘%’就可任意ip訪問,當然我們也可以直接用 UPDATE 更新 root 使用者 Host, 但不推薦, SQL如下:
mysql> -- UPDATE user SET Host='192.168.1.100' WHERE User='root' AND Host='localhost' LIMIT 1;
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

 

 

 



如何遠端訪問MySQL資料庫設定許可權方法總結,討論訪問單個數據庫,全部資料庫,指定使用者訪問,設定訪問密碼,指定訪問主機。
1,設定訪問單個數據庫許可權
mysql>grant all privileges on test.* to 'root'@'%';
說明:設定使用者名稱為root,密碼為空,可訪問資料庫test

2,設定訪問全部資料庫許可權
mysql>grant all privileges on *.* to 'root'@'%';
說明:設定使用者名稱為root,密碼為空,可訪問所有資料庫*

3,設定指定使用者名稱訪問許可權
mysql>grant all privileges on *.* to 'liuhui'@'%';
說明:設定指定使用者名稱為liuhui,密碼為空,可訪問所有資料庫*

4,設定密碼訪問許可權
mysql>grant all privileges on *.* to 'liuhui'@'%' IDENTIFIED BY 'liuhui';
說明:設定指定使用者名稱為liuhui,密碼為liuhui,可訪問所有資料庫*

5,設定指定可訪問主機許可權
mysql>grant all privileges on *.* to 'liuhui'@'10.2.1.11';
說明:設定指定使用者名稱為liuhui,可訪問所有資料庫*,只有10.2.1.11這臺機器有許可權訪問
還可以設定指定訪問某個資料庫下的某個資料表,請繼續關注MySQL基礎知識系列。

 

使用root賬戶進入mysql
create user 'test'@'localhost' indentified by '123456';
grant all privileges on *.* to 'test'@'localhost' identified by '123456';

grant all privileges on *.* to 'test'@'%' identified by '123456';   #在其它任意臺電腦上訪問

flush privileges;

 

 

 

 

 

 

 


/* 使用者和許可權管理 */ ------------------
使用者資訊表:mysql.user
-- 重新整理許可權
flush privileges
-- 增加使用者
create user 使用者名稱 identified by [password] 密碼(字串)
- 必須擁有mysql資料庫的全域性create user許可權,或擁有insert許可權。
- 只能建立使用者,不能賦予許可權。
- 使用者名稱,注意引號:如 'user_name'@'192.168.1.1'
- 密碼也需引號,純數字密碼也要加引號
- 要在純文字中指定密碼,需忽略password關鍵詞。要把密碼指定為由password()函式返回的混編值,需包含關鍵字password
-- 重新命名使用者
rename user old_user to new_user
-- 設定密碼
set password = password('密碼') -- 為當前使用者設定密碼
set password for 使用者名稱 = password('密碼') -- 為指定使用者設定密碼
-- 刪除使用者
drop user 使用者名稱
-- 分配許可權/新增使用者
grant 許可權列表 on 表名 to 使用者名稱 [identified by [password] 'password']
- all privileges 表示所有許可權
- *.* 表示所有庫的所有表
- 庫名.表名 表示某庫下面的某表
-- 檢視許可權
show grants for 使用者名稱
-- 檢視當前使用者許可權
show grants; 或 show grants for current_user; 或 show grants for current_user();
-- 撤消許可權
revoke 許可權列表 on 表名 from 使用者名稱
revoke all privileges, grant option from 使用者名稱 -- 撤銷所有許可權
-- 許可權層級
-- 要使用grant或revoke,您必須擁有grant option許可權,並且您必須用於您正在授予或撤銷的許可權。
全域性層級:全域性許可權適用於一個給定伺服器中的所有資料庫,mysql.user
grant all on *.*和 revoke all on *.*只授予和撤銷全域性許可權。
資料庫層級:資料庫許可權適用於一個給定資料庫中的所有目標,mysql.db, mysql.host
grant all on db_name.*和revoke all on db_name.*只授予和撤銷資料庫許可權。
表層級:表許可權適用於一個給定表中的所有列,mysql.talbes_priv
grant all on db_name.tbl_name和revoke all on db_name.tbl_name只授予和撤銷表許可權。
列層級:列許可權適用於一個給定表中的單一列,mysql.columns_priv
當使用revoke時,您必須指定與被授權列相同的列。
-- 許可權列表
all [privileges] -- 設定除grant option之外的所有簡單許可權
alter -- 允許使用alter table
alter routine -- 更改或取消已儲存的子程式
create -- 允許使用create table
create routine -- 建立已儲存的子程式
create temporary tables -- 允許使用create temporary table
create user -- 允許使用create user, drop user, rename user和revoke all privileges。
create view -- 允許使用create view
delete -- 允許使用delete
drop -- 允許使用drop table
execute -- 允許使用者執行已儲存的子程式
file -- 允許使用select...into outfile和load data infile
index -- 允許使用create index和drop index
insert -- 允許使用insert
lock tables -- 允許對您擁有select許可權的表使用lock tables
process -- 允許使用show full processlist
references -- 未被實施
reload -- 允許使用flush
replication client -- 允許使用者詢問從屬伺服器或主伺服器的地址
replication slave -- 用於複製型從屬伺服器(從主伺服器中讀取二進位制日誌事件)
select -- 允許使用select
show databases -- 顯示所有資料庫
show view -- 允許使用show create view
shutdown -- 允許使用mysqladmin shutdown
super -- 允許使用change master, kill, purge master logs和set global語句,mysqladmin debug命令;允許您連線(一次),即使已達到max_connections。
update -- 允許使用update
usage -- “無許可權”的同義詞
grant option -- 允許授予許可權

 

 

 

 

 

4.4. 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地址。
    
    [Note]  
    如果沒有給定主機部份,則預設為任意主機,也就是'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_UPDATES_PER_HOUR 0;       #刪除account帳號的資源限制
    
  •