How to use trigger forbidden user modify table

Checking table:
create table test_t
(
user char(16),
fullname char(50),
add_date date
)
ENGINE=InnoDB DEFAULT CHARSET=latin1;

insert into test_t
values ('u1','u1',NOW());
insert into test_t
values ('u2','u2',NOW());



TEST:
Below is my test result in mysql server. I create a table test_trigger to test.

Authentic  user:
mysql> select * from allow_user;
+--------+------------+------------+
| user   | fullname   | add_date   |
+--------+------------+------------+
| u1     | u1         | 2014-01-05 |
| u2     | u2         | 2014-01-05 |
+--------+------------+------------+
3 rows in set (0.00 sec)


Table script:
create table test_trigger
(
a int(4),
b char(10)
)
ENGINE=InnoDB DEFAULT CHARSET=latin1;

Trigger script:

delimiter ;;
create trigger tr_test_trigger before insert on test_trigger  for each row 
begin
if not exists (select 1 from test_t where user=SUBSTRING_INDEX(user(), '@', 1) ) then
set  @msg = (select concat("DATA change is forbidden. Please contact ",group_concat(fullname separator ','))  from test_t);
SIGNAL SQLSTATE '02000' SET MESSAGE_TEXT = @msg;
end if ;
end; 
;;
delimiter ;

Test result:
1. Using login root who have the right of insert data to test_trigger, the insert action is stopped by an user-defined error.
mysql> select user();
+----------------------+
| user()               |
+----------------------+
| root@192.168.1.8     |
+----------------------+
1 row in set (0.00 sec)

mysql> insert into test_trigger values(1,'a');
ERROR 1643 (02000): DATA change is forbidden. Please contact u1,u2
mysql> select * from test_trigger;
Empty set (0.00 sec)


2. Using an authentic account 'u1' which exists in table 'test_t', the action is passed:
mysql> select user();
+----------------------+
| user()               |
+----------------------+
| u1@192.168.1.8       |
+----------------------+
1 row in set (0.00 sec)

mysql> insert into test_trigger values(1,'a');
Query OK, 1 row affected (0.01 sec)

mysql> select * from test_trigger;
+------+------+
| a    | b    |
+------+------+
|    1 | a    |
+------+------+
1 row in set (0.00 sec)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26735168/viewspace-1067807/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26735168/viewspace-1067807/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值