【mysql系】创建跨逻辑库视图

文章描述了一种在MySQL中处理跨库查询的场景,通过创建视图并授予不同数据库的权限给特定用户,以实现逻辑库之间的关联查询,同时解决了因密码策略导致的授权问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求

有个这样一个需求,A库和B库是逻辑库,在同一个数据库实例下面,A库有个表1,B库有个表2,

另外A库和B库使用的是不同的用户名授权连接的

现在想通过A库表1和B库表2通过某一列的字段值关联查询,做个报表查询

当然如果很方便的方式,直接select查询的时候使用逻辑库.表名的方式。我这里采用了另外一种方式来做那就是视图(因为B库的某些表,某些列的数据不想返回)

实践

准备环境数据

首先这里说明下,下面执行语句都是基于5.7.35的mysql版本

为了实现这种需求,我这里本地做个测试,首先准备两个测试库,两个用户账号

--test数据库
create user 'test'@'%' identified   by 'Aa@12345678';

--test1数据库
create user 'test1'@'%' identified   by 'Aa@12345678';

 创建数据库就很简单了,用自己客户端工具创建,这里不在演示,

用root用户连接针对对应的用户访问对应的数据库


GRANT ALL PRIVILEGES ON test1.*   TO 'test1'@'%' IDENTIFIED BY 'Aa@12345678' WITH GRANT OPTION;


GRANT ALL PRIVILEGES ON test.*   TO 'test'@'%' IDENTIFIED BY 'Aa@12345678' WITH GRANT OPTION;

flush privileges;

授权错了,怎么办?

如果授权错误了,也可以设置回收命令执行这个

revoke all privileges   on test1.es_user   from 'test'@'%' ;


flush privileges;

如果结果执行报了这个错误,怎么处理?

分析看起来好像是密码策略的问题,这个错误提示是因为MySQL 5.7默认启用了密码策略插件,密码必须符合一定的复杂度要求才能被使用。

我们使用下面命令查看下

show variables like '%validate_password%'

解决办法

设置密码策略低点或者修改密码

 set global validate_password_policy=LOW;

再次执行

revoke all privileges   on  test1.es_user   from 'test'@'%' ;


flush privileges;

现在我们使用root用户执行下面的语句给test账号赋予授权test1库的es_user表的操作

GRANT ALL PRIVILEGES ON test1.es_user TO 'test'@'%' IDENTIFIED BY 'Aa@12345678' WITH GRANT OPTION;


flush privileges;

 很不行,没有执行成功,看错误是拒绝授权,我们看下root用户权限

use mysql;
 
select * from user where user='root';

 我们修改下这个字段值为Y

update user set Grant_priv='Y' where user='root'

flush privileges;

关闭会话窗口,重新打开,在执行这个命令,看到已经执行成功了

GRANT ALL PRIVILEGES ON test1.es_user TO 'test'@'%' IDENTIFIED BY 'Aa@12345678' WITH GRANT OPTION;

flush privileges;

创建视图语句

讲清楚点,我们这里是使用test用户在它的数据库来创建视图哦,因为它现在已经有test1库es_user的表权限了,要不然我们上面在干嘛

创建视图

CREATE VIEW vm_user AS ( SELECT * FROM test1.es_user );

使用视图来验证查询

SELECT
        eu.* 
FROM
        es_user eu
        LEFT JOIN vm_user  vu
        ON  eu.ESUS_ID = vu.ESUS_ID

 看到已经查询出来对应的结果了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值