HSQLDB - how to grant privileges?

狂风中的少年 提交于 2019-12-24 17:24:10

问题


While trying to run SQL on HSQLDB I got this exception:

java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: ADMIN at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) at org.hsqldb.jdbc.JDBCPreparedStatement.(Unknown Source) at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)

EDIT: That's how I'm creating the Connection object:

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;
}

And this is the prepared statement that I made:

    java.sql.PreparedStatement prSelect = con.prepareStatement("SELECT * FROM PUBLIC.ADMIN Where USERNAME=? AND PASSWORD=?;");

How can I grant privileges to the user? Currently I'm using SA user.

EDIT 2: This is the schema that I built -

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)
);

回答1:


Some of the DDL statements that would be most helpful to you are CREATE USER, CREATE ROLE, and GRANT.

This is the DDL statement to create a new user with the assigned password:

CREATE USER "CENASSIST" PASSWORD 'thepassword';

This DDL statement creates a ROLE, to which a group of permissions may be assigned. The ROLE is then assigned to the user created above:

CREATE ROLE "FRONT_END";
GRANT FRONT_END TO "CENASSIST";

This block of DDL assigns the permissions for the FRONT_END role that was created. The Permissions are for table access:

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 has an excellent online manual that details the DDL statements used for permissions and access control.



来源:https://stackoverflow.com/questions/32126314/hsqldb-how-to-grant-privileges

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!