AX_RightsCheck(.F.) mit RunShell() jetzt .T. ? [erledigt]

Advantage Database Server

Moderator: Moderatoren

Antworten
DelUser01

AX_RightsCheck(.F.) mit RunShell() jetzt .T. ? [erledigt]

Beitrag von DelUser01 »

Hallo

wieder ein seltsames Verhalten:

Rufe seit kurzem
AX_RightsCheck( .F. )
nach jeder oDac := DacSession():New(...) auf. Bei der Statusüberwachung meines Programms wird jetzt auch der Wert von AX_RightsCheck() abgerufen. Und dabei ist mir aufgefallen:

- Das Programm wird vom Desktop Win 10 gestartet.
- Die Abfrage von AX_RightsCheck() ergibt .F.
- Das Programm ruft sich selbst mit RunShell() nochmals auf.
- Die Abfrage von AX_RightsCheck() ergibt jetzt .T. ! im zweiten Programm
Zuletzt geändert von DelUser01 am Fr, 10. Mär 2017 23:09, insgesamt 1-mal geändert.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: AX_RightsCheck(.F.) mit RunShell() jetzt .T. ?

Beitrag von ramses »

Roland

AX_RightsCheck() gilt NUR für die Session in welcher du den Befehl abgesetzt hast.
Das heisst nach jedem oDac := DacSession():New(...) MUSS er erneut aufgerufen werden sonst gilt der Standardwert .t. so wie du siehst.


Gruss Carlo
Valar Morghulis

Gruss Carlo
DelUser01

Re: AX_RightsCheck(.F.) mit RunShell() jetzt .T. ?

Beitrag von DelUser01 »

Hallo Carlo

mache ich doch - habe mich vielleicht falsch ausgedrückt.
Ablauf immer
:
oDac := DacSession():New(...)
AX_RightsCheck( .F. )
:
DelUser01

Re: AX_RightsCheck(.F.) mit RunShell() jetzt .T. ?

Beitrag von DelUser01 »

Bin ein Stück weiter:

AX_RightsCheck(.F.) direkt nach oder vor DacSession():New bringt garnichts. Zumindest nicht an der Stelle wo ich das aufrufe.
Habe AX_RightsCheck(.F.) jetzt am Ende meiner Startup-Routinen eingesetzt - es scheint es zu gehen.

Und...
...meine Beobachtung hängt nicht mit RunShell() zusammen:
Das erste gestartete Programm hat einige Threads mit Datenbankzugriff. Da in jedem Thread eine eigene DacSession aufgemacht wird habe ich dort auch immer AX_RightsCheck(.F.) ausgeführt. Das mehrfache Aufrufen von AX_RightsCheck(.F.) hat also früher oder später gewirkt.
Das zweite über RunShell() gestartete Programm hat keine Threads mit Datenbankzugriff. AX_RightsCheck(.F.) wurde also nicht mehrmals aufgerufen.

Die Doku von ADS besagt, dass AX_RightsCheck(.F.) nur auf die DBs in der aktuellen WorkArea und ab dem Zeitpunkt des Aufrufs wirkung zeigt. Das müsste doch bedeuten, dass AX_RightsCheck(.F.) in jedem Thread (an der richtigen Stelle) ausgeführt werden muss. Und in Folge dessen auch die Abfrage des Status von AX_RightsCheck() nur bezogen auf die jeweilige WorkArea (Thread) gilt.

Wenn das so wäre stellt sich die Frage, wie kann ich den aktuellen Wert von AX_RightsCheck() in einem Thread abfragen wenn es für AX_RightsCheck() keine weiteren Parameter gibt. Oder so: oDac:AX_RightsCheck() ???

Da macht mir EINE Funktion schon so viel (unnötiges!) Kopfzerbrechen...
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: AX_RightsCheck(.F.) mit RunShell() jetzt .T. ?

Beitrag von ramses »

Hallo Roland

du hast recht. Die Funktion ist aktuell wirklich etwas verwirrend. Ich habe mich seit einiger Zeit nicht mehr mit dieser befasst. Ich verwende Sie in meiner Funktion zum öffnen der Files so:

sele 0
AX_RightsCheck(.F.)
use (fname)
...

die Doku dazu sagt noch folgendes:
Beginning with version 10.0, the client no longer performs rights checking by default. The default behavior is to use “Ignore Rights” regardless of the setting provided by the application.

Das stimmt aber auch nicht mehr: Früher war es möglich(ADS auf Netware) auf Files zuzugreifen auf welche der User keine Rechte hatte, das geht aber heute (ADS Windows) nicht mehr, habe ich geprüft.


Dazu sagt die Doku:
The Advantage Database Server "Ignore Rights" security method for free connections allows you to "hide" files in the database from all users who are not accessing data through an Advantage application.

The first step necessary to provide the Advantage "Ignore Rights" method of security is to have the system administrator remove network access rights from all users who could potentially damage the database. Once network access rights have been revoked from users to the database directory and/or files, users cannot maliciously or accidentally corrupt the database by writing to the database, creating new files, or deleting existing files in the database because they no longer have access to those files.

The second step necessary to provide the Advantage "Ignore Rights" method of security is use the "Ignore Rights" method of Advantage rights checking in your application when opening and creating files for free connections. When a file is to be opened or created by the Advantage Database Server, and "Ignore Rights" security is being used, the Advantage Database Server will NOT verify that the user has sufficient network access to the directory and/or file and will open or create the file for the application

Meine Schlussfolgerung / Vermutung zur Zeit ist die dass die ADSDBE von Alaska hier dazwischen geht und AX_RightsCheck auf TRUE setzt und so die Ursprüngliche Funktion verhindert.



Da macht mir EINE Funktion schon so viel (unnötiges!) Kopfzerbrechen...
Das geht mir jetzt aber genau auch so .....

Gruss Carlo
Valar Morghulis

Gruss Carlo
DelUser01

Re: AX_RightsCheck(.F.) mit RunShell() jetzt .T. ?

Beitrag von DelUser01 »

Hallo Carlo

habe jetzt auch die Funktion vor (jedes) Use gesetzt, dann scheint es zu gehen.

Danke!
Antworten