Permiso denegado para relación


331

Traté de ejecutar el comando sql simple:

select * from site_adzone;

y recibí este error

ERROR:  permission denied for relation site_adzone

Cual podría ser el problema aquí?

Intenté también seleccionar para otras tablas y obtuve el mismo problema. También intenté hacer esto:

GRANT ALL PRIVILEGES ON DATABASE jerry to tom;

pero recibí esta respuesta de la consola

WARNING:  no privileges were granted for "jerry"

¿Tienes alguna idea de lo que puede estar mal?


No estoy seguro de cómo actualizar los permisos para poder leer / escribir en DB
Boban

1
Debe

2
Bienvenido a SO! Para esta pregunta, puede obtener más ayuda en dba.stackexchange.com, aunque puede encontrar la misma cantidad de comentarios sarcásticos :)
Jared Beck

10
Perdóneme. ¡Esta es la segunda pregunta postgresql muy relacionada con la programación que he visto cerrada como fuera de tema esta noche! La última tuvo 67,000 visitas, esta 30,000 visitas. Deberíamos tener una cláusula de popularidad: cualquier pregunta no subjetiva con> 15,000 visitas = sobre el tema.
Theodore R. Smith

1
¡Esta pregunta no está fuera de tema! Sin embargo, es una duplicación de stackoverflow.com/questions/13497352/…
wheaties

Respuestas:


391

GRANT en la base de datos no es lo que necesita. Conceder en las mesas directamente.

La concesión de privilegios en la base de datos se usa principalmente para otorgar o revocar privilegios de conexión. Esto le permite especificar quién puede hacer cosas en la base de datos si tienen otros permisos suficientes.

Usted quiere en cambio:

 GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;

Esto se encargará de este problema.


77
ejecútelo como superusuario, como postgres.
Chris Travers

19
¿Puede esto ser un atajo de alguna manera? OTORGAR TODOS LOS PRIVILEGIOS EN TODAS LAS TABLAS?
Shadur

196
@Shadur OTORGA TODOS LOS PRIVILEGIOS EN TODAS LAS TABLAS EN SCHEMA public TO jerry;
Ron E

10
@RonE, ¿eso está restringido a la base de datos actual?
Shadur

77
@zmiftah para el esquema que necesita> OTORGAR TODOS LOS PRIVILEGIOS EN EL ESQUEMA nameSchema TO user;
Pierozi

241

Publicar la respuesta de Ron E para otorgar privilegios en todas las tablas ya que podría ser útil para otros.

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;

21
También es posible que deba ejecutar un comando similar para ALL SEQUENCESy ALL FUNCTIONS.
Pistos

77
Solo para aquellos que se preguntaban: ALL TABLEStambién incluye vistas, por lo que no hay un ALL VIEWScomando separado :-)
André Gasser

74

Conéctese primero a la base de datos correcta , luego ejecute:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;

44
¡Gracias conectarme a la base de datos correcta NO estaba haciendo antes!
pregunta el

15
conectarse a la base de datos correcta hace una gran diferencia :)\connect databasename;
Denis Matafonov

3
ESTA. Estuve conectado a "postgres" todo el tiempo. ¡Gracias!
Andrew G.

2
Sí, conectarse a la base de datos marcó la diferencia
inostia

44
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public to jerry;

¡Esta respuesta me salvó el día!
anhtran

19

El primer paso importante es conectarse a su base de datos:

psql -d yourDBName

2 pasos, otorgue privilegios

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO userName;

18

Para otorgar permisos a todas las tablas existentes en el esquema, use:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <schema> TO <role>

Para especificar los permisos predeterminados que se aplicarán a las tablas futuras, use:

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> 
  GRANT <privileges> ON TABLES TO <role>;

p.ej

ALTER DEFAULT PRIVILEGES IN SCHEMA public 
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO admin;

Si usa SERIALo BIGSERIALcolumnas, entonces probablemente querrá hacer lo mismo SEQUENCES, o de lo contrario INSERTfallará ( Postgres 10IDENTITY no sufre ese problema, y ​​se recomienda sobre los SERIALtipos), es decir

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON SEQUENCES TO <role>;

Consulte también mi respuesta a los permisos de PostgreSQL para la aplicación web para obtener más detalles y un script reutilizable.

Árbitro:

CONCEDER

ALTERAR PRIVILEGIOS POR DEFECTO


9

Esto sucede con frecuencia cuando crea una tabla como postgres de usuario y luego intenta acceder a ella como un usuario normal. En este caso, es mejor iniciar sesión como usuario de postgres y cambiar la propiedad de la tabla con el comando:

alter table <TABLE> owner to <USER>;

5

Asegúrese de iniciar sesión en psql como propietario de las tablas. para saber quién es el dueño de las mesas usa\dt

psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES

entonces puedes ejecutar las SUBVENCIONES


0

Como está buscando permisos de selección, le sugiero que otorgue solo privilegios de selección en lugar de todos. Puedes hacer esto:

GRANT SELECT ON <table> TO <role>;

0

Debieras:

  1. conectarse a la base de datos mediante DBeaver con el usuario postgres
  2. en la pestaña izquierda abra su base de datos
  3. abrir la pestaña / menú desplegable Roles
  4. selecciona tu usuario
  5. en la pestaña derecha presione 'pestaña Permisos'
  6. presione su pestaña de esquema
  7. presione tablas pestaña / menú desplegable
  8. seleccione todas las tablas
  9. seleccione todas las casillas de verificación de permisos requeridos (o presione Otorgar todo)
  10. presione Guardar

-3

Me enfrenté a este problema una vez. simplemente cambie el usuario de la base de datos a un superusuario y su problema se resolverá.

ALTERAR USUARIO myuser CON SUPERUSUARIO;


Al hacer esto, está otorgando más permisos de los que necesita. Superuser les dará permiso para otras operaciones que tal vez no desee que ese usuario haga, como crear otros usuarios, bases de datos, etc.
Santi
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.