首页
友情链接
精美壁纸
给我留言
更多
关于我
Search
1
uniapp Click点击事件冲突解决
4,470 阅读
2
【插件】UNI APP 实现商米打印机功能支持T1,T2,V2机型
3,509 阅读
3
【测试可用】个人码免签支付系统源码/免签支付系统/微信支付平台
1,413 阅读
4
Java Validation参数校验注解使用
1,202 阅读
5
windows10下docker:给已存在的容器添加端口映射的方法
1,111 阅读
Java
Spring Boot
Spring Mvc
Java基础
进阶知识
前端
uniapp
小程序/公众号
JavaScript
HTML/CSS
Vue
Android
React
PHP
开源软件
商城
营销工具
开发工具
视频/教程
Discuz主题/插件
typecho主题/插件
SEO杂谈
数据库
MongoDB
MySQL
Redis
单片机
概念说明
电路相关
Python
devops
docker
k8s
linux
登录
/
注册
Search
标签搜索
python
mysql
人人商城
php
java
docker
typecho
插件
微擎
seo
spring boot
discuz
队列
uni-app
phpcms
教程视频
开源系统
源码
工具
css
哈根达斯
累计撰写
90
篇文章
累计收到
143
条评论
首页
栏目
Java
Spring Boot
Spring Mvc
Java基础
进阶知识
前端
uniapp
小程序/公众号
JavaScript
HTML/CSS
Vue
Android
React
PHP
开源软件
商城
营销工具
开发工具
视频/教程
Discuz主题/插件
typecho主题/插件
SEO杂谈
数据库
MongoDB
MySQL
Redis
单片机
概念说明
电路相关
Python
devops
docker
k8s
linux
页面
友情链接
精美壁纸
给我留言
关于我
搜索到
13
篇与
MySQL
的结果
2022-04-06
Mysql中definer引起的视图查询提示密码错误
这个问题会导致以下几个问题出现。mysqsl查询视图,函数时显示密码错误迁移数据库时,显示查询密码错误等1.mysql中的definer是什么,有什么作用?我们在mysql创建view、trigger、function、procedure、event时都会定义一个Definer=‘xxx’,类似如下:CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`%` SQL SECURITY DEFINER VIEW `v_ questions` AS SELECT `q`.`id` AS `id`, `q`.`title` AS `title` FROM Test q; -- 或者像这样的: CREATE DEFINER=`root`@`%` PROCEDURE `user_count`() LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN select count(*) from mysql.user; END加红的部分SQL SECURITY 其实后面有两个选项,一个为DEFINER,一个为INVOKERSQL SECURITY { DEFINER | INVOKER } :指明谁有权限来执行。DEFINER 表示按定义者拥有的权限来执行INVOKER 表示用调用者的权限来执行。默认情况下,系统指定为DEFINER 以存储过程为例:(1)MySQL存储过程是通过指定SQL SECURITY子句指定执行存储过程的实际用户;(2)如果SQL SECURITY子句指定为DEFINER,存储过程将使用存储过程的DEFINER执行存储过程,验证调用存储过程的用户是否具有存储过程的execute权限和DEFINER用户是否具有存储过程引用的相关对象的权限;(3)如果SQL SECURITY子句指定为INVOKER,那么MySQL将使用当前调用存储过程的用户执行此过程,并验证用户是否具有存储过程的execute权限和存储过程引用的相关对象的权限;(4)如果不显示的指定SQL SECURITY子句,MySQL默认将以DEFINER执行存储过程。我们来看下面几个小例子。先授权一个: grant all on testdb.* to 'user1'@'%' identified by '000000' with grant option; 然后我们创建一个存储过程如下: USE `testdb`; DROP procedure IF EXISTS `user_count`; DELIMITER $$ USE `testdb`$$ CREATE DEFINER=`root`@`%` PROCEDURE `user_count`() LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY INVOKER COMMENT '' BEGIN select count(*) from mysql.user; END$$ DELIMITER ;用root帐号登陆: mysql> use testdb; Database changed mysql> call user_count(); +----------+ | count(*) | +----------+ | 3 | +----------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec) 可以正常查询出来。 我们再用user1进行登陆: mysql> use testdb; Database changed mysql> call user_count(); ERROR 1142 (42000): SELECT command denied to user 'user1'@'localhost' for table 'user' 现系统报错查询不到了,这是因为我们在上述定义的SQL SECURITY值为INVOKER,存储过程执行过程中会以user1具有的权限来执行,其中调用到了mysql的库,而我们的user1帐户只有testdb库的使用权限,所以会返回失败。我们把上面的invoker改为definer再来试一下:update mysql.proc set security_type='DEFINER' where db='testdb' and name='user_count'; 再次用user1进行登陆: mysql> use testdb; Database changed mysql> call user_count(); +----------+ | count(*) | +----------+ | 3 | +----------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec)2.如果方便修改mysql中所有已经定义到的definer?由于前期在测试库上开发的缘故,我们经常定义到的definer为root@%,后来搬移到生产库上又得改回来,存在着大量的更新,上百个的视图,函数等一个个改不免太麻烦并且也可能遗漏。如下为总结出的方便修改所有definer的方法,可以直到查漏补缺的作用。现在在mysql涉及的definer有view、trigger、function、procedure、event。我们一个个作介绍。1.修改function、procedure的definerselect definer from mysql.proc; -- 函数、存储过程update mysql.proc set definer='user@localhost'; -- 如果有限定库或其它可以加上where条件2.修改event的definerselect DEFINER from mysql.EVENT; -- 定时事件update mysql.EVENT set definer=' user@localhost ';3.修改view的definer相比function的修改麻烦点:select DEFINER from information_schema.VIEWS; select concat("alter DEFINER=user@localhost SQL SECURITY DEFINER VIEW ",TABLE_SCHEMA,".",TABLE_NAME," as ",VIEW_DEFINITION,";") from information_schema.VIEWS where DEFINER<>'user@localhost'; 查询出来的语句再执行一遍就好了。4.修改trigger的definer目前还没有具体方便的方法,可以借助工具端如HeidiSQL、sqlyog等来一个个修改。注意改前有必要锁表,因为如果改的过程中有其它表改变而触发,会造成数据不一致。Flush tables with readlockUnlock tables文章转载出处:https://www.cnblogs.com/zejin2008/p/4767531.html
2022年04月06日
192 阅读
0 评论
0 点赞
2022-04-05
mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8mb4'如何解决?
原因:mysqlbinlog这个工具无法识别binlog中的配置中的default-character-set=utf8mb4这个指令。添加 --no-defaults 参数mysqlbinlog --no-defaults mysql-bin.000001 > 01.sql注意:加入该项会导致utf8mb4 变为空字符串,会影响数据一致性问题
2022年04月05日
616 阅读
0 评论
0 点赞
2022-01-01
linux主机下使用docker 导入导出 mysql数据库
1. 导出数据# mysql5.6为容器名称,也可以使用容器ID docker exec mysql5.6 sh -c 'exec mysqldump 【数据库名】 -uroot -p"$MYSQL_ROOT_PASSWORD"' | gzip > lanning.sql.gz2. 导入数据第一步:拷贝文件到容器docker cp lanning.sql mysql5.6:/data/lanning.sql 第二步:导入数据mysql -uroot -p"$MYSQL_ROOT_PASSWORD" dbname < lanning.sql
2022年01月01日
132 阅读
0 评论
0 点赞
2021-09-26
mysql 创建用户
mysql 8.0 以下创建-- 以下命令会创建一个可以任何IP主机 访问 的用户,并对db_name数据库具有 所有权限操作, GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'%' IDENTIFIED BY '访问密码' WITH GRANT OPTIONmysql 8.0及以上创建 -- 创建账户(% 代表所有IP) create user 'username'@'%' identified by 'paaswrod'; -- 赋予权限,with grant option这个选项表示该用户可以将自己拥有的权限授权给别人 grant all privileges on gxxblw_db.* to 'username'@'%' with grant option; -- 改密码&授权超用户,flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里 flush privileges;
2021年09月26日
150 阅读
0 评论
0 点赞
2021-07-22
mysql位置距离排序功能实现
再实际的开发中,我们经常需要使用地理经纬度信息来做排序,比如查找附近的门店,或查找离我最近的人的需求等。可直接套用下方mysql查询语句进行数据查询排序sql中latitude为数据库表中的纬度,longitude代表经度{latitude} 代表传入的纬度,{latitude} 代表传入的经度,主要为用户当前位置信息,查询获得结果 distance 单位为米SELECT *, (round(6367000 * 2 * asin(sqrt(pow(sin(((latitude * pi()) / 180 - (${latitude} * pi()) / 180) / 2), 2) + cos((${latitude} * pi()) / 180) * cos((latitude * pi()) / 180) * pow(sin(((longitude * pi()) / 180 - (${longitude} * pi()) / 180) / 2), 2))))) AS distance FROM ec_store WHERE is_show = 1 and is_del = 0 ORDER BY distance asc
2021年07月22日
247 阅读
0 评论
1 点赞
1
2
3