mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-19 17:22:48 -05:00
[SQL Migration] Properly respect user's encryptConnection and trustServerCertificate settings (#21824)
* WIP * Always get latest current connection * Update more references * Clean up * Clean up * vbump * Update comments * Address PR feedback * Separate into helper methods
This commit is contained in:
@@ -17,6 +17,7 @@ import { logError, TelemetryViews } from '../telemetry';
|
||||
import * as styles from '../constants/styles';
|
||||
import { TableMigrationSelectionDialog } from '../dialog/tableMigrationSelection/tableMigrationSelectionDialog';
|
||||
import { ValidateIrDialog } from '../dialog/validationResults/validateIrDialog';
|
||||
import { getSourceConnectionCredentials, getSourceConnectionProfile, getSourceConnectionQueryProvider, getSourceConnectionUri } from '../api/sqlUtils';
|
||||
|
||||
const WIZARD_TABLE_COLUMN_WIDTH = '200px';
|
||||
const WIZARD_TABLE_COLUMN_WIDTH_SMALL = '170px';
|
||||
@@ -799,15 +800,12 @@ export class DatabaseBackupPage extends MigrationWizardPage {
|
||||
: WIZARD_TABLE_COLUMN_WIDTH;
|
||||
});
|
||||
|
||||
const connectionProfile = await this.migrationStateModel.getSourceConnectionProfile();
|
||||
const queryProvider = azdata.dataprotocol.getProvider<azdata.QueryProvider>(
|
||||
(await this.migrationStateModel.getSourceConnectionProfile()).providerId,
|
||||
azdata.DataProviderType.QueryProvider);
|
||||
|
||||
const connectionProfile = await getSourceConnectionProfile();
|
||||
const queryProvider = await getSourceConnectionQueryProvider();
|
||||
let username = '';
|
||||
try {
|
||||
const query = 'select SUSER_NAME()';
|
||||
const ownerUri = await azdata.connection.getUriForConnection(this.migrationStateModel.sourceConnectionId);
|
||||
const ownerUri = await getSourceConnectionUri();
|
||||
const results = await queryProvider.runQueryAndReturn(ownerUri, query);
|
||||
username = results.rows[0][0]?.displayValue;
|
||||
} catch (e) {
|
||||
@@ -825,7 +823,7 @@ export class DatabaseBackupPage extends MigrationWizardPage {
|
||||
connectionProfile.serverName);
|
||||
|
||||
this._sqlSourceUsernameInput.value = username;
|
||||
this._sqlSourcePassword.value = (await azdata.connection.getCredentials(this.migrationStateModel.sourceConnectionId)).password;
|
||||
this._sqlSourcePassword.value = (await getSourceConnectionCredentials()).password;
|
||||
|
||||
this._windowsUserAccountText.value =
|
||||
this.migrationStateModel._databaseBackup.networkShares[0]?.windowsUser
|
||||
|
||||
@@ -11,7 +11,7 @@ import * as constants from '../constants/strings';
|
||||
import { debounce } from '../api/utils';
|
||||
import * as styles from '../constants/styles';
|
||||
import { IconPathHelper } from '../constants/iconPathHelper';
|
||||
import { getDatabasesList, excludeDatabases, SourceDatabaseInfo } from '../api/sqlUtils';
|
||||
import { getDatabasesList, excludeDatabases, SourceDatabaseInfo, getSourceConnectionProfile } from '../api/sqlUtils';
|
||||
|
||||
export class DatabaseSelectorPage extends MigrationWizardPage {
|
||||
private _view!: azdata.ModelView;
|
||||
@@ -228,7 +228,7 @@ export class DatabaseSelectorPage extends MigrationWizardPage {
|
||||
}
|
||||
|
||||
private async _loadDatabaseList(stateMachine: MigrationStateModel, selectedDatabases: string[]): Promise<void> {
|
||||
const allDatabases = (<azdata.DatabaseInfo[]>await getDatabasesList(await stateMachine.getSourceConnectionProfile()));
|
||||
const allDatabases = (<azdata.DatabaseInfo[]>await getDatabasesList(await getSourceConnectionProfile()));
|
||||
|
||||
const databaseList = allDatabases
|
||||
.filter(database => !excludeDatabases.includes(database.options.name))
|
||||
|
||||
@@ -14,7 +14,7 @@ import { WIZARD_INPUT_COMPONENT_WIDTH } from './wizardController';
|
||||
import * as utils from '../api/utils';
|
||||
import { azureResource } from 'azurecore';
|
||||
import { AzureSqlDatabaseServer, getVMInstanceView, SqlVMServer } from '../api/azure';
|
||||
import { collectSourceLogins, collectTargetLogins, isSysAdmin, LoginTableInfo } from '../api/sqlUtils';
|
||||
import { collectSourceLogins, collectTargetLogins, getSourceConnectionId, getSourceConnectionProfile, isSourceConnectionSysAdmin, LoginTableInfo } from '../api/sqlUtils';
|
||||
import { NetworkInterfaceModel } from '../api/dataModels/azure/networkInterfaceModel';
|
||||
|
||||
export class LoginMigrationTargetSelectionPage extends MigrationWizardPage {
|
||||
@@ -66,8 +66,8 @@ export class LoginMigrationTargetSelectionPage extends MigrationWizardPage {
|
||||
CSSStyles: { ...styles.BODY_CSS }
|
||||
}).component();
|
||||
|
||||
const hasSysAdminPermissions: boolean = await isSysAdmin(this.migrationStateModel.sourceConnectionId);
|
||||
const connectionProfile: azdata.connection.ConnectionProfile = await this.migrationStateModel.getSourceConnectionProfile();
|
||||
const hasSysAdminPermissions: boolean = await isSourceConnectionSysAdmin();
|
||||
const connectionProfile: azdata.connection.ConnectionProfile = await getSourceConnectionProfile();
|
||||
const permissionsInfoBox = this._view.modelBuilder.infoBox()
|
||||
.withProps({
|
||||
style: 'warning',
|
||||
@@ -331,7 +331,7 @@ export class LoginMigrationTargetSelectionPage extends MigrationWizardPage {
|
||||
// Collect source login info here, as it will speed up loading the next page
|
||||
const sourceLogins: LoginTableInfo[] = [];
|
||||
sourceLogins.push(...await collectSourceLogins(
|
||||
this.migrationStateModel.sourceConnectionId,
|
||||
await getSourceConnectionId(),
|
||||
this.migrationStateModel.isWindowsAuthMigrationSupported));
|
||||
this.migrationStateModel._loginMigrationModel.collectedSourceLogins = true;
|
||||
this.migrationStateModel._loginMigrationModel.loginsOnSource = sourceLogins;
|
||||
|
||||
@@ -10,7 +10,7 @@ import { MigrationStateModel, StateChangeEvent } from '../models/stateMachine';
|
||||
import * as constants from '../constants/strings';
|
||||
import { debounce, getLoginStatusImage, getLoginStatusMessage } from '../api/utils';
|
||||
import * as styles from '../constants/styles';
|
||||
import { collectSourceLogins, collectTargetLogins, LoginTableInfo } from '../api/sqlUtils';
|
||||
import { collectSourceLogins, collectTargetLogins, getSourceConnectionId, LoginTableInfo } from '../api/sqlUtils';
|
||||
import { IconPathHelper } from '../constants/iconPathHelper';
|
||||
import * as utils from '../api/utils';
|
||||
import { LoginType } from '../models/loginMigrationModel';
|
||||
@@ -352,7 +352,7 @@ export class LoginSelectorPage extends MigrationWizardPage {
|
||||
// execute a query against the source to get the logins
|
||||
try {
|
||||
sourceLogins.push(...await collectSourceLogins(
|
||||
stateMachine.sourceConnectionId,
|
||||
await getSourceConnectionId(),
|
||||
stateMachine.isWindowsAuthMigrationSupported));
|
||||
stateMachine._loginMigrationModel.collectedSourceLogins = true;
|
||||
stateMachine._loginMigrationModel.loginsOnSource = sourceLogins;
|
||||
|
||||
@@ -22,6 +22,7 @@ import { logError, TelemetryViews } from '../telemetry';
|
||||
import { TdeConfigurationDialog } from '../dialog/tdeConfiguration/tdeConfigurationDialog';
|
||||
import { TdeMigrationModel } from '../models/tdeModels';
|
||||
import * as os from 'os';
|
||||
import { getSourceConnectionProfile } from '../api/sqlUtils';
|
||||
|
||||
export interface Product {
|
||||
type: MigrationTargetType;
|
||||
@@ -404,7 +405,7 @@ export class SKURecommendationPage extends MigrationWizardPage {
|
||||
CSSStyles: { 'margin': '12px 0' }
|
||||
}).component();
|
||||
|
||||
this._serverName = this.migrationStateModel.serverName || (await this.migrationStateModel.getSourceConnectionProfile()).serverName;
|
||||
this._serverName = this.migrationStateModel.serverName || (await getSourceConnectionProfile()).serverName;
|
||||
|
||||
const miDialog = new AssessmentResultsDialog('ownerUri', this.migrationStateModel, constants.ASSESSMENT_TILE(this._serverName), this, MigrationTargetType.SQLMI);
|
||||
const vmDialog = new AssessmentResultsDialog('ownerUri', this.migrationStateModel, constants.ASSESSMENT_TILE(this._serverName), this, MigrationTargetType.SQLVM);
|
||||
|
||||
@@ -9,6 +9,7 @@ import { MigrationWizardPage } from '../models/migrationWizardPage';
|
||||
import { MigrationSourceAuthenticationType, MigrationStateModel, StateChangeEvent } from '../models/stateMachine';
|
||||
import * as constants from '../constants/strings';
|
||||
import { createLabelTextComponent, createHeadingTextComponent, WIZARD_INPUT_COMPONENT_WIDTH } from './wizardController';
|
||||
import { getSourceConnectionCredentials, getSourceConnectionProfile, getSourceConnectionUri } from '../api/sqlUtils';
|
||||
|
||||
export class SqlSourceConfigurationPage extends MigrationWizardPage {
|
||||
private _view!: azdata.ModelView;
|
||||
@@ -51,10 +52,10 @@ export class SqlSourceConfigurationPage extends MigrationWizardPage {
|
||||
|
||||
private async createSourceCredentialContainer(): Promise<azdata.FormComponent> {
|
||||
|
||||
const connectionProfile = await this.migrationStateModel.getSourceConnectionProfile();
|
||||
const queryProvider = azdata.dataprotocol.getProvider<azdata.QueryProvider>((await this.migrationStateModel.getSourceConnectionProfile()).providerId, azdata.DataProviderType.QueryProvider);
|
||||
const connectionProfile = await getSourceConnectionProfile();
|
||||
const queryProvider = azdata.dataprotocol.getProvider<azdata.QueryProvider>(connectionProfile.providerId, azdata.DataProviderType.QueryProvider);
|
||||
const query = 'select SUSER_NAME()';
|
||||
const results = await queryProvider.runQueryAndReturn(await (azdata.connection.getUriForConnection(this.migrationStateModel.sourceConnectionId)), query);
|
||||
const results = await queryProvider.runQueryAndReturn(await getSourceConnectionUri(), query);
|
||||
const username = results.rows[0][0].displayValue;
|
||||
this.migrationStateModel._authenticationType = connectionProfile.authenticationType === azdata.connection.AuthenticationType.SqlLogin
|
||||
? MigrationSourceAuthenticationType.Sql
|
||||
@@ -129,7 +130,7 @@ export class SqlSourceConfigurationPage extends MigrationWizardPage {
|
||||
}
|
||||
}).component();
|
||||
this._password = this._view.modelBuilder.inputBox().withProps({
|
||||
value: (await azdata.connection.getCredentials(this.migrationStateModel.sourceConnectionId)).password,
|
||||
value: (await getSourceConnectionCredentials()).password,
|
||||
required: true,
|
||||
inputType: 'password',
|
||||
width: WIZARD_INPUT_COMPONENT_WIDTH
|
||||
|
||||
@@ -22,6 +22,7 @@ import * as styles from '../constants/styles';
|
||||
import { MigrationLocalStorage, MigrationServiceContext } from '../models/migrationLocalStorage';
|
||||
import { azureResource } from 'azurecore';
|
||||
import { ServiceContextChangeEvent } from '../dashboard/tabBase';
|
||||
import { getSourceConnectionProfile } from '../api/sqlUtils';
|
||||
|
||||
export const WIZARD_INPUT_COMPONENT_WIDTH = '600px';
|
||||
export class WizardController {
|
||||
@@ -33,7 +34,7 @@ export class WizardController {
|
||||
private readonly _serviceContextChangedEvent: vscode.EventEmitter<ServiceContextChangeEvent>) {
|
||||
}
|
||||
|
||||
public async openWizard(connectionId: string): Promise<void> {
|
||||
public async openWizard(): Promise<void> {
|
||||
const api = (await vscode.extensions.getExtension(mssql.extension.name)?.activate()) as mssql.IExtension;
|
||||
if (api) {
|
||||
this.extensionContext.subscriptions.push(this._model);
|
||||
@@ -41,7 +42,7 @@ export class WizardController {
|
||||
}
|
||||
}
|
||||
|
||||
public async openLoginWizard(connectionId: string): Promise<void> {
|
||||
public async openLoginWizard(): Promise<void> {
|
||||
const api = (await vscode.extensions.getExtension(mssql.extension.name)?.activate()) as mssql.IExtension;
|
||||
if (api) {
|
||||
this.extensionContext.subscriptions.push(this._model);
|
||||
@@ -50,7 +51,7 @@ export class WizardController {
|
||||
}
|
||||
|
||||
private async createWizard(stateModel: MigrationStateModel): Promise<void> {
|
||||
const serverName = (await stateModel.getSourceConnectionProfile()).serverName;
|
||||
const serverName = (await getSourceConnectionProfile()).serverName;
|
||||
this._wizardObject = azdata.window.createWizard(
|
||||
loc.WIZARD_TITLE(serverName),
|
||||
'MigrationWizard',
|
||||
@@ -198,7 +199,7 @@ export class WizardController {
|
||||
}
|
||||
|
||||
private async createLoginWizard(stateModel: MigrationStateModel): Promise<void> {
|
||||
const serverName = (await stateModel.getSourceConnectionProfile()).serverName;
|
||||
const serverName = (await getSourceConnectionProfile()).serverName;
|
||||
this._wizardObject = azdata.window.createWizard(
|
||||
loc.LOGIN_WIZARD_TITLE(serverName),
|
||||
'LoginMigrationWizard',
|
||||
|
||||
Reference in New Issue
Block a user