ビルドされていない4Dから4D Serverにクライアントとして接続する場合,「サーバーに接続」画面を起動し,サーバー公開名を選択するか,サーバーIPアドレスまたはDNSホスト名を入力してサーバーにアクセスするのが標準的な手順ですが .4DLink ファイルをストラクチャ/プロジェクトファイルの代わりに開くことにより「サーバーに接続」画面をスキップして直接サーバーに接続することもできます。 .4DLink ファイルはOPEN DATABASE
で開くこともできます。
.4DLink ファイルは,XML形式の標準テキストファイルです。XML構造のスキーマは,アプリケーションパッケージ内のdatabase_link.dtd ファイルに記述されています。具体的には,下記の接続オプションを指定することができます。
is_remote
:true
: クライアント接続user_name
: ログインユーザー名password
: パスワードmd5_password
: ハッシュされたパスワードstructure_opening_mode
:0
: 前回と同じ1
: インタープリター2
: コンパイル済server_database_name
: サーバー公開名server_path
: サーバーIPアドレスまたはDNSホスト名open_login_dialog
:true
: ログイン画面を表示するdata_opening_mode
:1
: 前回と同じ2
: データファイルを選択する3
: データファイルを作成する。data_conversion_mode
:0
: 確認する1
: アップグレードしない2
: アップグレードする。structure_conversion_mode
:0
: 確認する1
: アップグレードしない2
: アップグレードする。open_tools
: MSCを起動する。open_in_custom_mode
:true
: カスタムメニューモードで起動するcreate_structure_file
:true
: 起動時に新規ストラクチャ/プロジェクトファイルを作成するstructure_file
: ストラクチャ/プロジェクトファイルのパスcreate_data_file
:true
: 起動時に新規データファイルを作成するdata_file
: データファイルのパス。skip_onstartup_method
:true
: 起動時にOn Startup を実行しないstartup_method
: On Startup の代わりに実行するメソッドdefinition_import_file
: カタログ定義ファイルのパス(内部仕様)resources_import_file
: リソース定義ファイルのパス(内部仕様)reopen_design_windows
:false
: デザインモード開始時にウィンドウを開かないexplorer_groups_file
: エクスプローラーの初期状態を記述したJSONファイルのパス(内部仕様)use_journal_file
:false
: ジャーナルファイルを使用しないuser_param
: コマンドラインパラメーター(CLIの--user-param
およびデータベースパラメーターのUser param valueと同じ)remote_shared_resources
: ビルド版クライアントでローカルキャッシュを共有する(ビルドキーのShareLocalResourcesOnWindowsClient
と同じ)
.4DLink ファイルは,XML形式の標準テキストファイルなので,文字列コマンド・XMLコマンド・PROCESS 4D TAGS
などを活用して動的に生成することができます。以前に接続したことのあるサーバーであれば,Alt
(Macはoption
)キーを押しながら「最近使用したプロジェクト」を選択することにより「サーバーに接続」画面で使用した直近15
回の .4DLink ファイルをみつけることができます。
さまざまなオプションが用意されていますが,使用する頻度が高いのは以下の項目でしょう。
- サーバーIPアドレスまたはDNSホスト名
- サーバー公開名
- ログインユーザー名
- パスワード
注記: サーバーがサブネット上にUDPプロトコルで公開されていれば,サーバーIPアドレスまたはDNSホスト名は任意ですが,たとえ非公開サーバーであっても,サーバー公開名は必須です。サーバーIPアドレスまたはDNSホスト名だけで接続することはできません。
パスワードハッシュですが,19r3はbcrypt の$2y$10
モードが使用されており,20r3以降,bcrypt の$2b$10
モードが使用されています。過去のバージョンでは,MD5をアレンジした独自のハッシュ(Generate digestの_o_4D REST digest モード)が使用されていました。
19r3以降
$md5_password:=Generate digest($password; _o_4D REST digest)
で生成したパスワードをmd5_password
に渡すことはできません。
bcrypt アルゴリズムでは,入力値が同じであっても,違うハッシュが生成されますが,.4DLink ファイルでログインするためには,directory.json ファイルに記録されているハッシュ値をそのまま渡す必要があり,それ以外のハッシュ値は,たとえVerify password hashで合致する正しいハッシュ値であっても,ログインできません。
つまり
$md5_password:=Generate password hash($password; {algorithm: "bcrypt"; cost: 10})
で動的に生成したパスワードをmd5_password
に渡すことはできません。
CHANGE PASSWORD
・Set user properties
・ツールボックスで
パスワードを保存するたびに更新されるSettingsのdirectory.jsonからハッシュをコピーするか,平文のpassword
を使用する必要があります。
以下は .4DLink ファイルを動的に生成してサーバーに接続する例です。
var $is_remote; $open_login_dialog : Boolean
var $server_database_name; $server_path; $user_name; $password; $md5_password; $link : Text
$is_remote:=True
$user_name:="User"
$password:="password"
$server_database_name:="server"
$server_path:="172.16.197.1:19813"
$version:=Application version
$database_shortcut:=DOM Create XML Ref("database_shortcut")
DOM SET XML ATTRIBUTE($database_shortcut; "server_database_name"; $server_database_name)
DOM SET XML ATTRIBUTE($database_shortcut; "server_path"; $server_path)
DOM SET XML ATTRIBUTE($database_shortcut; "is_remote"; $is_remote)
DOM SET XML ATTRIBUTE($database_shortcut; "user_name"; $user_name)
//$md5_password:="$2b$10$tgBupl1q.qWkB52M92fGzeseedHNuGtFLwdXs2iMZ5LpxZSoLRKNm" //from directory.json
If ($password#"")
Case of
: ($version>="1930") & ($md5_password="")
DOM SET XML ATTRIBUTE($database_shortcut; "password"; $password)
: ($version>="1930")
DOM SET XML ATTRIBUTE($database_shortcut; "md5_password"; $md5_password)
Else
$md5_password:=Generate digest($password; 2) // _o_4D REST digest
DOM SET XML ATTRIBUTE($database_shortcut; "md5_password"; $md5_password)
End case
End if
DOM EXPORT TO VAR($database_shortcut; $link)
DOM CLOSE XML($database_shortcut)
var $linkFile : 4D.File
$linkFile:=Folder(Temporary folder; fk platform path).file(Generate UUID+".4DLink")
$linkFile.setText($link)
OPEN DATABASE($linkFile.platformPath)
$linkFile.delete()