mysql用户操作表权限的问题(java)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql用户操作表权限的问题(java)相关的知识,希望对你有一定的参考价值。

情况是这样的:首先我用admin用户创建了一系列的表及数据,然后又用jdbc连接这个数据库(连接帐号改成root了),这时对表的查询、新增、更新都没问题,唯独执行delete时就会报这样的错误:The user specified as a definer ('oa'@'localhost') does not exist。
请问这是因为没有给root赋予删除权限出现的问题吗?应该怎么解决?我用SHOW GRANTS FOR root@'localhost';看结果说赋予了全部权限,我现在很纠结这到底是怎么回事:GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*C94CA76F1376C3A0482187452BFBF41DE621E9DA' WITH GRANT OPTION

求高人指教!!!
额,错误不是oa是admin:
The user specified as a definer ('admin'@'localhost') does not exist。

那是因为你这个数据库里面有个delete 的触发器,trigger 是用admin定义的,
解决办法;
1, 删除这个触发器
2,增加admin@localhost用户

2或1任取一个;
注意必须是admin@localhost,而不是admin@%或者admin@127.0.01这样的
参考技术A 解决办法:

给root用户再添加一个对全部host都有可以访问的权限:

mysql -uroot -pPasswd

mysql >grant all privileges on *.* to root@"%" identified by "Passwd";

mysql >flush privileges;

------

现在再导出试试吧
参考技术B 你执行完GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*C94CA76F1376C3A0482187452BFBF41DE621E9DA' WITH GRANT OPTION

之后需要 flush privileges才能生效的
参考技术C 你应该用同一个用户吧?
你试试看

MySQL赋予用户权限命令总结

MySQL用户可用权限

一个新建的MySQL用户没有任何访问权限,这就意味着你不能在MySQL数据库中进行任何操作。你得赋予用户必要的权限。以下是一些可用的权限:

ALL: 所有可用的权限

CREATE: 创建库、表和索引

LOCK_TABLES: 锁定表

ALTER: 修改表

DELETE: 删除表

INSERT: 插入表或列

SELECT: 检索表或列的数据

CREATE_VIEW: 创建视图

SHOW_DATABASES: 列出数据库

DROP: 删除库、表和视图

grant、index、references、reload、shutdown、process等等

赋予权限基本命令格式

mysql> grant 权限1,权限2 on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;

当权限1,权限2,…被all privileges或者all代替,表示赋予用户全部权限。
当数据库名称.表名称被*.*代替,表示赋予用户操作服务器上所有数据库所有表的权限。
用户地址可以是localhost,也可以是ip地址、机器名字、域名。也可以用‘%‘表示从任何地址连接。
‘连接口令’不能为空,否则创建失败。
  • 在MySQL安装完成后,为了确保数据库的安全性,通常我们都使用mysqladmin命令给数据管理员root用户添加密码,允许远程登录并赋予所有权限。

  • 例1
mysql> grant all privileges on *.* to ‘root‘@‘%‘ identified by ‘abc123‘ with grant option;

赋予所有特殊权限给root用户,可以从任何IP地址远程登录,密码为abc123,且拥有grant赋予权限的权限
  • 例2
mysql> grant select,insert,update,delete,create,drop on school.info to [email protected] identified by ‘123‘;

给来自192.168.100.100的用户test分配可对数据库school的info表进行select,insert,update,delete,create,drop等操作的权限,并设定口令为123。
  • 例3
mysql> grant all privileges on school.* to t[email protected] identified by ‘123‘;

给来自192.168.100.100的用户test分配可对数据库school所有表进行所有操作的权限,并设定口令为123。
  • 例4
mysql>grant all privileges on *.* to [email protected] identified by ‘123‘;

给本机用户test分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。
  • 注:在mysql模式中,当赋予用户权限或者权限设定后,重要的一步使得命令立即生效:

mysql>flush privileges

忘记密码 重置密码

systemctl stop mysqld.service
mysqld --skip-grant-tables 启动数据库不使用授权表
source /etc/profile
mysql 进入数据库
> update mysql.user set authentication_string=password (‘123456‘) where user=‘root‘;
> flush privileges; 刷新数据库

init 6 重启

  • 注:若是想默认直接跳过账户验证,可直接通过在主配置文件中添加:

vim /etc/my.cnf

[mysqld]
skip-grant-tables      //添加跳过验证命令
user=mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
....
  • 重启MySQL服务

systemctl restart mysqld.service

如上,当再次进入MySQL时即可跳过验证,直接进入。

以上是关于mysql用户操作表权限的问题(java)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL用户库表操作

mysql中怎样设置用户和管理员的权限?

MySQL赋予用户的各种数据库操作权限

MySQL权限和用户管理

MySQL - 用户权限的查看以及用户删除

mysql库操作表操作