2017-08-01 4 views
0

Ich habe einen Benutzer zu einer Firebird 2.1-Instanz mit gsec hinzugefügt, aber jetzt wollte ich diesem neuen Benutzer SELECT für alle Tabellen gewähren. Ich konnte feststellen, wie diese Erlaubnis auf bestimmte Tabellen zu gewähren, aber nicht, um sie alle:Gewähren SELECT in allen Tabellen für einen Benutzer in Firebird 2.1

GRANT SELECT ON TABLE table TO USER user; 

Wenn ich versuche, den neuen Benutzer verwende ich die folgende Fehlermeldung auf isql erhalten:

keine Genehmigung für lesen/select den Zugriff auf TABLE Tabelle

gibt es eine Möglichkeit, dass auf Firebird 2.1 zu tun?

+0

Haben Sie den Zuschuss in die richtige Datenbank durchführen, bitte th Die genauen Schritte, die du gemacht hast, denn das sollte funktionieren. –

+0

@MarkRotteveel Ich frage mich, ob er diese Zuschüsse begibt und die abholende Transaktion neu startet, das könnte vielleicht eine Cross-Transaktions-Sache sein. –

Antwort

0

Etwas wie folgt aus:

EXECUTE BLOCK 
AS 
    DECLARE VARIABLE tablename VARCHAR(32); 
BEGIN 
    FOR SELECT rdb$relation_name 
    FROM rdb$relations 
    WHERE rdb$view_blr IS NULL 
    AND (rdb$system_flag IS NULL OR rdb$system_flag = 0) 
    INTO :tablename DO 
    BEGIN 
    EXECUTE STATEMENT ('GRANT SELECT ON TABLE ' || :tablename || ' TO USER TEST'); 
    END 
END 
+0

Wenn Sie nach Ansichtsquellen suchen, dann prüfen Sie auch nach 'RDB $ EXTERNAL_FILE'. Aber am besten wäre es, nach 'RDB $ RELATION_TYPE = 0' zu suchen. /// Als nächstes würden wir alle Benutzer aufzählen, wenn wir nicht alles nur' PUBLIC' gewähren wollen :-) –

+0

Ok, das hat funktioniert für mich. Ich dachte, es wäre ein einfacher Weg wie bei MySQL, aber ich glaube ich lag falsch. Vielen Dank! – Bruno

1

ich finden konnte, wie diese Erlaubnis auf bestimmte Tabellen zu gewähren, aber nicht, um sie alle

Sie können bestimmte Privilegien alle Benutzer gewähren, bereits bestehende und noch geschaffen werden. Dies wird gemacht, indem dem Pseudo-Benutzer "PUBLIC" ein Privileg erteilt wird. Oder Sie können bestimmten Benutzern Zugriffsrechte erteilen und dann den Benutzern diese ROLE zuweisen. Geben Sie dann während der Datenbankverbindung die Option an, dass der Benutzer diese Identität in dieser Sitzung als ROLE annimmt.

Allerdings gibt es keine Syntax Berechtigungen für alle Generatoren oder alle Verfahren oder allen Ansichten oder alle Tabellen zu gewähren, usw.

Siehe GRANT Anweisung Syntax in der Dokumentation.

Was können Sie zwar tun, schafft ein einfaches Skript (anonym und flüchtige aka EXECUTE BLOCK oder persistent und benannt als STORED PROCEDURE) und das Skript von Ihnen würde die Abfrage Systemtabellen zur Liste alle Nicht-System (COALESCE(RDB$SYSTEM_FLAG,0)=0) Tabellen (Zusammen mit Sichten oder Tabellen, aber nicht Sichten: Überprüfen Sie, ob RDB$RELATION_TYPE 0 ist oder 0 oder 1 ist) und bilden Sie dann eine Folge von GRANT Anweisungen und führen Sie sie nacheinander aus.

Siehe Dokumentation über EXECUTE BLOCK und FOR SELECT ... INTO ... DO ... und EXECUTE STATEMENT (oder vielleicht auch FOR EXECUTE STATEMENT, aber ich glaube nicht, dass bereits in FB war 2.1. Es gibt inoffizielles Wiki-Tracking, die Aussagen, da welche Versionen FB verfügbar waren, aber es ist nicht gründlich und kann Fehler enthalten: http://firebirdsql.su/doku.php).

+0

Verlinken zu russischen Seiten ist nicht wirklich hilfreich IMO. –

+0

@MarkRotteveel, wenn es ein solches Wiki pro Version in Englisch gibt .... Es gibt keine. Das Überprüfen der Versionstabelle erfordert jedoch kein Russisch. Und wenn der Leser neugierig wurde, hat er www.translate.ru nicht viel, aber "besser als nichts" –

Verwandte Themen