在mysql中如何找到连接_如何在MySQL中找到当前用户连接的IP地址?

在你回答“use current_user()”之前,这对许多情况都有效,或者“使用user()”,这真的不起作用,请阅读以下内容……

我试图在表上创建一个视图,该视图限制用户对表中某些行的访问,由用户连接的IP地址控制.

我的第一次尝试看起来像这样:

create table testtable (

`RowID` bigint not null auto_increment,

`owner` varchar(64),

`key` varchar(64),

`val` varchar(64),

primary key (`RowID`)

);

create view testview (

`RowID`,

`owner`,

`key`,

`val`

) as select

`testtable`.`RowID` as `RowID`,

`testtable`.`owner` as `owner`,

`testtable`.`key` as `key`,

`testtable`.`val` as `val`

from testtable

where (testtable.owner = substring_index(current_user(), '@', -1));

create user 'testuser'@'192.168.3.30' identified by 'testpass';

grant select, insert, update, delete on testview to 'testuser'@'192.168.3.30';

现在的理论是,我应该能够从主机192.168.3.30以testuser身份登录,并执行类似select * from testview的操作,并获得适用于我的测试表的适当子集.

以上不起作用.它不起作用的原因是current_user()默认返回视图的定义器,导致没有数据,或者(更糟)错误的数据,这取决于定义者是谁.如果我希望current_user()返回调用用户,我需要使用SQL SECURITY INVOKER子句创建视图,该子句还将安全权限限制为调用用户的权限,从而破坏了代码的最初用途.

我很想使用user(),但不幸的是,几乎总是返回主机名/域而不是IP地址.

旁注,如果不清楚:在这种情况下,用PHP(或Ruby,或perl或其他)获取IP地址是没有用的.我正在建立一些数据库安全性,所以依赖客户端显然是不够的.我需要SQL中的IP地址.

对于好奇的寻找想法/参考/背景:

作为参考,我从here获得了这个漂亮的安全技巧的想法,但他们使用用户名而不是IP地址,这将使这更容易.在我的情况下,我正在尝试建立一个主机数据库,该主机数据库是从主机本身部分更新的.我不想为每个主机设置不同的用户,但我确实希望每个主机能够更新自己的记录(文件系统,风扇速度,温度等).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值