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密碼的三種方式

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM