1. 程式人生 > 實用技巧 >mysql grant 使用者許可權

mysql grant 使用者許可權

使用者新增授權

mysql> grant all privileges on *.* to 'niuben'@'%' identified by '123456' with grant option;
all privileges表示將所有許可權授予給使用者。也可指定具體的許可權,如:SELECT、CREATEDROPon用於指定許可權授予的物件和級別,表示這些許可權對哪些資料庫和表生效,格式:資料庫名.表名,這裡寫“*”表示所有資料庫,所有表。如果我要指定將許可權應用到test庫的user表中,
可以這麼寫:test.user to將許可權授予哪個使用者。格式:”使用者名稱”@”登入IP或域名”
%表示沒有限制,在任何主機都可以登入。比如:”niuben”@”192.168.0.%”,表示niuben這個使用者
只能在192.168.0 IP段登入 identified by指定使用者的登入密碼 with grant option:表示允許使用者將自己的許可權授權給其它使用者

使用GRANT給使用者新增許可權,許可權會自動疊加,不會覆蓋之前授予的許可權,比如你先給使用者新增一個SELECT許可權,後來又給使用者添加了一個INSERT許可權,那麼該使用者就同時擁有了SELECT和INSERT許可權。

GRANT 語法格式:

GRANT
<
許可權型別> [ ( <列名> ) ] [ , <許可權型別> [ ( <列名> ) ] ] ON <物件> <許可權級別> TO <使用者> 其中<使用者>的格式: <使用者名稱> [ IDENTIFIED ] BY [ PASSWORD ] <口令> [ WITH GRANT OPTION] | MAX_QUERIES_PER_HOUR <次數> | MAX_UPDATES_PER_HOUR <次數> | MAX_CONNECTIONS_PER_HOUR <
次數> | MAX_USER_CONNECTIONS <次數>

語法說明如下:

1) <列名>

可選項。用於指定許可權要授予給表中哪些具體的列。

2) ON 子句

用於指定許可權授予的物件和級別,如在 ON 關鍵字後面給出要授予許可權的資料庫名或表名等。

3) <許可權級別>

用於指定許可權的級別。可以授予的許可權有如下幾組:

  • 列許可權,和表中的一個具體列相關。例如,可以使用 UPDATE 語句更新表 students 中 student_name 列的值的許可權。
  • 表許可權,和一個具體表中的所有資料相關。例如,可以使用 SELECT 語句查詢表 students 的所有資料的許可權。
  • 資料庫許可權,和一個具體的資料庫中的所有表相關。例如,可以在已有的資料庫 mytest 中建立新表的許可權。
  • 使用者許可權,和 MySQL 中所有的資料庫相關。例如,可以刪除已有的資料庫或者建立一個新的資料庫的許可權。


對應地,在 GRANT 語句中可用於指定許可權級別的值有以下幾類格式:

  • *:表示當前資料庫中的所有表。
  • *.*:表示所有資料庫中的所有表。
  • db_name.*:表示某個資料庫中的所有表,db_name 指定資料庫名。
  • db_name.tbl_name:表示某個資料庫中的某個表或檢視,db_name 指定資料庫名,tbl_name 指定表名或檢視名。
  • tbl_name:表示某個表或檢視,tbl_name 指定表名或檢視名。
  • db_name.routine_name:表示某個資料庫中的某個儲存過程或函式,routine_name 指定儲存過程名或函式名。
  • TO 子句:用來設定使用者口令,以及指定被賦予許可權的使用者 user。若在 TO 子句中給系統中存在的使用者指定口令,則新密碼會將原密碼覆蓋;如果許可權被授予給一個不存在的使用者,MySQL 會自動執行一條 CREATE USER 語句來建立這個使用者,但同時必須為該使用者指定口令。


GRANT語句中的<許可權型別>的使用說明如下:

1) 授予資料庫許可權時,<許可權型別>可以指定為以下值:

  • SELECT:表示授予使用者可以使用 SELECT 語句訪問特定資料庫中所有表和檢視的許可權。
  • INSERT:表示授予使用者可以使用 INSERT 語句向特定資料庫中所有表新增資料行的許可權。
  • DELETE:表示授予使用者可以使用 DELETE 語句刪除特定數據庫中所有表的資料行的許可權。
  • UPDATE:表示授予使用者可以使用 UPDATE 語句更新特定資料庫中所有資料表的值的許可權。
  • REFERENCES:表示授予使用者可以建立指向特定的資料庫中的表外來鍵的許可權。
  • CREATE:表示授權使用者可以使用 CREATE TABLE 語句在特定資料庫中建立新表的許可權。
  • ALTER:表示授予使用者可以使用 ALTER TABLE 語句修改特定資料庫中所有資料表的許可權。
  • SHOW VIEW:表示授予使用者可以檢視特定資料庫中已有檢視的檢視定義的許可權。
  • CREATE ROUTINE:表示授予使用者可以為特定的資料庫建立儲存過程和儲存函式的許可權。
  • ALTER ROUTINE:表示授予使用者可以更新和刪除資料庫中已有的儲存過程和儲存函式的許可權。
  • INDEX:表示授予使用者可以在特定資料庫中的所有資料表上定義和刪除索引的許可權。
  • DROP:表示授予使用者可以除特定資料庫中所有表和檢視的許可權。
  • CREATE TEMPORARY TABLES:表示授予使用者可以在特定資料庫中建立臨時表的許可權。
  • CREATE VIEW:表示授予使用者可以在特定資料庫中建立新的檢視的許可權。
  • EXECUTE ROUTINE:表示授予使用者可以呼叫特定資料庫的儲存過程和儲存函式的許可權。
  • LOCK TABLES:表示授予使用者可以鎖定特定資料庫的已有資料表的許可權。
  • ALL 或 ALL PRIVILEGES:表示以上所有許可權。

2) 授予表許可權時,<許可權型別>可以指定為以下值:

  • SELECT:授予使用者可以使用 SELECT 語句進行訪問特定表的許可權。
  • INSERT:授予使用者可以使用 INSERT 語句向一個特定表中新增資料行的許可權。
  • DELETE:授予使用者可以使用 DELETE 語句從一個特定表中刪除資料行的許可權。
  • DROP:授予使用者可以刪除資料表的許可權。
  • UPDATE:授予使用者可以使用 UPDATE 語句更新特定資料表的許可權。
  • ALTER:授予使用者可以使用 ALTER TABLE 語句修改資料表的許可權。
  • REFERENCES:授予使用者可以建立一個外來鍵來參照特定資料表的許可權。
  • CREATE:授予使用者可以使用特定的名字建立一個數據表的許可權。
  • INDEX:授予使用者可以在表上定義索引的許可權。
  • ALL 或 ALL PRIVILEGES:所有的許可權名。

3) 授予列許可權時,<許可權型別>的值只能指定為 SELECT、INSERT 和 UPDATE,同時許可權的後面需要加上列名列表 column-list。

4) 最有效率的許可權是使用者許可權。

授予使用者許可權時,<許可權型別>除了可以指定為授予資料庫許可權時的所有值之外,還可以是下面這些值:

    • CREATE USER:表示授予使用者可以建立和刪除新使用者的許可權。
    • SHOW DATABASES:表示授予使用者可以使用 SHOW DATABASES 語句檢視所有已有的資料庫的定義的許可權。

grant 許可權,分別可以作用在多個層次上。

1. grant 作用在整個 MySQL 伺服器上:

grant select on *.* to dba@localhost; -- dba 可以查詢 MySQL 中所有資料庫中的表。
grant all on *.* to dba@localhost; -- dba 可以管理 MySQL 中的所有資料庫

2. grant 作用在單個數據庫上:

grant select on testdb.* to dba@localhost; -- dba 可以查詢 testdb 中的表。

3. grant 作用在單個數據表上:

grant select, insert, update, delete on testdb.orders to dba@localhost;

這裡在給一個使用者授權多張表時,可以多次執行以上語句。例如:

grant select(user_id,username) on smp.users to mo_user@'%' identified by '123345';
grant select on smp.mo_sms to mo_user@'%' identified by '123345';

4. grant 作用在表中的列上:

grant select(id, se, rank) on testdb.apache_log to dba@localhost;

5. grant 作用在儲存過程、函式上:

grant execute on procedure testdb.pr_add to 'dba'@'localhost'
grant execute on function testdb.fn_add to 'dba'@'localhost'

重新整理許可權

對使用者做了許可權變更之後,一定記得重新載入一下許可權,將許可權資訊從記憶體中寫入資料庫。

mysql> flush privileges;

檢視使用者許可權

檢視當前使用者(自己)許可權:

mysql> show grants;

檢視其他 MySQL 使用者(dba是使用者名稱)許可權:

mysql> show grants for dba@localhost;

刪除撤銷許可權

刪除 niuben 這個使用者的 create 許可權,該使用者將不能建立資料庫和表。

revoke 跟 grant 的語法差不多,只需要把關鍵字 to 換成 from 即可:

mysql> revoke create on *.* from 'niuben@localhost';

刪除使用者

刪除 niuben 這個使用者。

mysql> drop user 'niuben'@'localhost';

使用者重新命名

修改使用者名稱 niuben1 為 niuben2

mysql> rename user 'niuben1'@'%' to 'niuben2'@'%';

Linux下修改Mysql密碼的三種方式