H2数据库用户

Posted

技术标签:

【中文标题】H2数据库用户【英文标题】:H2 database users 【发布时间】:2012-04-17 20:22:19 【问题描述】:

我在我的客户端-服务器应用程序中使用可嵌入数据库 H2。

对于某些用途,我需要创建用户,该用户只能查看表而无权更改它们。我认为创建非管理员用户对于我的情况就足够了。但是我在尝试执行查询SELECT * FROM ADDRESS时出现以下异常:

org.h2.jdbc.JdbcSQLException: Недостаточно прав на объект "PUBLIC.ADDRESS"
Not enough rights for object "PUBLIC.ADDRESS"; SQL statement:
SELECT * FROM ADDRESS [90096-164] 
at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) 
at org.h2.message.DbException.get(DbException.java:169) 
at org.h2.message.DbException.get(DbException.java:146) 
at org.h2.engine.User.checkRight(User.java:98) 
at org.h2.table.TableFilter.<init>(TableFilter.java:122) 
at org.h2.command.Parser.readTableFilter(Parser.java:1084) 
at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1686) 
at org.h2.command.Parser.parseSelectSimple(Parser.java:1793) 
at org.h2.command.Parser.parseSelectSub(Parser.java:1680) 
at org.h2.command.Parser.parseSelectUnion(Parser.java:1523) 
at org.h2.command.Parser.parseSelect(Parser.java:1511) 
at org.h2.command.Parser.parsePrepared(Parser.java:405) 
at org.h2.command.Parser.parse(Parser.java:279) 
at org.h2.command.Parser.parse(Parser.java:251) 
at org.h2.command.Parser.prepareCommand(Parser.java:217) 
at org.h2.engine.Session.prepareLocal(Session.java:415) 
at org.h2.server.TcpServerThread.process(TcpServerThread.java:250) 
at org.h2.server.TcpServerThread.run(TcpServerThread.java:146) 
at java.lang.Thread.run(Unknown Source) 

at org.h2.engine.SessionRemote.done(SessionRemote.java:565) 
at org.h2.command.CommandRemote.prepare(CommandRemote.java:67) 
at org.h2.command.CommandRemote.<init>(CommandRemote.java:46) 
at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:437) 
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1121) 
at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:164) 
at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:152) 
at org.h2.server.web.WebApp.getResult(WebApp.java:1311) 
at org.h2.server.web.WebApp.query(WebApp.java:1001) 
at org.h2.server.web.WebApp$1.next(WebApp.java:964) 
at org.h2.server.web.WebApp$1.next(WebApp.java:967) 
at org.h2.server.web.WebThread.process(WebThread.java:166) 
at org.h2.server.web.WebThread.run(WebThread.java:93) 
at java.lang.Thread.run(Unknown Source)`

有什么方法可以实现目标吗?

【问题讨论】:

你能为那些不会说希腊语的人翻译“Недостаточно прав на объект”吗? 下面只是一个字符串 =) Not enough rights for object "PUBLIC.ADDRESS" 看到了吗?我什至无法区分:) 【参考方案1】:

您必须将选择权限授予创建的用户。

GRANT SELECT ON TEST TO READONLY

更多信息:http://www.h2database.com/html/grammar.html#grant_right

【讨论】:

以上是关于H2数据库用户的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb-SpringBoot_使用H2数据库实现用户注册登录

H2数据库:防止用户转储数据库内容(SCRIPT、BACKUP等)

在 h2 数据库中删除匿名用户

H2数据库用户定义的java函数类未找到

配置嵌入式 H2 用户以进行分发

防止用户在 H2 中创建表