Segurança ao conectar o Shiny à uma base postgreSQL

Boa noite, pessoal!

Estou fazendo um app em Shiny. Até então utilizava uma base pequena, então deixava como .csv e subia para o servidor com os demais arquivos.

Agora pretendo aumentar a base, então pensei em fazer uma conexão direto com o postgreSQL.

Como pretendo disponibilizar o app online, fiquei preocupado com a segurança. É seguro deixar a conexão usando dbConnect() como está no exemplo ? Digo, existe alguma forma das pessoas verem o username, password, etc… ?

Se não, qual seria a outra forma?

Exemplo:

library(shiny)
library(DBI)

ui <- fluidPage(
  numericInput("nrows", "Enter the number of rows to display:", 5),
  tableOutput("tbl")
)

server <- function(input, output, session) {
  output$tbl <- renderTable({
    conn <- dbConnect(
      drv = RMySQL::MySQL(),
      dbname = "shinydemo",
      host = "shiny-demo.csa7qlmguqrf.us-east-1.rds.amazonaws.com",
      username = "guest",
      password = "guest")
    on.exit(dbDisconnect(conn), add = TRUE)
    dbGetQuery(conn, paste0(
      "SELECT * FROM City LIMIT ", input$nrows, ";"))
  })
}

shinyApp(ui, server)

Peguei o exemplo no https://shiny.rstudio.com mesmo.

Oi, @rtheodoro

Eu sou leigo em segurança Web, então não vou me arriscar a chamar qualquer prática de segura. Mas posso te passar algumas informações que podem te ajudar nessa discussão:

  • O código em R que geram o aplicativo não podem ser acessados pelo usuário, a não ser que você explicitamente permita: Shiny - Display modes

  • No artigo do RStudio de onde você retirou o código há uma nota sobre tomar cuidado com SQL injection, mas não há notas sobre não colocar essas informações no script. Todos os exemplos que vi com conexão a banco de dados também colocam os dados de autenticação no script: Shiny - Persistent data storage in Shiny apps

  • Você também pode controlar quais IPs têm acesso ao seu banco. Essa é documentação de como seria configurado se o app estivesse no shinyapps.io: Chapter 3 Applications | shinyapps.io user guide

1 curtida

Obrigado, @wamorim ! Vou dar uma olhada nesses links!