某天有人问了我一个有关 MySQL PROXY 用户该如何使用的问题。
原问题是这样的:MySQL 版本从 5.5 升级到 8.0 后,proxy 用户怎么无法使用了?我之前是按照你博客上写的方法使用的,但是在升级后,安装插件提示如下错误:
这个咋回事?
我给了一个大家都很讨厌的答案: 去看 MySQL8.0 官方手册吧。
auth_test_plugin.so 是 MySQL 5.5 的插件,仅限于测试环境,不推荐线上使用,仅限功能演示。之后的一系列大版本安装包里都不包含这个插件,所以使用方法有些差异。
我在下面示例中使用插件 mysql_native_password ,这个插件自带 proxy 用户功能,所以需要在配置文件里开启对应的开关,并重启 MySQL 实例:(如果使用 sha256_password , 应该把参数 sha256_password_proxy_users=ON 也加到配置文件里。)
使用 proxy 用户功能之前,需要安装 mysql_no_login 插件,阻止隐藏在 proxy 用户下的真实用户登录 MySQL 。
创建一个 proxy 用户 ytt_fake ,使用认证插件 mysql_native_password :
使用 Proxy 用户登录 MySQL :
确认下变量 proxy_user 的值是不是 ytt_fake :
使用 proxy 用户登录后,查看当前登录用户信息:用户实际上是 ytt_real 。
确认下权限:具有真实用户的所有权限。
用 proxy 用户创建表、插入记录、查询、销毁表:
由于真实用户 ytt_real 使用认证插件 mysql_no_login ,MySQL 不允许此用户登录:
<delete id="deleteUser" parameterType="list">delete from user where id in
<foreach collection="list" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<select id="findUserBySex" resultType="user">
select * from user where name in
<foreach collection="roleNoList" item="name" index="index" open="(" separator="," close=")">
#{roleNo}
</foreach>
</select>
<insert id="addUser" parameterType="user" >
insert into user(name,id,code) values
<foreach collection="list" item="item" separator=",">
(#{item.name},#{item.id},#{item.code})
</foreach>
</insert>
<update id="updateUser" parameterType="user">
update user set a = #{fptm},b=#{csof} where c in
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</update>
前言mysql的语法相信对大家来说都不是难事,但是本文主要给分享了一些mysql复杂用法的相关内容,通过这篇文章相信大家会对mysql更深的了解一些,下面话不多说了,来一起看看详细的介绍吧
一对多数据显示成一行
GROUP_CONCAT(expr)
1、涉及的表关系:teacher表、teacher_subject_rel表(教师所能教的学科表)、subject表
2、业务场景:
需要拉取所有教师的编号(teacher_no)、学科名(subject_name)。
&nbsp
教师表(teacher)和学科(teacher_subject_rel)是一对多关系,
往往查询出现的是同一教师多条
数据。我们希望得到每个教师一条数据
学科拼接成一条
1、基本语法
group_concat(
[DISTINCT]
要连接的字段
[Order
BY
排序字段
ASC/DESC]
[Separator
'分隔符']
)
2、例子
SELECT
t.teacher_id
as
'教师id',
t.teacher_no
'教师编号',
(
SELECT
GROUP_CONCAT(s.subject_name)
FROM
teacher_subject_rel
tsr
LEFT
JOIN
`subject`
s
ON
tsr.subject_id
=
s.subject_id
WHERE
t.teacher_id
=
tsr.teacher_id
)
AS
'学科'
FROM
teacher
t
子查询、查询临时表、EXISTS
例子
SELECT
*
FROM
(
SELECT
o.id,
o.student_intention_id,
s.
NAME,
s.area_id,
a.area_name,
s.exam_year,
o.
STATUS,
CASE
o.
STATUS
WHEN
'1'
THEN
'待提交'
WHEN
'2'
THEN
'待指派'
WHEN
'3'
THEN
'已完成'
WHEN
'4'
THEN
'处理中'
END
statusName,
CASE
o.emergency_degree
WHEN
'1'
THEN
'正常'
WHEN
'2'
THEN
'紧急'
WHEN
'3'
THEN
'非常紧急'
END
emergencyDegreeName,
o.emergency_degree,
o.update_time,
(
SELECT
first_lesson_time
FROM
jx_strategy
WHERE
jx_lesson_plan_order_id
=
o.id
AND
STATUS
IN
(2,
7)
AND
first_lesson_time
>
now()
ORDER
BY
first_lesson_time
ASC
LIMIT
1
)
AS
first_time,
(
SELECT
deal_user_id
FROM
jx_strategy
WHERE
jx_lesson_plan_order_id
=
o.id
AND
STATUS
<>
7
AND
deal_user_id
<>
0
ORDER
BY
id
DESC
LIMIT
1
)
AS
deal_user_id
FROM
jx_lesson_plan_order
o
LEFT
JOIN
student
s
ON
s.student_intention_id
=
o.student_intention_id
LEFT
JOIN
area
a
ON
s.area_id
=
a.id
WHERE
o.
STATUS
<>
1
AND
s.phone
=
'18501665888'
AND
o.emergency_degree
=
1
AND
o.
STATUS
=
2
AND
s.exam_year
=
'2015'
AND
o.update_time
>=
'2018-08-14
20:28:55'
AND
o.update_time
<=
'2018-08-14
20:28:55'
)
AS
a
WHERE
1
=
1
AND
a.deal_user_id
=
145316
AND
a.first_time
>=
'2018-08-17
00:00:00'
AND
a.first_time
<=
'2018-08-30
00:00:00'
AND
EXISTS
(
SELECT
*
FROM
jx_strategy
js
WHERE
js.jx_lesson_plan_order_id
=
a.id
AND
js.
STATUS
IN
(2,
7)
AND
js.subject_id
IN
(2,
3)
)
ORDER
BY
a.update_time
DESC
LIMIT
0,
10
update
关联变量条件修改
1、涉及的表关系:
user_info表中的
id_number(身份z号)
teacher表中的birth字段、
关联关系usrer_id
=
teacher_id
2、业务场景:获取用户身份z上的出生日期将出生日期更新在birth字段
UPDATE
teacher
t
INNER
JOIN
(
SELECT
t.teacher_id,
t.birth,
u.id_number,
CONCAT(SUBSTRING(u.id_number,
7,
4),
'-',
SUBSTRING(u.id_number,
11,
2),
'-',
SUBSTRING(u.id_number,
13,
2))
as
birth1,
u.reg_date,
t.exit_time
from
teacher
t
INNER
JOIN
user_info
u
ON
u.user_id
=
t.teacher_id
)
info
on
info.teacher_id
=
t.teacher_id
SET
t.birth
=
info.birth1
WHERE
info.reg_date
>
'2018-08-20
00:00:00'
and
info.id_number
is
not
NULL
and
(info.birth
is
NULL
or
t.birth
=
'')
and
t.is_train
=
1
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
您可能感兴趣的文章:MySQL在关联复杂情况下所能做出的一些优化Mysql一些复杂的sql语句(查询与删除重复的行)深入mysql
"ON
DUPLICATE
KEY
UPDATE"
语法的分析MySQL
最基本的SQL语法/语句MySQL与Oracle的语法区别详细对比浅析Mysql
Join语法以及性能优化MySQL
ALTER语法的运用方法MySQL
prepare语句的SQL语法MySQL进阶SELECT语法篇MySQL
SQL
语法参考
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)