HSQLDB-如何授予特权?

HSQLDB-如何授予特权?,sql,hsqldb,Sql,Hsqldb,尝试在HSQLDB上运行SQL时,我遇到以下异常: java.sql.SQLSyntaxErrorException:用户缺少权限或对象不存在 找到:org.hsqldb.jdbc.jdbcuti.sqlException上的ADMIN(未知源) 位于org.hsqldb.jdbc.jdbcuti.sqlException(未知源) org.hsqldb.jdbc.JDBCPreparedStatement.(未知来源)位于 org.hsqldb.jdbc.JDBCConnection.prep

尝试在HSQLDB上运行SQL时,我遇到以下异常:

java.sql.SQLSyntaxErrorException:用户缺少权限或对象不存在 找到:org.hsqldb.jdbc.jdbcuti.sqlException上的ADMIN(未知源) 位于org.hsqldb.jdbc.jdbcuti.sqlException(未知源) org.hsqldb.jdbc.JDBCPreparedStatement.(未知来源)位于 org.hsqldb.jdbc.JDBCConnection.prepareStatement(未知源)

编辑: 这就是我创建
连接的方式
对象:

public static Connection getConnection(){
    Connection conn = null;

    try {   
        Class.forName("org.hsqldb.jdbcDriver");
        conn = DriverManager.getConnection("jdbc:hsqldb:mem:test://localhost","sa","");         
    } 
    catch (Exception e) {
        e.printStackTrace();
    }   
    return conn;
}
这是我事先准备好的声明:

    java.sql.PreparedStatement prSelect = con.prepareStatement("SELECT * FROM PUBLIC.ADMIN Where USERNAME=? AND PASSWORD=?;");
如何向用户授予特权?目前我正在使用SA用户

编辑2: 这是我建立的模式-

CREATE TABLE PUBLIC.SHOW_ORDER(
    ORDER_CODE INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
    CLIENT_ID VARCHAR(10),
    NUMBER_OF_TICKETS INTEGER,  
    SHOW_CODE INTEGER,
    CLIENT_NAME VARCHAR(25),
    TOTAL_PRICE INTEGER,
    PRIMARY KEY (ORDER_CODE),
);

CREATE TABLE PUBLIC.SHOW
(
    CODE INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
    MUSIC_TYPE INTEGER,
    NUMBER_OF_SEATS INTEGER,
    DESCRIPTION VARCHAR(100),
    S_DATE DATE,
    SEATS_TAKEN INTEGER,
    PRIMARY KEY (CODE)
);
CREATE TABLE PUBLIC.SYS_MUSIC_TYPE (
    CODE INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
    DESCRIPTION VARCHAR(100),
    PRIMARY KEY (CODE)
);
CREATE TABLE PUBLIC.ADMIN
(
    USERNAME VARCHAR(25),
    PASSWORD VARCHAR(25) NOT NULL,
    PRIMARY KEY (USERNAME)
);

一些对您最有帮助的DDL语句是CREATEUSER、CREATEROLE和GRANT

这是DDL语句,用于使用分配的密码创建新用户:

CREATE USER "CENASSIST" PASSWORD 'thepassword';
此DDL语句创建一个角色,可以为其分配一组权限。然后将角色分配给上面创建的用户:

CREATE ROLE "FRONT_END";
GRANT FRONT_END TO "CENASSIST";
此DDL块为创建的前端角色分配权限。这些权限用于表访问:

GRANT SELECT, UPDATE, INSERT ON TABLE Clients TO FRONT_END;
GRANT SELECT, UPDATE, INSERT ON TABLE Rotations TO FRONT_END;
GRANT SELECT, UPDATE, INSERT ON TABLE Institutions TO FRONT_END;
GRANT SELECT, UPDATE, INSERT ON TABLE Client_MRNs TO FRONT_END;
GRANT SELECT, UPDATE, INSERT ON TABLE Payers TO FRONT_END;

HSQLDB有一本优秀的在线手册,详细介绍了用于权限和访问控制的DDL语句。

一些对您最有帮助的DDL语句是CREATE USER、CREATE ROLE和GRANT

这是DDL语句,用于使用分配的密码创建新用户:

CREATE USER "CENASSIST" PASSWORD 'thepassword';
此DDL语句创建一个角色,可以为其分配一组权限。然后将角色分配给上面创建的用户:

CREATE ROLE "FRONT_END";
GRANT FRONT_END TO "CENASSIST";
此DDL块为创建的前端角色分配权限。这些权限用于表访问:

GRANT SELECT, UPDATE, INSERT ON TABLE Clients TO FRONT_END;
GRANT SELECT, UPDATE, INSERT ON TABLE Rotations TO FRONT_END;
GRANT SELECT, UPDATE, INSERT ON TABLE Institutions TO FRONT_END;
GRANT SELECT, UPDATE, INSERT ON TABLE Client_MRNs TO FRONT_END;
GRANT SELECT, UPDATE, INSERT ON TABLE Payers TO FRONT_END;

HSQLDB有一本优秀的在线手册,详细介绍了用于权限和访问控制的DDL语句。

您是如何创建对象的,以及失败的语句是什么?@beny23我更新了代码,请注意,这不是生成错误的代码,因为没有
prepareStatement()
call-这是导致错误的原因。向我们展示生成该语句的实际SQL语句error@a_horse_with_no_nameaddedWell-thta很明显:您没有名为
PUBLIC.ADMIN
的表。如果您希望有一个数据库,并且您确实运行了正确的
createtable
语句,那么您可能连接到了错误的数据库。当您从SQL客户端运行该语句时,该语句是否有效?您是如何创建该对象的?失败的语句是什么?@beny23我更新了代码,请注意,该代码不是生成错误的代码,因为没有
prepareStatement()
调用-这是导致错误的原因。向我们展示生成该语句的实际SQL语句error@a_horse_with_no_nameaddedWell-thta很明显:您没有名为
PUBLIC.ADMIN
的表。如果您希望有一个数据库,并且您确实运行了正确的
createtable
语句,那么您可能连接到了错误的数据库。当您从SQL客户端运行该语句时,它是否工作?它给我以下错误:
无效的授权规范-已存在:语句中的前端[创建角色“前端”]/错误代码:-4003/状态:28503
它给我以下错误:
无效的授权规范-已存在:语句中的前端[创建角色“前端”]/错误代码:-4003/状态:28503