오라클 클라우드는 보안으로 인해 DB에 Direct로 연결이 불가능 하며
접속을 하기 위해선 인증이 필요합니다.
Instance 생성 시 제공되는 Key로 SSH Tunnel을 이용하여
Direct로 DB연결을 해보았습니다.
- 테스트 DB : MariaDB
- 컴포넌트 : Devart SecureBridge
uses
.., ScSSHClient, ScBridge, ScSSHUtils, ScUtils, ScSSHChannel;
procedure TForm1.Connect;
begin
//MariaDB 접속정보
FDConnection1.Params.Add('DriverID=MySQL');
FDConnection1.Params.Add('Server=localhost'); //SSH Tunnel을 사용하기 때문에 localhost로 세팅
FDConnection1.Params.Add('Port=3306');
FDConnection1.Params.Add('Database=test');
FDConnection1.Params.Add('Password=admin');
FDConnection1.Params.Add('UserName=admin');
ScSSHClient1.Authentication := atPublicKey;
ScSSHClient1.HostKeyAlgorithms := 'ssh-rsa';
ScSSHClient1.HostKeyName := 'Public IP'; //생성한 Instance의 Public IP
ScSSHClient1.Port := 22;
ScSSHClient1.User := 'Server UserName'; //Server의 UserName
ScSSHClient1.KeyStorage := scFileStorage1; //프로그램 실행 시 scFileStorage 컴포넌트에 설정된 Path에 키파일(.key)이 있으면 자동으로 로드
ScSSHClient1.PrivateKeyName := ScFileStorage1.Keys.Keys[0].KeyName;
//로컬 포트와 서버 포트를 연결하고 발생하는 이벤트에 대하여 Direct 옵션이 False일 경우 자동으로 데이터 암복호화 및 교환
ScSSHChannel1.Client := ScSSHClient1;
ScSSHChannel1.DestHost := 'localhost';
ScSSHChannel1.DestPort := 3306;
ScSSHChannel1.SourcePort := 3306;
try
ScSSHClient1.Connect;
if ScSSHClient1.Connected then begin
ShowMessage('SSHClient Connected.');
ScSSHChannel1.Connect;
if ScSSHChannel1.Connected then begin
ShowMessage('SSHChannel Connected.');
FDConnection1.Connected := True;
end;
end;
except
on E: Exception do begin
ShowMessage(E.Message);
end;
end;
end;
procedure TForm1.ScSSHClient1ServerKeyValidate(Sender: TObject; NewServerKey: TScKey; var Accept: Boolean);
begin
Accept := True;
end;
반응형