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.prepareStatement(未知源) 编辑: 这就是我创建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
连接的方式
对象:
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