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