Ergebnis 1 bis 10 von 10

Thema: permission denied for relation

  1. #1
    redman ist offline Neuer Benutzer
    Registriert seit
    19.04.2008
    Beiträge
    12

    Standard 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 <tabelle>.

    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?

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von redman Beitrag anzeigen
    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 <tabelle>.

    Hoffe ihr könnt mir weiterhelfen..
    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='<tablename>');

    Rechte: \dp bzw. \z in psql.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    redman ist offline Neuer Benutzer
    Registriert seit
    19.04.2008
    Beiträge
    12

    Standard

    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

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von redman Beitrag anzeigen
    hi andreas,

    danke für die Antwort..
    ich sehe mit \z in der access_privileges spalte keinen Eintrag!
    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
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    redman ist offline Neuer Benutzer
    Registriert seit
    19.04.2008
    Beiträge
    12

    Standard

    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

  6. #6
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von redman Beitrag anzeigen
    Schau mal..

    habe folgendes gemacht als User: postgres:

    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:

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

    Gruß
    Redd
    Database != table.

    Code:
    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
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  7. #7
    redman ist offline Neuer Benutzer
    Registriert seit
    19.04.2008
    Beiträge
    12

    Standard

    Zitat Zitat von akretschmer Beitrag anzeigen
    Database != table.
    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?


    Zitat Zitat von akretschmer Beitrag anzeigen
    Code:
    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
    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 ]

  8. #8
    redman ist offline Neuer Benutzer
    Registriert seit
    19.04.2008
    Beiträge
    12

    Standard

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

    Bekomme bei folgendem SQL eine Fehlermeldung:
    Code:
    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:
    Code:
    psql:pg_mysqldump_produkt.sql:23: ERROR:  invalid input syntax for type boolean: "4"
    Diese Zeilen wurden mit mysql2postgres erzeugt.

  9. #9
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von redman Beitrag anzeigen
    habe nun Tabellenweise die Rechte hinzugefügt.
    Und es geht.. Trotzdem ein wenig umständlich. Egal..

    Bekomme bei folgendem SQL eine Fehlermeldung:


    Fehler:
    Code:
    psql:pg_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
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  10. #10
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard Musst du auch nicht machen sowas ..

    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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum