ソースを参照

Add 'encrypt' setting to MSSQL data source.

Fixes #13629
Ramiro Morales 7 年 前
コミット
37f16ca80a

+ 1 - 5
docs/sources/features/datasources/mssql.md

@@ -32,6 +32,7 @@ Name | Description
 *Database* | Name of your MSSQL database.
 *User* | Database user's login/username
 *Password* | Database user's password
+*Encrypt* | This option determines whether or to which extent a secure SSL TCP/IP connection will be negotiated with the server, default `false` (Grafana v5.4+).
 *Max open* | The maximum number of open connections to the database, default `unlimited` (Grafana v5.4+).
 *Max idle* | The maximum number of connections in the idle connection pool, default `2` (Grafana v5.4+).
 *Max lifetime* | The maximum amount of time in seconds a connection may be reused, default `14400`/4 hours (Grafana v5.4+).
@@ -70,11 +71,6 @@ Example:
 
 Make sure the user does not get any unwanted privileges from the public role.
 
-### Known Issues
-
-MSSQL 2008 and 2008 R2 engine cannot handle login records when SSL encryption is not disabled. Due to this you may receive an `Login error: EOF` error when trying to create your datasource.
-To fix MSSQL 2008 R2 issue, install MSSQL 2008 R2 Service Pack 2. To fix MSSQL 2008 issue, install Microsoft MSSQL 2008 Service Pack 3 and Cumulative update package 3 for MSSQL 2008 SP3.
-
 ## Query Editor
 
 {{< docs-imagebox img="/img/docs/v51/mssql_query_editor.png" class="docs-image--no-shadow" >}}

+ 3 - 1
pkg/tsdb/mssql/mssql.go

@@ -52,12 +52,14 @@ func generateConnectionString(datasource *models.DataSource) string {
 	}
 
 	server, port := hostParts[0], hostParts[1]
-	return fmt.Sprintf("server=%s;port=%s;database=%s;user id=%s;password=%s;",
+	encrypt := datasource.JsonData.Get("sslmode").MustString("false")
+	return fmt.Sprintf("server=%s;port=%s;database=%s;user id=%s;password=%s;encrypt=%s;",
 		server,
 		port,
 		datasource.Database,
 		datasource.User,
 		password,
+		encrypt,
 	)
 }
 

+ 16 - 0
public/app/plugins/datasource/mssql/partials/config.html

@@ -27,6 +27,22 @@
 			<a class="btn btn-secondary gf-form-btn" href="#" ng-click="ctrl.current.secureJsonFields.password = false">reset</a>
 		</div>
 	</div>
+
+	<div class="gf-form">
+		<label class="gf-form-label width-7">Encrypt</label>
+		<div class="gf-form-select-wrapper max-width-15 gf-form-select-wrapper--has-help-icon">
+			<select class="gf-form-input" ng-model="ctrl.current.jsondata.sslmode" ng-options="mode for mode in ['disable', 'false', 'true']" ng-init="ctrl.current.jsondata.sslmode"></select>
+			<info-popover mode="right-absolute">
+				Determines whether or to which extent a secure SSL TCP/IP connection will be negotiated with the server.
+				<ul>
+					<li><i>disable</i> - Data sent between client and server is not encrypted.</li>
+					<li><i>false</i> - Data sent between client and server is not encrypted beyond the login packet. (default)</li>
+					<li><i>true</i> - Data sent between client and server is encrypted.</li>
+				</ul>
+				If you're using an older version of Microsoft SQL Server like 2008 and 2008R2 you may need to disable encryption to be able to connect.
+			</info-popover>
+		</div>
+	</div>
 </div>
 
 <b>Connection limits</b>