def scan()

in db/sqlserver_scanner.py [0:0]


  def scan(self, rds_info, output):
    """Connects to SQL Server database and collects data.

    Args:
      rds_info: Dictionary object with database connection information
      output: Dictionary object to store the collected data

    Returns:
      True if collection is successful
      False otherwise
    """
    queries = self.get_queries()
    collection = {}

    try:
      pyodbc = __import__('pyodbc')
      conn = pyodbc.connect(
        'Driver={SQL Server};' + 
        'SERVER=' + rds_info.host + ',' + str(rds_info.port) +
        ';DATABASE=master' +
        ';UID=' + rds_info.username +
        ';PWD=' + rds_info.password)
            
      for query in queries:
        try:
          cur = conn.cursor()
          cur.execute(query.query) 

          row_headers = [x[0] for x in cur.description]
          query_results = cur.fetchall()

          if query.query_type == "SQLServer_Version":
            version = query_results[0][0]

            collection["version"] = version
            output["version"] = version
          else:
            result_array = []
            for result in query_results:
              result_array.append(dict(zip(row_headers, result)))

            collection[query.query_type] = result_array

        except Exception as ex:  # pylint: disable=broad-except
          if query.query_type == "SQLServer_Version":
            raise ex
          logging.error("Failed to run %s", query.query_type)
          logging.error(ex)
      
      output["SQLServer"] = collection
      return True

    except Exception as e:   # pylint: disable=broad-except
      logging.error("Received an unexpected error")
      logging.error(e)
      return False