AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken UniDAC Firebird Roles Casesensitive

UniDAC Firebird Roles Casesensitive

Offene Frage von "grl"
Ein Thema von grl · begonnen am 18. Apr 2020 · letzter Beitrag vom 24. Apr 2020
Antwort Antwort
grl

Registriert seit: 5. Feb 2007
174 Beiträge
 
FreePascal / Lazarus
 
#1

UniDAC Firebird Roles Casesensitive

  Alt 18. Apr 2020, 01:20
Datenbank: Firebird • Version: 3 • Zugriff über: UniDAC 8.1.2
Tag!

Mit Firebird SQL Dialect 3 können Roles auf Case-Sensitive sein wie Tabellen- und Feldnamen auch.
Mit UniDAC (hier: 8.1.2) funktioniert das aber nicht.

Firebird 3:
Code:
CREATE ROLE "Testrole";
GRANT ALL ON "Testtable" TO ROLE "Testrole";
und in meinem Quellcode:
Code:
DB.SpecificOptions.Values['Role']:='"Testrole"';
Das funktioniert nicht, der User hat keine Rechte und CURRENT_ROLE in Firebird ist NONE.



Wenn ich zu Roles ohne Anführungszeichen wechsle gehts:
Firebird 3:
Code:
CREATE ROLE TESTROLE;
GRANT ALL ON "Testtable" TO ROLE TESTROLE;
und in meinem Quellcode:
Code:
DB.SpecificOptions.Values['Role']:='TESTROLE';
Das geht wie erwartet.


Aber die Roles sind von einer anderen Applikation als case sensitive vorgegeben - also muss das sein.
Weiß jemand wie das mit UniDAC geht?


Danke
Luggi
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: UniDAC Firebird Roles Casesensitive

  Alt 18. Apr 2020, 08:31
Die Schreibweise mit den doppelten Anführungszeichen halte ich für falsch.
DB haben ihre (meist etwas) unterschiedlichen Eigenarten, um so etwas wie Case Sensivity und den ganzen Kram zu ermöglichen (Sonderzeichen aller Art, Leerzeichen, Emoticons)
Doppelte Anführungszeichen sind dafür nicht ungewöhnlich.

Wie eine Client Lib damit umgeht, ist noch was anderes. Ich hab keinen Zugriff auf die von Dir genannte.
Mich wundert es nicht, dass Dein Versuch nicht funktioniert.

Auf den Punkt:
Ein "andere App", die solche Vorgaben macht, kann höchstens logische Rollen meinen und die physischen einer DB.
Ich würde ein Mapping anlegen, dass den Zusammenhang definiert und mit den klassischen Mitteln arbeiten.
Gruß, Jo
  Mit Zitat antworten Zitat
grl

Registriert seit: 5. Feb 2007
174 Beiträge
 
FreePascal / Lazarus
 
#3

AW: UniDAC Firebird Roles Casesensitive

  Alt 18. Apr 2020, 09:52
Die Schreibweise mit den doppelten Anführungszeichen halte ich für falsch.
DB haben ihre (meist etwas) unterschiedlichen Eigenarten, um so etwas wie Case Sensivity und den ganzen Kram zu ermöglichen (Sonderzeichen aller Art, Leerzeichen, Emoticons)
Doppelte Anführungszeichen sind dafür nicht ungewöhnlich.
Die doppelten Anführungszeichen sind richtig. Der Firebird-SQL Dialect 3 macht das so. z.B. würde ein Select dann so aussehen:
Code:
SELECT "Feldname", "FeldName", "feldname" FROM "Tabelle";
und du hättest drei verschiedene Felder gewählt.
Das gleiche gilt für Roles. Wird ein externes Datenbank-Tool wie z.B. RedAdmin verwendet und man gibt die Roles genau so an wie ich das mache (also "Role") dann geht alles wunderbar.

Auf den Punkt:
Ein "andere App", die solche Vorgaben macht, kann höchstens logische Rollen meinen und die physischen einer DB.
Ich würde ein Mapping anlegen, dass den Zusammenhang definiert und mit den klassischen Mitteln arbeiten.
Bei einem Mapping würden aber die (im Programm sichtbaren) Roles nicht gleich sein wie im anderen Programm.
Lieber wäre mir die Roles einfach so zu benutzen wie vorgesehen und nicht einen offensichtlichen Bug (bei mir oder bei UniDAC) mit einer Krücke zu umgehen.

Gruß
Luggi
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: UniDAC Firebird Roles Casesensitive

  Alt 18. Apr 2020, 10:45
Die Schreibweise mit den doppelten Anführungszeichen halte ich für falsch.
DB haben ihre (meist etwas) unterschiedlichen Eigenarten, um so etwas wie Case Sensivity und den ganzen Kram zu ermöglichen (Sonderzeichen aller Art, Leerzeichen, Emoticons)
Doppelte Anführungszeichen sind dafür nicht ungewöhnlich.
Die doppelten Anführungszeichen sind richtig. Der Firebird-SQL Dialect 3 macht das so. z.B. würde ein Select dann so aussehen:
Code:
SELECT "Feldname", "FeldName", "feldname" FROM "Tabelle";
und du hättest drei verschiedene Felder gewählt.
Ja, in SQL ist es so richtig, es funktioniert ja auch. Ich hab mich undeutlich ausgedrückt, die Übernahme der Schreibweise in Delphi halte ich für mindestens fraglich. Und da kann man spekulieren oder in den Referenzen schauen, vielleicht ist es kein Bug, sondern wird einfach nicht unterstützt.

Ebenso fraglich scheint mir der Wunsch, Datenbankobjekte so nennen zu wollen, wie ein drittes Programm es "vorgibt".
Die Schreibweise von Objekten ist eine Implementierungsfrage, ob es um Rollen oder um Tabellen geht. Es handelt sich nicht um Daten, über die man die volle Hoheit haben sollte.
Sinn macht das eigentlich nur, wenn man versucht, eine Datenbank-Migration plant und einem bestehenden Programm eine andere DB unterjubeln will.

Was spricht gegen ein Mapping? Du bennenst Deine Rollen optisch, aus Nutzerperspektive genau so wie gewohnt und verwendest intern was anderes. Es bietet m.E. nur Vorteile, man könnte von da an die Rollenbezeichnungen bspw. übersetzen.
Gruß, Jo
  Mit Zitat antworten Zitat
grl

Registriert seit: 5. Feb 2007
174 Beiträge
 
FreePascal / Lazarus
 
#5

AW: UniDAC Firebird Roles Casesensitive

  Alt 18. Apr 2020, 11:02
Ja, in SQL ist es so richtig, es funktioniert ja auch. Ich hab mich undeutlich ausgedrückt, die Übernahme der Schreibweise in Delphi halte ich für mindestens fraglich. Und da kann man spekulieren oder in den Referenzen schauen, vielleicht ist es kein Bug, sondern wird einfach nicht unterstützt.
Es ist ein Bug - bei mir oder UniDAC. Die Referenzen sind eindeutig: mit double quotes.
Und mit anderen Tools funktioniert es - übrigens auch mit anderen Access-Components wie z.B. UIB.
Und bevor der Vorschlag kommt: Das ganze Ding von UniDAC auf was anderes umzustellen steht nicht zur Debatte - der Aufwand wäre definitiv zu groß.

Ebenso fraglich scheint mir der Wunsch, Datenbankobjekte so nennen zu wollen, wie ein drittes Programm es "vorgibt".
Die Schreibweise von Objekten ist eine Implementierungsfrage, ob es um Rollen oder um Tabellen geht. Es handelt sich nicht um Daten, über die man die volle Hoheit haben sollte.
Sinn macht das eigentlich nur, wenn man versucht, eine Datenbank-Migration plant und einem bestehenden Programm eine andere DB unterjubeln will.
Die Datenbank ist aber so und daher so zu nutzen. Und nein, in ganz vielen Fällen hat man nicht die volle Hoheit über ein Datenbank-Design sondern muss nehmen was vorhanden ist.

Was spricht gegen ein Mapping? Du bennenst Deine Rollen optisch, aus Nutzerperspektive genau so wie gewohnt und verwendest intern was anderes. Es bietet m.E. nur Vorteile, man könnte von da an die Rollenbezeichnungen bspw. übersetzen.
Daß ich nicht einen Bug mit einer Krücke umgehe. Die Rollen sind so definiert, es ist Standardkonform, also möchte ich sie so nutzen.
Bugs nicht zu suchen und zu fixen sondern zu umgehen ist meiner Meinung nach extrem schlechter Stil und verantwortlich für einen ganzen Haufen Schrott-Software da draussen.


Die Frage bleibt also: Weiß jemand wie man UniDAC beibringt eine Role mit Anführungszeichen zu übernehmen?

Danke
Luggi
  Mit Zitat antworten Zitat
hstreicher

Registriert seit: 21. Nov 2009
220 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: UniDAC Firebird Roles Casesensitive

  Alt 18. Apr 2020, 12:41
Aktuell ist die Unidac 8.1.3 , schon mal ausprobiert ?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#7

AW: UniDAC Firebird Roles Casesensitive

  Alt 18. Apr 2020, 12:54
Zitat:
DB.SpecificOptions.Values['Role']:='"TESTROLE"';
Die Schreibweise mit den doppelten Anführungszeichen halte ich für falsch.
Jupp, wenn die Klasse dort z.B. mit Parameter arbeitet oder die Eingaben ordentlich maskiert (code-injection), dann gehören bei diesem String die " mit zum Namen, den es so aber nicht gibt.

Hast denn mal geschaut, wie das DB.SpecificOptions.Values in der DB ankommt? (SQL-Log, Activities, ...)

Die Möglichkeiten, die ich dann sehen würde:
* direkt via SQL-Statement die Rolle in der Connection setzen (AfterConnect)
* oder es müsste an der Klasse irgendwo ein Property/Option geben, wo man seine Eingaben als case-sensitive markiert (falls der hersteller hier z.B. mit Lowercase bissl nachgeholfen hat)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (18. Apr 2020 um 13:00 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: UniDAC Firebird Roles Casesensitive

  Alt 18. Apr 2020, 13:50
ot

Bugs nicht zu suchen und zu fixen sondern zu umgehen ist meiner Meinung nach extrem schlechter Stil und verantwortlich für einen ganzen Haufen Schrott-Software da draussen.
Volltreffer:
Du sagst es sei ein Bug. Wenn Du Dir so sicher bist, muss er sich ja bei ComponentSource finden. Wenn nicht meldet man ihn.
"Andere Software kann das" ist übrigens kein Hinweis darauf, dass es sich bei der vorliegenden Software um einen Bug handelt. Ich sprach von "nicht implementiert".

Ich habe hier noch nie von jemand verlangt, alles neu zu machen. "Verlangt" ist eh Quatsch, es sind meistens wohlfeile Vorschläge, die unrealistisch sind. Es geht idR um pragmatische Alternativen. Angenommen es ist ein Bug, ist doch einfach die Frage, wie schnell Du als Kunde einen Fix erhälst. Ein Workaround ist demnach nur bedingt eine Stilfrage.

Apropos Stil:
Bei Objektnamen (in der DB und anderswo) auf die Möglichkeit zu verzichten, nationale Spracheigenarten zu verwenden, halte ich nach wie vor für einen sehr guten Weg, Problemen aus dem Weg zu gehen (ohne Funktionseinbuße).

Fachlich bleibe ich dabei, ich "streite" mich nicht mit einer anderen Anwendung um Implementierungsdetails bzw. gebe die vor. Eine Rolle zu kopieren und anders zu benennen wäre eine sehr unaufwändige Lösung, vielleicht beherrscht Firebird auch Rollendefinitionen, die auf Rollen basieren...
Gruß, Jo
  Mit Zitat antworten Zitat
grl

Registriert seit: 5. Feb 2007
174 Beiträge
 
FreePascal / Lazarus
 
#9

AW: UniDAC Firebird Roles Casesensitive

  Alt 18. Apr 2020, 14:25
Aktuell ist die Unidac 8.1.3 , schon mal ausprobiert ?
Noch nicht. Allerdings geben weder Changelog noch ein diff des Sourcecodes irgendein Anzeichen dafür, daß in diesem Bereich etwas geändert wurde.

Hast denn mal geschaut, wie das DB.SpecificOptions.Values in der DB ankommt? (SQL-Log, Activities, ...)
Da hab ich leider keine Möglichkeit gefunden. Die role muss im Verbindungsaufbau gesetzt werden und da hab ich keine Möglichkeit gefunden den zu belauschen. Auch mit tcpdump und wireshark nicht.

* direkt via SQL-Statement die Rolle in der Connection setzen (AfterConnect)
Da hab ich auch keine Möglichkeit gefunden - auch nach langer Analyse des Verbindungsprozesses im Sourcecode von UniDAC via Debugger. Leider ist der Code aufgrund der Unterstützung so vieler verschiedener Datenbanken ziemlich komplex und damit deutlich schwerer zu debuggen als z.B. UIB.
Und die Role nachträglich - also bei aufrechter Connection - zu ändern wird erst ab Firebird 4 unterstützt werden.

* oder es müsste an der Klasse irgendwo ein Property/Option geben, wo man seine Eingaben als case-sensitive markiert (falls der hersteller hier z.B. mit Lowercase bissl nachgeholfen hat)
Hab ich auch nicht gefunden. Wenn man den SQLDialect richtig setzt werden SQL-Strings korrekt gebildet und behandelt. Nur eben die Role nicht.

Ich habe schon einen Support-Case bei DevArt aufgemacht. Aber auch dort ist vermutlich Wochenende... Aber das kennen ja sicher noch andere, daß genau dann, wenn beim Support Wochenende ist die Arbeit hier trotzdem unter den Nägeln brennt. Und dummerweise hab ich mit das Roles-Thema für ziemlich am Ende des Projektes aufgehoben...

Danke
Luggi
  Mit Zitat antworten Zitat
grl

Registriert seit: 5. Feb 2007
174 Beiträge
 
FreePascal / Lazarus
 
#10

AW: UniDAC Firebird Roles Casesensitive

  Alt 24. Apr 2020, 19:22
Für alle die später mal auf diesen Thread stossen:

Es war ein Bug in UniDAC. Devart hat einen Hotfix zur Verfügung gestellt - damit geht es wie gewünscht.

Gruß
Luggi
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz