2

innoを介してWindows認証を使用してSQL2008に接続する方法を教えてもらえますか?現在、私はado接続を使用してinnoからSQLに接続していますが、ユーザーにはWindows認証オプションも必要です。提案してください。

4

1 に答える 1

3

質問でリンクした例について話しているときは、接続文字列(User Idおよび)から資格情報属性を削除し、次のいずれかを含めるだけで十分です。Password

  1. Integrated Security=SSPI;
  2. Trusted_Connection=True;

この答えはただに基づいthis topicています、私はそれをテストしていません。

アップデート:

それがあなたのやりたいことかどうかはわかりませんが、ここに投稿します。次のスクリプトは、ユーザーが認証モードを選択し、オプションで資格情報を入力できるようにするラジオボタンを備えたカスタムページを作成します。

重要:

これらのクレデンシャルフィールドに対するSQLインジェクションに対する保護はありません。

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

[Code]
const
  LT_WindowsAuthentication = 0;
  LT_SQLServerAuthentication = 1;
var
  LoginType: Integer;
  UsernameEdit: TNewEdit;
  UsernameLabel: TLabel;
  PasswordEdit: TNewEdit;
  PasswordLabel: TLabel;

procedure OnLoginTypeChange(Sender: TObject);
var
  EditColor: TColor;
  LabelColor: TColor;
begin
  LoginType := TNewRadioButton(Sender).Tag;
  UsernameEdit.Enabled := LoginType = LT_SQLServerAuthentication;
  PasswordEdit.Enabled := LoginType = LT_SQLServerAuthentication;
  case LoginType of
    LT_WindowsAuthentication: 
    begin 
      EditColor := clBtnFace;
      LabelColor := clGray;
    end;
    LT_SQLServerAuthentication: 
    begin
      EditColor := clWindow;
      LabelColor := clBlack;
    end;
  end;
  UsernameEdit.Color := EditColor;  
  PasswordEdit.Color := EditColor;
  UsernameLabel.Font.Color := LabelColor;
  PasswordLabel.Font.Color := LabelColor;
end;

procedure InitializeWizard;
var
  LoginPage: TWizardPage;
begin
  LoginPage := CreateCustomPage(wpWelcome, 'DB Login', 'Choose a login type to continue...');
  with TNewRadioButton.Create(WizardForm) do
  begin
    Parent := LoginPage.Surface;
    Left := 0;
    Top := 0;
    Width := LoginPage.Surface.ClientWidth;
    Checked := True;
    Tag := 0;
    Caption := 'Windows authentication';
    OnClick := @OnLoginTypeChange;    
  end;
  with TNewRadioButton.Create(WizardForm) do
  begin
    Parent := LoginPage.Surface;
    Left := 0;
    Top := 20;
    Width := LoginPage.Surface.ClientWidth;
    Checked := False;
    Tag := 1;
    Caption := 'SQL Server authentication';
    OnClick := @OnLoginTypeChange;
  end;

  UsernameLabel := TLabel.Create(WizardForm);
  with UsernameLabel do
  begin
    Parent := LoginPage.Surface;    
    Left := 12;
    Top := 44;
    Width := 200;
    Font.Color := clGray;
    Font.Style := [fsBold];
    Caption := 'Username';
  end;
  UsernameEdit := TNewEdit.Create(WizardForm);
  with UsernameEdit do
  begin
    Parent := LoginPage.Surface;    
    Left := 12;
    Top := UsernameLabel.Top + UsernameLabel.Height + 6;
    Width := 200;
    Color := clBtnFace;
    Enabled := False;    
  end;

  PasswordLabel := TLabel.Create(WizardForm);
  with PasswordLabel do
  begin
    Parent := LoginPage.Surface;    
    Left := 12;
    Top := UsernameEdit.Top + UsernameEdit.Height + 6;
    Width := 200;
    Font.Color := clGray;
    Font.Style := [fsBold];
    Caption := 'Password';
  end;
  PasswordEdit := TNewEdit.Create(WizardForm);
  with PasswordEdit do
  begin
    Parent := LoginPage.Surface;
    Left := 12;
    Top := PasswordLabel.Top + PasswordLabel.Height + 6;
    Width := 200;
    Color := clBtnFace;
    Enabled := False;    
    PasswordChar := '*';
  end;
end;

// and in your connection event then use
case LoginType of
  LT_WindowsAuthentication: 
    ADOConnection.ConnectionString := 
      'Provider=SQLOLEDB;' +                    // provider
      'Data Source=Default\SQLSERVER;' +        // server name
      'Initial Catalog=Northwind;' +            // default database
      'Integrated Security=SSPI;';              // trusted connection      
  LT_SQLServerAuthentication:
    ADOConnection.ConnectionString := 
      'Provider=SQLOLEDB;' +                    // provider
      'Data Source=Default\SQLSERVER;' +        // server name
      'Initial Catalog=Northwind;' +            // default database
      'User Id=' + UsernameEdit.Text + ';' +    // user name
      'Password=' + PasswordEdit.Text + ';';    // password
end;
于 2012-10-04T14:06:13.167 に答える