Benutzer-Werkzeuge

Webseiten-Werkzeuge


dba:sqlcl_call_script_for_export_image

SQLcl - Bilder per Job unter Windows mit der Powershell exportieren - Password der Datenbank Anmeldung für den Windows User SYSTEM verschlüsselt hinterlegen

Aufgabe:

Für die Import von Personen Bildern solle die Daten aus dem Personalsystem exportiert werden.

Lösung:

  • Mit SQLcl Script die Daten exportieren
  • Powershell Script für den Aufruf von SQLcl
    • MS Windows Credential Objekt für als Passwort Store

Mit SQLcl Script die Daten exportieren

Über &1 wirde der Export Pfad übergeben!

Datei: exportPersonalBilder.sql

script
 
    var export_path="&1"
 
	ctx.write("Info -- export nach::"+ export_path + "\n" );
 
	// auslesen der Bilddaten
	var  bind_vars = {}
	var  resultData = util.executeReturnList('select DATEINAME_EXPORT,BILD from v_personen where order by 1',bind_vars);
 
	// über alle Bilder exportieren
 
	for (i = 0 ; i < resultData.length ; i++ ) {  
 
	  //ctx.write( resultData[i].DATEINAME_EXPORT  + "\n" ); 
 
	  // Ref auf das Bild
	  var blobStream =  resultData[i].BILD.getBinaryStream(1); 
 
	  // Dateipfad zusammenstellen
 
	  var filepath = export_path + resultData[i].DATEINAME_EXPORT;
 
	  var fileptr = java.nio.file.FileSystems.getDefault().getPath(filepath);  
 
	  ctx.write( "--write  file " + resultData[i].DATEINAME_EXPORT + " to :: "  + fileptr.toString() +"\n" );
 
	   // BLOB extrahieren
	   try {
 
		 java.nio.file.Files.copy(blobStream,fileptr);
 
	   } 
	   catch (e) {
		    ctx.write("EXCEPTION :: "+ e);
	   }
	}
 
/
 
exit

Powershell Script für den Aufruf von SQLcl

Passwort Handling

Da der Job für das Script unter dem system User laufen soll, muss auch das Credential Objekt für diesen User angelegt werden, das kann aber wiederum nur der das Skript aufrufende User.

D.h. es muss das Passwort zuvor über eine Datei inital übergeben werden. Nach dem ersten Lauf wird hier das Password entfernt und in dem Credential Object hinterlegt:

  1. Prüfe ob es ein Credential Objekt gibt
  2. Falls nein, lese Password aus Datei aus verwende das Passwort zum erzeugen des Objektes
  3. Ersetze Password durch Hinweistext
...
 
$act_user_name=[System.Security.Principal.WindowsIdentity]::GetCurrent().Name
 
if (!(test-path -path $oracle_credential)) {
 
    #check if pwd file exits
    if (!(test-path -path $scriptpath\clear_password.txt)) {
            "Ersetze diesen Text mit dem richtigen Password!" | Out-File -FilePath $scriptpath\clear_password.txt
            local-print -text  "!! Edit the file $scriptpath\clear_password.txt to set the correct inital password and run again !!" 
            exit     
    }  
 
    #read password from file
    $clear_pwd=(Get-Item -Path $scriptpath\clear_password.txt | Get-Content -Tail 1)
 
    local-print -text  "Info --  Setze fuer den user $act_user_name das neue Password in $scriptpath\clear_password.txt"
 
    $user_credential =   New-Object System.Management.Automation.PSCredential("$act_user_name", (ConvertTo-SecureString "$clear_pwd" -AsPlainText -Force))
 
    # alternativ prompt for the password!
    #  $user_credential=GET-CREDENTIAL -credential "$db_user"  
 
    # unset
    "Ersetze diesen Text mit dem richtigen Password und loesche die Datei $oracle_credential um das Passwort neu zu setzen!" | Out-File -FilePath $scriptpath\clear_password.txt
 
    export-clixml -InputObject $user_credential -Path $oracle_credential
}
else {
   $user_credential=Import-Clixml -Path $oracle_credential
}
...

siehe dazu auch Wohin nur mit den Passwörtern in Windows und Linux Skripten? - Passwörter in Skripten verschlüsselt hinterlegen.

SQLcl Aufruf

...
 
# set the environment
 
set-item -path env:JAVA_HOME   -value "$java_home"
 
& $sqlcl_bin $db_user/$db_password@$database @$scriptpath\exportPersonalBilder.sql  "$export_path_param" 2>&1 | foreach-object { local-print -text "IMG EXP OUT::",$_.ToString() }
 
...

Quellen

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
dba/sqlcl_call_script_for_export_image.txt · Zuletzt geändert: 2022/07/27 20:08 von gpipperr

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki