问题
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