mysql 的許可權體系大致分為5個層級:
全域性層級
全域性許可權適用於乙個給定伺服器中的所有資料庫。這些許可權儲存在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時,您必須指定與被授權列相同的列。
子程式層級
create routine, alter routine, execute和grant許可權適用於已儲存的子程式。這些許可權可以被授予為全域性層級和資料庫層級。而且,除了create routine外,這些許可權可以被授予為子程式層級,並儲存在mysql.procs_priv表中。
這些許可權資訊儲存在下面的系統表中:
mysql.user
mysql.db
mysql.host
mysql.table_priv
mysql.column_priv
當使用者連線進來,mysqld會通過上面的這些表對使用者許可權進行驗證!
注意:當後續目標是乙個表、乙個已儲存的函式或乙個已儲存的過程時,object_type子句應被指定為table、function或procedure。當從舊版本的mysql公升級時,要使用本子句,您必須公升級您的授權表。請
我們可以用 create user 或 grant 建立使用者,後者還同時分配相關許可權。而 revoke 則用於刪除使用者許可權,drop user 刪除賬戶。
mysql 賦予使用者許可權命令語法為:
grant 許可權 on 資料庫物件 to 使用者;
grant 許可權 on 資料庫物件 to 使用者 identified by "密碼";
grant 許可權 on 資料庫物件 to 使用者@"ip" identified by "密碼"
grant 語法:
grant privileges (columns)
on what
to user identified by "password"
with grant option;
privileges 列表:
user 賬戶包括 "username" 和 "host" 兩部分 即是username@host,後者表示該使用者被允許從何地接入。user@'%' 表示使用者user可以從任何位址訪問本地的資料庫,預設可以省略。還可以是 "[email protected].%"、"user1@%.abc.com" 等。資料庫格式為 db.table,可以是 "test.*" 或 "*.*",前者表示 test 資料庫的所有表,後者表示所有資料庫的所有表。
子句 "with grant option" 表示該使用者可以為其他使用者分配許可權。使用grant 命令建立使用者或者進行授權之後,需要使用flush privileges重新整理mysql的系統許可權相關表,否則會出現拒絕訪問,或者重新啟動mysql伺服器,來使新設定生效。當然後者並不是一種好想法!
比如:一 grant普通資料使用者yangql402查詢、插入、更新、刪除 資料庫(test)中所有表資料的權利。
grant select, insert, update, delete on test.* to yangql402@'%';
二 grant資料庫開發人員(yangql402),建立表、索引、檢視、儲存過程、函式。。。等許可權。
grant建立、修改、刪除 mysql 資料表結構許可權。
grant create on test.* to yangql402@'10.250.7.225';
grant alter on test.* to yangql402@'10.250.7.225';
grant drop on test.* to yangql402@'10.250.7.225';
grant 操作 mysql 外來鍵許可權,官方文件上說未使用!
grant references on test.* to yangql402@'10.250.7.225';
grant 操作 mysql 臨時表許可權。
grant create temporary tables on test.* to yangql402@'10.250.7.225';
grant 操作 mysql 索引許可權。
grant index on test.* to yangql402@'10.250.7.225';
grant 操作 mysql 檢視、檢視檢視源** 許可權。
grant create view on test.* to yangql402@'10.250.7.225';
grant show view on test.* to yangql402@'10.250.7.225';
grant 操作 mysql 儲存過程、函式 許可權。
grant create routine on test.* to yangql402@'10.250.7.225';
grant alter routine on test.* to yangql402@'10.250.7.225';
grant execute on test.* to yangql402@'10.250.7.225';
三 grant 普通dba管理某個mysql資料庫(test)的許可權。
grant all privileges on test to dba@'localhost'
其中,關鍵字 「privileges」 可以省略。
四 grant 高階 dba 管理 mysql 中所有資料庫的許可權。
grant all on *.* to dba@'localhost'
五 mysql grant 許可權,分別可以作用在多個層次上。
a. grant 作用在整個 mysql 伺服器上:
grant select on *.* to dba@localhost; -- dba 可以查詢 mysql 中所有資料庫中的表。
grant all on *.* to dba@localhost; -- dba 可以管理 mysql 中的所有資料庫
b. grant 作用在單個資料庫上:
grant select on test.* to dba@localhost; -- dba 可以查詢 test 中的表。
c. grant 作用在單個資料表上:
grant select, insert, update, delete on test.yql8 to dba@localhost;
d. grant 作用在表中的列上:
grant select(id, se, rank) on test.yql8 to dba@localhost;
e. grant 作用在儲存過程、函式上:
grant execute on procedure test.yql8 to 'dba'@'localhost';
grant execute on function test.yql8 to 'dba'@'localhost';
六 檢視使用者許可權
檢視當前使用者自己的許可權:
show grants;
檢視其他 mysql 使用者許可權:
show grants for dba@localhost;
七 撤銷使用者許可權
使用revoke 命令來登出使用者的許可權,具體語法:
要撤銷所有許可權,需使用以下語法。此語法用於取消對於已命名的使用者的所有全域性層級、資料庫層級、表層級和列層級的許可權。
revoke all privileges, grant option from user [, user] ...
也可以指定具體的許可權比如:
revoke select from yangql402@"10.250.7.249";
注意:1 使用grant或revoke,操作者必須擁有grant option許可權,並且您必須用於您正在授予或撤銷的許可權。
2 使用revoke撤銷全部許可權,操作者必須擁有mysql資料庫的全域性create user許可權或update許可權。
八 刪除使用者:
drop user user;
其中user 賬戶包括 "username" 和 "host" 兩部分 即是username@host;如果建立的時候為 yangql@"10.250.7.225",則刪除的時候必須使用
drop user yangql@"10.250.7.225",否則會報錯!
mysql> drop user yangql402;
error 1396 (hy000): operation drop user failed for 'yangql402'@'10.250.7.225'
mysql> drop user yangql402@'10.250.7.225';
query ok, 0 rows affected (0.01 sec)
參考; mysql 官方文件
mysql許可權層級體系 MySQL許可權體系介紹
官方手冊 mysql是乙個多使用者的資料庫,mysql的使用者可以分為兩大類 1 超級管理員使用者 root 擁有全部許可權 2 普通使用者,由root建立,普通使用者只擁有root所分配的許可權 mysql 的許可權體系大致分為5個層級 一 全域性層級 全域性許可權適用於乙個給定伺服器中的所有資料...
mysql MYSQL遠端登入許可權設定
mysql預設關閉遠端登入許可權,如下操作允許使用者在任意地點登入 1.進入mysql,grant all privileges on to root identified by with grant option identified by後跟的是密碼,可設為空。2.flush privilege...
mysql許可權 列許可權 mysql 的許可權體系介紹
mysql 的許可權體系大致分為5個層級 全域性層級 全域性許可權適用於乙個給定伺服器中的所有資料庫。這些許可權儲存在mysql.user表中。grant all on 和revoke all on 只授予和撤銷全域性許可權。資料庫層級 資料庫許可權適用於乙個給定資料庫中的所有目標。這些許可權儲存在...