Ejecución de invoke-sqlcmd dentro de Terraform
He creado esto en Terraform: estoy tratando de ejecutar algunos comandos SQL en el servidor SQL después de que se haya construido y se ejecute en el momento correcto. Realmente no puedo usar un nombre de usuario y contraseña para ejecutar el Invoke-sqlcmd, y ¿por qué debería hacerlo cuando Terraform se está ejecutando con la cuenta correcta?
Aquí está mi código:
Recurso “null_resource” “create-sql-user” {
Provisionador “local-exec” {
Comando = <<eot
install-module -name sqlserver -force
invoke-sqlcmd -query “create login [azsg-atp-users-${var.environment}] from external provider” -connectionstring “server=tcp:sqlsvr-${lower(var.locationname)}-${lower(var.resourcename)}-${lower(var.environment)}.database.windows.net,1433;initial catalog=master;persist security info=false;multipleactiveresultsets=false;encrypt=true;trustservercertificate=false;”
eot
intérprete = [“pwsh”, “-command”]
}
depends_on = [“azurerm_sql_firewall_rule.main”]
}
no puedo usar la parte de autenticación de la cadena de conexión para usar integrated security ya que no está permitido. he estado luchando con esto durante días.
¿alguna idea o ejemplos de trabajo sobre este tema?
estoy obteniendo el siguiente error:
error de inicio de sesión para el usuario ”. install-module=”” -name=”” sqlserver=”” -force=”” invoke-sqlcmd=”” -query=”” “create=”” login=”” [azsg-atp-users-${var.environment}]=”” from=”” external=”” provider”=”” -connectionstring=”” “server=”tcp:sqlsvr-${lower(var.locationname)}-${lower(var.resourcename)}-${lower(var.environment)}.database.windows.net,1433;Initial” catalog=”Master;Persist” security=”” info=”False;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;"” eot=”” intérprete=”["pwsh",” “-command”]=”” }=”” depends_on=”["azurerm_sql_firewall_rule.main"]” }=”” no=”” puedo=”” usar=”” la=”” parte=”” de=”” autenticación=”” de=”” la=”” cadena=”” de=”” conexión=”” para=”” usar=”” integrated=”” security=”” ya=”” que=”” no=”” está=”” permitido.=”” he=”” estado=”” luchando=”” con=”” esto=”” durante=”” días.=”” ¿alguna=”” idea=”” o=”” ejemplos=”” de=”” trabajo=”” sobre=”” este=”” tema?=”” estoy=”” obteniendo=”” el=”” siguiente=”” error:=”” error=”” de=”” inicio=”” de=”” sesión=”” para=”” el=”” usuario=””></eot
install-module -name sqlserver -force
invoke-sqlcmd -query “create login [azsg-atp-users-${var.environment}] from external provider” -connectionstring “server=tcp:sqlsvr-${lower(var.locationname)}-${lower(var.resourcename)}-${lower(var.environment)}.database.windows.net,1433;initial catalog=master;persist security info=false;multipleactiveresultsets=false;encrypt=true;trustservercertificate=false;”
eot
intérprete = [“pwsh”, “-command”]
}
depends_on = [“azurerm_sql_firewall_rule.main”]
}
no puedo usar la parte de autenticación de la cadena de conexión para usar integrated security ya que no está permitido. he estado luchando con esto durante días.
¿alguna idea o ejemplos de trabajo sobre este tema?
estoy obteniendo el siguiente error:
error de inicio de sesión para el usuario ”.>
davy.ai
Una posible solución a este problema es utilizar una identidad administrada para los recursos de Azure que requieran acceso al SQL Server. Esto se puede lograr configurando el servicio de Azure como una aplicación de Azure AD o una identidad administrada. Una vez configurada la identidad, puede otorgarle permisos para acceder al SQL Server mediante un grupo de Azure AD o un rol de Control de Acceso Basado en Roles (RBAC).
Luego, puede modificar su código de Terraform para utilizar la identidad administrada para autenticarse con el SQL Server. Esto se puede lograr configurando la propiedad ‘
Authentication
‘ del comando ‘Invoke-Sqlcmd
‘ en ‘ActiveDirectoryIntegrated
‘.Aquí hay un ejemplo de código de Terraform:
En este ejemplo, creamos un SQL Server y una base de datos SQL utilizando los recursos
azurerm_sql_server
yazurerm_sql_database
respectivamente. También creamos una identidad administrada utilizando el recursoazurerm_managed_identity
y le otorgamos el rolContributor
en el SQL Server utilizando el recursoazurerm_role_assignment
.Finalmente, creamos un
null_resource
con un aprovisionador local-exec que utiliza el comandoInvoke-Sqlcmd
para consultar el SQL Server utilizando la identidad administrada para autenticarse.Tenga en cuenta que este ejemplo está simplificado y siempre debe seguir el principio de privilegio mínimo al otorgar permisos a los recursos.