PostgreSQL schema权限拒绝:数据库/ schema所有者无法创建表
权限拒绝:PostgreSQL下所有者用户无法创建表的解决办法
我启动Java开发应用时,预期自动创建不存在的users表。应用以defaultuser身份连接数据库,该用户是tellerdata数据库和tellerdata schema的所有者。已查阅过相关问题,知道这类错误通常是权限或外键问题,但该用户已拥有建表的全部权限,还额外授予了数据库和schema的所有权限,仍报错。
报错信息
Error executing DDL "create table tellerdata.users (id bigint generated by default as identity, email varchar(50) not null, password varchar(120) not null, role varchar(255) check (role in ('USER','ADMIN')), username varchar(20) not null, primary key (id))" via JDBC [ERROR: permission denied for schema tellerdata
相关代码与配置
实体类代码
@Data @Builder @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "users", uniqueConstraints = { @UniqueConstraint(columnNames = "username"), @UniqueConstraint(columnNames = "email") }, schema = "tellerdata") public class User implements UserDetails {
Spring JPA配置
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation= true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect # Hibernate ddl auto (create, create-drop, validate, update) spring.jpa.hibernate.ddl-auto=update
数据库连接配置
spring.datasource.url=LOGINSTRING spring.datasource.username=defaultuser spring.datasource.password=password
解决办法
- 检查并设置用户搜索路径:PostgreSQL中,即使是schema所有者,若搜索路径未包含目标schema,可能触发权限检测问题。执行以下SQL更新用户默认搜索路径,之后重新连接数据库:
ALTER USER defaultuser SET search_path = tellerdata, public; - 重新确认schema权限:执行以下SQL确保用户拥有schema及其中对象的完整权限:
GRANT ALL PRIVILEGES ON SCHEMA tellerdata TO defaultuser; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA tellerdata TO defaultuser; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA tellerdata TO defaultuser; - 在JDBC URL指定默认schema:修改数据库连接URL,添加
currentSchema=tellerdata参数,示例:
让Hibernate默认使用该schema,避免显式指定可能的权限校验异常。spring.datasource.url=jdbc:postgresql://host:port/tellerdata?currentSchema=tellerdata - 移除实体类的schema显式配置:尝试删除
@Table注解中的schema = "tellerdata",依赖JDBC URL指定的默认schema,验证是否能正常建表。 - 确认连接的实际用户:在数据库中执行
SELECT current_user;,检查应用连接时是否确实使用了defaultuser,排除用户身份混淆的问题。
内容的提问来源于stack exchange,提问作者Aluxxen
相关产品推荐
相关产品推荐

