permission denied for relation

Hallo,

habe gerade eine DB von MySql zu PG portiert.
Wenn ich nun versuche ein Select abzusetzen, bekomme ich die Fehlermeldung: permission denied for relation .

Hoffe ihr könnt mir weiterhelfen…

Grüsse

p.s.
Wie kann man in PG eisehen, welche User gesetzt worden sind, mit die Rechte dazu?

GRANT kann hier helfen.

p.s.
Wie kann man in PG eisehen, welche User gesetzt worden sind, mit die Rechte dazu?

Owner einer Tabelle:
select usename from pg_user where usesysid=(select relowner from pg_class where relname=’’);

Rechte: \dp bzw. \z in psql.


Andreas

hi andreas,

danke für die Antwort…
ich sehe mit \z in der access_privileges spalte keinen Eintrag!
Wie kann ich nun den Tabellen den entsprechenden User zuweisen?

GRuß
Redd

Ja, und? Die table gehört dem Eigentümer. Dieser kann Rechte verteilen. Dies ist bisher nicht erfolgt -> Spalte leer.

Wie kann ich nun den Tabellen den entsprechenden User zuweisen?

GRuß
Redd

ALTER TABLE table OWNER TO neuer_owner;

Dazu muß Du Eigentümer oder Superuser sein. Steht übrigens alles in der Doku, ich schreib nur von da ab.


Andreas

Schau mal…

habe folgendes gemacht als User: postgres:

alter database kaajing owner TO master;

Die Konsole meldet mir… Alter Database
wenn ich nun mit psql -U master db mich einlogge
und ein select absetze, bekomme ich wieder permission denied.

Wenn ich ein:

GRANT ALL PRIVILEGES ON DATABASE kaajing TO master;

mache, sehe ich mit \z trotzdem nicht, dass user master die REchte hat.

Gruß
Redd

Database != table.

15:10 < akretschmer> ??grantall
15:10 < rtfm_please> For information about grantall
15:10 < rtfm_please> see http://pgedit.com/public/sql/acl_admin/index.html
15:10 < rtfm_please> or http://unf.be/postgresql/postgres_grant_all.perl
15:10 < rtfm_please> or http://www.archonet.com/pgdocs/grant-all.html

Andreas

Das ist schon klar, aber will doch auch nicht gleich 48 Tabellen einzeln den User setzen. Sollte doch reichen, wenn man diesen einmal für die DB setzt, oder?


In ner Doku was ich mir angelesen habe steht ja folgendes drin…

Command: GRANT
Description: define access privileges
Syntax:
GRANT { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER }
[,…] | ALL [ PRIVILEGES ] }
ON [ TABLE ] tablename [, …]
TO { username | GROUP groupname | PUBLIC } [, …] [ WITH GRANT OPTION ]

habe nun Tabellenweise die Rechte hinzugefügt.
Und es geht… Trotzdem ein wenig umständlich. Egal…

Bekomme bei folgendem SQL eine Fehlermeldung:

CREATE TABLE "kaj_produkt" (  "pro_id" BIGINT NOT NULL DEFAULT '0',
  "titel" TEXT NOT NULL DEFAULT '',
  "kurzinfo" TEXT NOT NULL DEFAULT '',
  "info" TEXT NOT NULL DEFAULT '',
  "pic_thumb" VARCHAR(180) NULL DEFAULT NULL,
  "aart_id" SMALLINT NULL DEFAULT NULL,
  "auk_preis" FLOAT NOT NULL DEFAULT '0',
  "auk_start" TIMESTAMP NULL DEFAULT NULL,
  "auk_ende" TIMESTAMP NULL DEFAULT NULL,
  "auk_status" BOOLEAN NOT NULL DEFAULT '4',
  "public" CHAR(1) NOT NULL DEFAULT '0',
  "public_date_start" TIMESTAMP NOT NULL ,
  "public_date_end" TIMESTAMP NOT NULL ,
  "einstelldatum" TIMESTAMP NOT NULL ,
  "user_id" BIGINT NULL DEFAULT NULL,
  "username" VARCHAR(20) NULL DEFAULT NULL,
  "part_id" BIGINT NULL DEFAULT NULL,
  "main_pic" VARCHAR(180) NULL DEFAULT NULL,
  "delam" TIMESTAMP NULL DEFAULT NULL,
  "changedat" TIMESTAMP NOT NULL ,
  PRIMARY KEY ("pro_id"),
  UNIQUE ("pro_id")
);

Fehler:

psql :p g_mysqldump_produkt.sql:23: ERROR:  invalid input syntax for type boolean: "4"

Diese Zeilen wurden mit mysql2postgres erzeugt.

Nun ja. 4 ist ein INT und kein BOOL. So wie z.B. auch ein 29.02.2003 ein falsches Datum wäre. Allein die Tatsache, daß MySQL so was annimmt macht es noch nicht wahr.

Andreas

Andreas

normalerweise wuerde man sich eine sog. Rolle im sinne von Gruppe erzeugen (keine Login-Rolle)
für jede Tabelle die du erzeugst GRANTest du diese Gruppe. Wenn du dann einen neuen User anlegst musst du diesen nur dieser Gruppe zuweisen (mit INHERIT - also um Rechte von Gruppe erben) … damit darf der User automatisch das, was die Gruppe darf.

Das macht man halt einmal, beim erzeugen der Tabellen. Bei PG kann man da sogar tricksen … du erzeugst ne Login-Rolle - logst dich ein und erzeugst mit dieser Login-Rolle dein Modell - auch ein Restore von einem Backup geht. Damit ist diese Login-Rolle dann OWNER deiner Tabellen. Im Nachhinein darfst dann mit ALTER ROLE aus dieser Rolle eine Gruppe machen … spart halt Arbeit.