Можно ли создать SQL-соединение Microsoft SMO с использованием учетных данных сервера в powershell? - PullRequest
0 голосов
/ 09 ноября 2018

Итак, у меня есть следующий код, который, по моему мнению, создает соединение с локальным сервером SQL на моем компьютере с использованием учетных данных Windows.

$ServerObj = New-Object ("Microsoft.SqlServer.Management.Smo.Server") "(local)"

Можно ли указать, что вместо подключения я хочу использовать учетные данные сервера?

т.е. подключиться, используя имя пользователя и пароль сервера, а не мои учетные данные Windows

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

Вы можете использовать следующее:

$server = new-object Microsoft.SqlServer.Management.Smo.Server(DATA_SOURCE)
$conContext = $server.ConnectionContext
$conContext.LoginSecure = $false
$conContext.Login = LOGIN_NAME
$conContext.Password = LOGIN_PASSWORD
$db = $server.Databases.Item(DATABASE_NAME)
0 голосов
/ 09 ноября 2018

Мне всегда нравится такой подход, поэтому мне не нужно писать пароль в моих скриптах ..

# Get Credentials
$credential = Get-Credential -username MyAdminAccount -Message "Account credentials"
$username  = $credential.UserName
$password  = $credential.Password
$password.MakeReadOnly()
$creds = New-Object System.Data.SqlClient.SqlCredential($username, $password)

# Create Connection
$SqlConnection.ConnectionString = "Server=$srv; Database=master; Integrated Security=false"
$SqlConnection.Credential = $creds
$SqlConnection.Open()

# SQL Statement 
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandTimeout = 0
$SqlCmd.CommandText = 'Select * from yourTable' 
$SqlCmd.Connection = $SqlConnection
0 голосов
/ 09 ноября 2018

Вы можете сделать что-то вроде этого -

$srv = new-Object Microsoft.SqlServer.Management.Smo.Server(SourceServerName);  #New SMO Object
$db = New-Object Microsoft.SqlServer.Management.Smo.Database;   #New Database Connection Object
$db = $srv.Databases.Item(SourceDatabaseName);  #Database Information stored in $db

Если у вас есть учетные данные, вы можете построить строку подключения следующим образом -

$ConnectionString = server=*serverName*;database=*databaseName*;user id=*userName*;password=*passWord*;  #For SQL Credentials
$Connection = New-Object System.Data.SQLClient.SQLConnection($ConnectionString)

или

$ConnectionString = "server=*serverName*;database=*databaseName*;user id=*domain\username*;password=*passWord*;trusted_connection=true;"   #For Domain credentials
$Connection = New-Object System.Data.SQLClient.SQLConnection($ConnectionString)

Но описанный выше метод очень чувствителен к SQL-инъекциям.Если вас мало или совсем не беспокоит безопасность, вы можете попробовать что-то вроде вышеупомянутого.

Здесь вы также можете посмотреть другие решения, особенно модуль PowerShell dbatools 1017 *.Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...