MySQL回收某一授權
建立測試表
create table t1(id int);
create table t2(id int);
create table t3(id int);
create table t4(msg varchar(100));
如果授權的時候圖省事兒,使用萬用字元授權.
grant select,insert,update,delete on mvbox.* to 'xx'@'localhost' identified by 'xx';
如果以後需要回收某一張表許可權的時候,就會比較麻煩.
mysql> show grants for xx@'localhost';
+-----------------------------------------------------------------------------------------------------------+
| Grants for xx@localhost |
+-----------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'xx'@'localhost' IDENTIFIED BY PASSWORD '*B30134364A2D14319904C2C807363CF2C81ABD5B' |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `mvbox`.* TO 'xx'@'localhost' |
+-----------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql> revoke insert on mvbox.t1 from xx@'localhost';
ERROR 1147 (42000): There is no such grant defined for user 'xx' on host 'localhost' on table 't1'
mysql>
因為授權是使用的萬用字元,回收也需要使用萬用字元.
如果需要回收t1表的insert許可權,可以使用如下的觸發器.
這時,以xx登入,insert t1表則報錯如下
mysql> insert into t1 values(10);
ERROR 1644 (HY000): xx You have no right to operate data!please connect DBAs
這裡需要注意的是current_user,user函式,在觸發器呼叫的時候,返回的內容是不一樣的.
刪除原來的觸發器,新建一個觸發器測試
使用xx使用者登入,執行如下命令
mysql> insert into t1 values(10);
Query OK, 1 row affected (0.00 sec)
mysql> select * from t4;
+------------------------------------------+
| msg |
+------------------------------------------+
| root@localhost,xx@localhost,xx@localhost |
+------------------------------------------+
1 row in set (0.00 sec)
可以發現在觸發器中,current_user()返回的是觸發器的定義者.
而user(),session_user()才是連線的使用者.
mysql>
create table t1(id int);
create table t2(id int);
create table t3(id int);
create table t4(msg varchar(100));
如果授權的時候圖省事兒,使用萬用字元授權.
grant select,insert,update,delete on mvbox.* to 'xx'@'localhost' identified by 'xx';
mysql> show grants for xx@'localhost';
+-----------------------------------------------------------------------------------------------------------+
| Grants for xx@localhost |
+-----------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'xx'@'localhost' IDENTIFIED BY PASSWORD '*B30134364A2D14319904C2C807363CF2C81ABD5B' |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `mvbox`.* TO 'xx'@'localhost' |
+-----------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql> revoke insert on mvbox.t1 from xx@'localhost';
ERROR 1147 (42000): There is no such grant defined for user 'xx' on host 'localhost' on table 't1'
mysql>
因為授權是使用的萬用字元,回收也需要使用萬用字元.
如果需要回收t1表的insert許可權,可以使用如下的觸發器.
-
delimiter //
-
CREATE TRIGGER tri1 BEFORE INSERT ON t1 FOR EACH ROW
-
BEGIN
-
DECLARE msg varchar(100);
-
DECLARE cu varchar(40);
-
set cu=(select substring_index((select user()),'@',1)) ;
-
IF cu='xx' THEN
-
set msg = concat(cu,"You have no right to operate data!please connect DBAs");
-
SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = msg;
-
END IF;
-
END;
-
//
- delimiter ;
mysql> insert into t1 values(10);
ERROR 1644 (HY000): xx You have no right to operate data!please connect DBAs
刪除原來的觸發器,新建一個觸發器測試
-
drop trigger tri1;
-
delimiter //
-
CREATE TRIGGER `tri2` BEFORE INSERT ON `t1` FOR EACH ROW
-
BEGIN
-
insert into t4 values(concat(current_user(),',',user(),',',session_user()));
-
END;
-
//
- delimiter ;
mysql> insert into t1 values(10);
Query OK, 1 row affected (0.00 sec)
mysql> select * from t4;
+------------------------------------------+
| msg |
+------------------------------------------+
| root@localhost,xx@localhost,xx@localhost |
+------------------------------------------+
1 row in set (0.00 sec)
可以發現在觸發器中,current_user()返回的是觸發器的定義者.
而user(),session_user()才是連線的使用者.
mysql>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1839760/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql操作命令梳理(4)-grant授權和revoke回收許可權MySql
- mysql 授權MySql
- 深入學習MySQL授權表MySql
- MySQL掃盲 -- 授權方式 (轉)MySql
- 淺談MySQL中授權(grant)和撤銷授權(revoke)用法詳解MySql
- mysql使用者建立與授權MySql
- MySQL建立使用者和授權MySql
- MySQL建立使用者與授權MySql
- MySql建立使用者及授權MySql
- 遠端連線mysql 授權方法教程MySql
- MySQL 授權時報錯 ERROR 1819MySqlError
- MySQL建立使用者授權訪問MySql
- MySQL 5.7 建立使用者並授權MySql
- 授權機制與授權模型研究模型
- mysql各個級別授權的總結MySql
- mysql8.0授權root遠端訪問MySql
- 認證授權方案之授權初識
- oracle顯式授權和隱式授權Oracle
- oracle授權Oracle
- 表列授權
- 認證授權方案之授權揭祕 (上篇)
- ASP.NET Core策略授權和 ABP 授權ASP.NET
- MySQL新增使用者使用者與授權MySql
- MySQL 5.6授權表的內容用途介紹MySql
- MySQL-授權使用者管理資料庫MySql資料庫
- MySQL 語句大全:建立、授權、查詢、修改等MySql
- 授權物件許可權後的授權者顯示問題物件
- 【認證與授權】Spring Security的授權流程Spring
- 前端微信授權前端
- Laravel授權策略Laravel
- 授權指令碼指令碼
- 對列授權
- 動態授權
- abp授權原理
- 認證授權
- OneinStack如何配置MySQL遠端連線並授權MySql
- springcloud Oauth2授權,四種授權型別SpringGCCloudOAuth型別
- 使用java操作ranger,hdfs ranger授權操作,hive ranger授權操作JavaRangerHive