缺少权限的正确 SQLException / spring 数据异常是什么

What is the correct SQLException / spring data exception for missing permissions

我刚刚注意到,当您尝试执行没有所需权限的查询时(仅使用 mysql-connector-java v8 在 mysql 5.7 数据库上测试驱动程序)它被翻译成 org.springframework.jdbc.BadSqlGrammarException。这是因为 mysql 驱动程序本身会抛出一个 java.sql.SQLSyntaxErrorException.

例如:java.sql.SQLSyntaxErrorException: INSERT command denied to user 'myuser'@'127.0.0.1' for table 'mytable'

这是正确的 and/or 故意的吗?我试图查看 java.sqlorg.springframework.jdbc 中的各种现有异常,但没有找到明显的替代候选者。

我查看了 mysql documentation 这个错误:

Error number: 1142; Symbol: ER_TABLEACCESS_DENIED_ERROR; SQLSTATE: 42000

Message: %s command denied to user '%s'@'%s' for table '%s'

据我所知,驱动程序使用 SQLSTATE 42000 来确定它是一个语法错误。

sql 标准定义了 sql 语句的 return 代码,kmown 为 sqlstate

sqlstate 42000表示

syntax error or access rule violation

拒绝访问属于此类,因此mysql遵循标准。 Java 也广泛遵循标准,因为它报告语法错误等错误。

不幸的是,答案是您不能使用错误类型来驱动拒绝访问检查,您需要查看错误编号(在本例中为 1142)。