Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring

_Créditos das imagens: ChatGPT_ ### LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring Resolver o problema do [Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring/description/) é um exercício clássico de programação, que desafia desenvolvedores a encontrar a maior substring palindrômica dentro de uma string. Recentemente, exploramos soluções tanto em Harbour quanto em TLPP (Total Language Protheus Programming). Neste artigo, comparamos as implementações nessas duas linguagens, destacando suas semelhanças, diferenças e funcionalidades específicas. #### Implementações em Harbour ##### Versão 5.1 Essa solução utiliza a técnica de expansão a partir do centro do palíndromo. Cada caractere ou par de caracteres consecutivos é considerado um possível "centro". O algoritmo expande em ambas as direções enquanto os caracteres forem iguais, retornando o maior palíndromo encontrado. ##### Versão 5....

Recuperar a Senha do Usuário 'SA' em Banco de Dados Microsoft SQL

Boa Tarde Galera,

Tive um problema com dois banco de dados ano passado, onde tive que recuperar a senha do usuário 'SA' (Para quem não conhece Microsoft SQL usuário 'SA' é o SysAdmin)

Resolvi fazer na época um Batch File para fazer isso já que a onda agora é PowerShell resolvi atualizar o script que segue abaixo:

<#
+------+-----------------------------+------+-----------+-------------------+
|Nome | Reset Pwd SA | Data | 09/03/2012| Version | 1.0 |
+------+-----------------------------+------+-----------+-------------------+
|Autor | Fernando Willian de Souza Furtado |
+------+--------------------------------------------------------------------+
|Uso | Reiniciar a Senha do Usuário SA |
|-----------------------------------------------------------+---------------+
| | Param. Name | Type | Descricao | Default |
+------+----------------+--------+--------------------------+---------------+
|Param.| $InstanceName | String | Nome da | MSSQLSERVER |
| | | | Instancia do SQL | |
| | $PwdNew | String | Senha para usuário SA | 123456 |
+------+----------------+--------+--------------------------+---------------+
|Obs. | Script utilizado em ultimo caso para resetar a |
| | senha do usuário SA no Microsoft SQL Server. |
| | Pois o mesmo reinicia o serviço da Instancia do SQL Server |
+------+--------------------------------------------------------------------+
#>

Param
(
[String] $InstanceName,
[String] $PwdNew
)

Write-Host -ForegroundColor Green '+------+-----------------------------+------+-----------+-------------------+'
Write-Host -ForegroundColor Green '|Nome | Reset Pwd SA | Data | 09/03/2012| Version | 1.0 |'
Write-Host -ForegroundColor Green '+------+-----------------------------+------+-----------+-------------------+'
Write-Host -ForegroundColor Green '|Autor | Fernando Willian de Souza Furtado |'
Write-Host -ForegroundColor Green '+------+--------------------------------------------------------------------+'
Write-Host -ForegroundColor Green '|Uso | Reiniciar a Senha do Usuário SA |'
Write-Host -ForegroundColor Green '|-----------------------------------------------------------+---------------+'
Write-Host -ForegroundColor Green '| | Param. Name | Type | Descricao | Default |'
Write-Host -ForegroundColor Green '+------+----------------+--------+--------------------------+---------------+'
Write-Host -ForegroundColor Green '|Param.| $InstanceName | String | Nome da | MSSQLSERVER |'
Write-Host -ForegroundColor Green '| | | | Instancia do SQL | |'
Write-Host -ForegroundColor Green '| | $PwdNew | String | Senha para usuário SA | 123456 |'
Write-Host -ForegroundColor Green '+------+----------------+--------+--------------------------+---------------+'
Write-Host -ForegroundColor Green '|Obs. | Script utilizado em ultimo caso para resetar a |'
Write-Host -ForegroundColor Green '| | senha do usuário SA no Microsoft SQL Server. |'
Write-Host -ForegroundColor Green '| | Pois o mesmo reinicia o serviço da Instancia do SQL Server |'
Write-Host -ForegroundColor Green '+------+--------------------------------------------------------------------+'

Write-Host -ForegroundColor Green "*** Iniciando Processo de Alteração de Senha SA do Microsoft SQL Server ***"

if ($InstanceName -eq ''){
$InstanceName = "MSSQLSERVER";
}

if($PwdNew -eq ''){
$PwdNew = "123456";
}

Write-Host -ForegroundColor Green "Nome da Instancia: $InstanceName"
Write-Host -ForegroundColor Green "Senha : $PwdNew"

##Declareção de Variaveis
$FileName = 'ResetPwdSA_'+(Get-Date -UFormat %Y%m%d_%H_%M)+'.Sql'
$TempPath = (Get-ChildItem Env:Tmp | Select-Object Value).Value
$QueryPathAndFile = $TempPath+"\"+$FileName
$RegPath = 'HKLM:\Software\Microsoft\MSSQLServer\'+$InstanceName+'\';
$lExistsLoginMode = Get-ItemProperty -Path $RegPath | Select-Object LoginMode
$LinePwdSA = "sp_password @old=Null, @new='"+$PwdNew+"', @loginame='sa'"

#Write-Host "+---------------------------------------------------+"
#Write-Host "| Declaracao de Variaveis |"
#Write-Host "+---------------------------------------------------+"

#Write-Host " Variavel Conteudo "
#Write-Host "+--------------------+-------------"
#Write-Host "| FileName |"$FileName
#Write-Host "| TempPath |"$TempPath
#Write-Host "| QueryPathAndFile |"$QueryPathAndFile
#Write-Host "| RegPath |"$RegPath
#Write-Host "| lExistsLoginMode |"$lExistsLoginMode

#Altera o Tipo de Login para Mixed Mode (Windows Authentication e SQL Authentication)
if ($lExistsLoginMode -eq $null){
Write-Debug 'Nao Existe Chave LoginMode'
New-ItemProperty -Path $RegPath -Name 'LoginMode' -Value 2 -PropertyType DWord
}
else{
Write-Debug 'Existe Chave LoginMode'
Set-ItemProperty -Path $RegPath -Name 'LoginMode' -Value 2
}

#Cria o Arquivo Cria o Script em SQL que deve ser utilizado para alterar a Senha do Usuário SA
Write-Host -ForegroundColor Green 'Cria o Arquivo de Script SQL'

New-Item -Path $TempPath -Name $FileName -ItemType File | Out-Null

#Adiciona o Conteudo do Arquivo
Write-Host -ForegroundColor Green 'Adiciona o Conteudo no Arquivo'

Add-Content -Path $QueryPathAndFile -Value 'Alter Login [sa] Enable'
Add-Content -Path $QueryPathAndFile -Value 'Go'
Add-Content -Path $QueryPathAndFile -Value $LinePwdSA
Add-Content -Path $QueryPathAndFile -Value 'Go'

#Write-Host '****Conteudo do Arquivo****'
#Write-Host (Get-Content -Path $QueryPathAndFile)

#Executa a Query com conexão DAC (Dedicated Admin Connection)
Write-Host -ForegroundColor Green 'Executa o script utilizando DAC'

SqlCmd -S Localhost -A -i $QueryPathAndFile

#Apaga o Arquivo de script em SQL
Write-Debug 'Apaga o Aqruivo'

Remove-Item -Path $QueryPathAndFile

#Armazena o ID do Processo do Serviço do SQL Server
Write-Debug 'Armazena o ID do Processo'

$ProcessID = (Get-WmiObject -Class Win32_Service -ComputerName 'LocalHost' | Where-Object {($_.Name -eq $InstanceName)}).ProcessId

Write-Host -ForegroundColor Green "ID do Processo : " $ProcessID "."

#Tenta Parar o Serviço do SQL
Write-Host -ForegroundColor Green 'Tenta Parar o Servico do SQL'

Stop-Service -Name $InstanceName -Force

#Verifica se conseguiu parar o servico do Microsoft SQL Server
If ( (Get-Service -Name $InstanceName | Select-Object Status).Status -eq 'Stopped' ){

#Caso Consiga parar o servico, inicia-o novamente
Write-Host -ForegroundColor Green 'Conseguiu parar o Servico. Iniciando-o Novamente!'

Start-Service -Name $InstanceName
}
else{

#Caso não consiga parar o servico, mata o processo (Apéla..hehehe)
Write-Host -ForegroundColor Green 'Nao foi possivel parar o servico, mata o processo! (Apela)'

(Get-WmiObject -Class Win32_Process -ComputerName 'LocalHost' | Where-Object {$_.ProcessId -eq $ProcessID}).Terminate()

#Inicia o Serviço novamente
Write-Host -ForegroundColor Green 'Inicia o Servico Novamente'

Start-Service -Name $InstanceName
}

Write-Host -ForegroundColor Green 'Processo Concluido!'

Obs: a Logica é bem simples habilita conexão com SQL Authentication (Por default ela vem desabilitado) após isso habilita o usuário 'SA' (por defualt vem desabilitado) e altera a senha do mesmo e para habilitar e definir a senha utilizo uma conexão DAC (Dedicated Admin Connection), a conexão DAC é uma conexão para casos emergenciais (como esse...hehe)  essa é uma conexão somente para um usuário que só pode ser feita local (ou seja somente no servidor físico onde está instalado o MS SQL Server) depois de tudo isso reinicia a instancia do MS SQL Server


Para baixar o original clique aqui

Comentários

Postagens mais visitadas