configuration.asciidoc 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485
  1. [role="xpack"]
  2. [testenv="platinum"]
  3. [[sql-odbc-setup]]
  4. === Configuration
  5. Once the driver has been installed, in order for an application to be able to connect to {es} through ODBC, a set of configuration parameters must be provided to the driver. Depending on the application, there are generally three ways of providing these parameters:
  6. * through a connection string;
  7. * using a User DSN or System DSN;
  8. * through a File DSN.
  9. DSN (_data source name_) is a generic name given to the set of parameters an ODBC driver needs to connect to a database.
  10. We will refer to these parameters as _connection parameters_ or _DSN_ (despite some of these parameters configuring some other aspects of a driver's functions; e.g. logging, buffer sizes...).
  11. Using a DSN is the most widely used, simplest and safest way of performing the driver configuration. Constructing a connection string, on the other hand, is the most crude way and consequently the least common method.
  12. We will focus on DSN usage only.
  13. [[data-source-administrator]]
  14. ==== 1. Launching ODBC Data Source Administrator
  15. For DSN management, ODBC provides the _ODBC Data Source Administrator_ application, readily installed on all recent desktop Windows operating systems.
  16. - The 32-bit version of the Odbcad32.exe file is located in the `%systemdrive%\Windows\SysWoW64` folder.
  17. - The 64-bit version of the Odbcad32.exe file is located in the `%systemdrive%\Windows\System32` folder.
  18. To launch it, open the search menu - _Win + S_ - and type "ODBC Data Sources (64-bit)" or "ODBC Data Sources (32-bit)" and press _Enter_:
  19. [[launch_administrator]]
  20. .Launching ODBC Data Source Administrator
  21. image:images/sql/odbc/launch_administrator.png[]
  22. Once launched, you can verify that the driver was installed correctly by clicking on the _Drivers_ tab of the ODBC Data Source Administrator and checking that _Elasticsearch Driver_ is present in the list of installed drivers.
  23. You should also see the version number of the installed driver.
  24. [[administrator_drivers]]
  25. .Drivers tab
  26. image:images/sql/odbc/administrator_drivers.png[]
  27. [[dsn-configuration]]
  28. ==== 2. Configure a DSN
  29. The next step is to configure a DSN. You can choose between the following options mapped on the first three tabs of the Administrator application:
  30. * User DSN
  31. +
  32. The connections configured under this tab are only available to the currently logged in user. Each of these DSNs are referred to by a chosen arbitrary name (typically a host or cluster name).
  33. +
  34. The actual set of parameters making up the DSN is stored through the driver in the system registry. Thus, a user will later only need to provide an application with the DSN name in order to connect to the configured {es} instance.
  35. +
  36. * System DSN
  37. +
  38. Similar to a User DSN, except that the connections configured under this tab will be available to all the users configured on the system.
  39. * File DSN
  40. +
  41. This tab contains functionality that will allow to have one set of connection parameters written into a file, rather then the Registry.
  42. +
  43. Such a file can be then shared among multiple systems and the user will need to specify the path to it, in order to have the application connect to the configured {es} instance.
  44. The configuration steps are similar for all the above points. Following is an example of configuring a System DSN.
  45. [discrete]
  46. ===== 2.1 Launch {odbc} DSN Editor
  47. Click on the _System DSN_ tab, then on the _Add..._ button:
  48. [[system_add]]
  49. .Add a new DSN
  50. image:images/sql/odbc/administrator_system_add.png[]
  51. A new window will open, listing all available installed drivers. Click on _{es} Driver_, to highlight it, then on the _Finish_ button:
  52. [[launch_editor]]
  53. .Launch the DSN Editor
  54. image:images/sql/odbc/administrator_launch_editor.png[]
  55. This action closes the previously opened second window and open a new one instead, {odbc}'s DSN Editor:
  56. [[dsn_editor]]
  57. .{odbc} DSN Editor
  58. image:images/sql/odbc/dsn_editor_basic.png[]
  59. This new window has three tabs, each responsible for a set of configuration parameters, as follows.
  60. [discrete]
  61. ===== 2.2 Connection parameters
  62. This tab allows configuration for the following items:
  63. * Name
  64. +
  65. This is the name the DSN will be referred by.
  66. +
  67. NOTE: The characters available for this field are limited to the set permitted for a Registry key.
  68. +
  69. Example: _localhost_
  70. +
  71. * Description
  72. +
  73. This field allows a arbitrary text; generally used for short notes about the configured connection.
  74. +
  75. Example: _Clear-text connection to the local [::1]:9200._
  76. +
  77. * Cloud ID
  78. +
  79. The _Cloud ID_ is a string that simplifies the configuration when connecting to
  80. Elastic's Cloud {ess}; it is obtained from within the Cloud console of each
  81. {es} cluster and encodes the connection parameters to that cluster.
  82. +
  83. NOTE: When this field is provisioned, the _Hostname_, _Port_ and the security
  84. settings are provisioned as well and their respective inputs disabled.
  85. +
  86. * Hostname
  87. +
  88. This field requires an IP address or a resolvable DNS name of the {es} instance that the driver will connect to.
  89. +
  90. Example: _::1_
  91. +
  92. * Port
  93. +
  94. The port on which the {es} listens on.
  95. +
  96. NOTE: If left empty, the default *9200* port number will be used.
  97. +
  98. * Username, Password
  99. +
  100. If security is enabled, these fields will need to contain the credentials of the access user.
  101. At a minimum, the _Name_ and _Hostname_ fields must be provisioned, before the DSN can be saved.
  102. WARNING: Connection encryption is enabled by default. This will need to be changed if connecting to an {es} node with no encryption.
  103. [discrete]
  104. ===== 2.3 Cryptography parameters
  105. One of the following SSL options can be chosen:
  106. * Disabled. All communications unencrypted.
  107. +
  108. The communication between the driver and the {es} instance is performed over a clear-text connection.
  109. +
  110. WARNING: This setting can expose the access credentials to a 3rd party intercepting the network traffic and is not recommended.
  111. +
  112. * Enabled. Certificate not validated.
  113. +
  114. The connection encryption is enabled, but the certificate of the server is not validated.
  115. +
  116. This is currently the default setting.
  117. +
  118. NOTE: This setting allows a 3rd party to act with ease as a man-in-the-middle and thus intercept all communications.
  119. +
  120. * Enabled. Certificate is validated; hostname not validated.
  121. +
  122. The connection encryption is enabled and the driver verifies that server's certificate is valid, but it does *not* verify if the
  123. certificate is running on the server it was meant for.
  124. +
  125. NOTE: This setting allows a 3rd party that had access to server's certificate to act as a man-in-the-middle and thus intercept all the
  126. communications.
  127. +
  128. * Enabled. Certificate is validated; hostname validated.
  129. +
  130. The connection encryption is enabled and the driver verifies that both the certificate is valid, as well as that it is being deployed on
  131. the server that the certificate was meant for.
  132. +
  133. * Enabled. Certificate identity chain validated.
  134. +
  135. This setting is equivalent to the previous one, with one additional check against certificate's revocation. This offers the strongest
  136. security option and is the recommended setting for production deployments.
  137. +
  138. * Certificate File
  139. +
  140. In case the server uses a certificate that is not part of the PKI, for example using a self-signed certificate, you can configure the path to a X.509 certificate file that will be used by the driver to validate server's offered certificate.
  141. +
  142. The driver will only read the contents of the file just before a connection is attempted. See <<connection_testing>> section further on how to check the validity of the provided parameters.
  143. +
  144. NOTE: The certificate file can not be bundled or password protected since the driver will not prompt for a password.
  145. +
  146. If using the file browser to locate the certificate - by pressing the _Browse..._ button - only files with _.pem_ and _.der_ extensions
  147. will be considered by default. Choose _All Files (\*.*)_ from the drop down, if your file ends with a different extension:
  148. +
  149. [[dsn_editor_cert]]
  150. .Certificate file browser
  151. image:images/sql/odbc/dsn_editor_security_cert.png[]
  152. [discrete]
  153. ===== 2.4 Connection parameters
  154. The connection configuration can further be tweaked by the following parameters.
  155. * Request timeout (s)
  156. +
  157. The maximum number of seconds for a request to the server. The value 0 disables the timeout.
  158. This corresponds to the `Timeout` setting in <<odbc-cfg-dsnparams>>.
  159. +
  160. * Max page size (rows)
  161. +
  162. The maximum number of rows that Elasticsearch SQL server should send the driver for one page.
  163. This corresponds to the `MaxFetchSize` setting in <<odbc-cfg-dsnparams>>.
  164. +
  165. * Max page length (MB)
  166. +
  167. The maximum number of megabytes that the driver will accept for one page.
  168. This corresponds to the `MaxBodySizeMB` setting in <<odbc-cfg-dsnparams>>.
  169. +
  170. * Varchar limit
  171. +
  172. The maximum character length of the string type columns.
  173. this correspeonds to the `VarcharLimit` setting in <<odbc-cfg-dsnparams>>.
  174. +
  175. * Floats format
  176. +
  177. How should the floating point numbers be printed, when these are converted to string by the driver.
  178. This corresponds to the `ScientificFloats` setting in <<odbc-cfg-dsnparams>>.
  179. +
  180. * Data encoding
  181. +
  182. How should the data between the server and the driver be encoded as.
  183. This corresponds to the `Packing` setting in <<odbc-cfg-dsnparams>>.
  184. +
  185. * Data compression
  186. +
  187. Should the data between the server and the driver be compressed?
  188. This corresponds to the `Compression` setting in <<odbc-cfg-dsnparams>>.
  189. +
  190. * Follow HTTP redirects
  191. +
  192. Should the driver follow HTTP redirects of the requests to the server?
  193. This corresponds to the `Follow` setting in <<odbc-cfg-dsnparams>>.
  194. +
  195. * Use local timezone
  196. +
  197. Should the driver use machine's local timezone? The default is UTC.
  198. This corresponds to the `ApplyTZ` setting in <<odbc-cfg-dsnparams>>.
  199. +
  200. * Auto-escape PVAs
  201. +
  202. Should the driver auto-escape the pattern-value arguments?
  203. This corresponds to the `AutoEscapePVA` setting in <<odbc-cfg-dsnparams>>.
  204. +
  205. * Multi value field lenient
  206. +
  207. Should the server return one value out of a multi-value field (instead of rejecting the request)?
  208. This corresponds to the `MultiFieldLenient` setting in <<odbc-cfg-dsnparams>>.
  209. +
  210. * Include frozen indices
  211. +
  212. Should the server consider the frozen indices when servicing a request?
  213. This corresponds to the `IndexIncludeFrozen` setting in <<odbc-cfg-dsnparams>>.
  214. +
  215. * Early query execution
  216. +
  217. Should the driver execute a non-parameterized query as soon as it's submitted
  218. for preparation?
  219. This corresponds to the `EarlyExecution` setting in <<odbc-cfg-dsnparams>>.
  220. [[dsn_editor_misc]]
  221. .Connection parameters
  222. image:images/sql/odbc/dsn_editor_misc.png[]
  223. [discrete]
  224. ===== 2.5 Logging parameters
  225. For troubleshooting purposes, the {odbc} offers functionality to log the API calls that an application makes; this is enabled in the Administrator application:
  226. [[administrator_tracing]]
  227. .Enable Application ODBC API logging
  228. image:images/sql/odbc/administrator_tracing.png[]
  229. However, this only logs the ODBC API calls made by the application into the _Driver Manager_ and not those made by the _Driver Manager_ into the driver itself. To enable logging of the calls that the driver receives, as well as internal driver processing events, you can enable driver's logging on Editor's _Logging_ tab:
  230. * Enable Logging?
  231. +
  232. Ticking this will enable driver's logging. A logging directory is also mandatory when this option is enabled (see the next option).
  233. However the specified logging directory will be saved in the DSN if provided, even if logging is disabled.
  234. +
  235. * Log Directory
  236. +
  237. Here is to specify which directory to write the log files in.
  238. +
  239. NOTE: The driver will create *one log file per connection*, for those connections that generate logging messages.
  240. +
  241. * Log Level
  242. +
  243. Configure the verbosity of the logs.
  244. +
  245. [[administrator_logging]]
  246. .Enable driver logging
  247. image:images/sql/odbc/dsn_editor_logging.png[]
  248. +
  249. When authentication is enabled, the password will be redacted from the logs.
  250. NOTE: Debug-logging can quickly lead to the creation of many very large files and generate significant processing overhead. Only enable if
  251. instructed so and preferably only when fetching low volumes of data.
  252. [discrete]
  253. [[connection_testing]]
  254. ===== 2.5 Testing the connection
  255. Once the _Hostname_, the _Port_ (if different from implicit default) and the SSL options are configured, you can test if the provided
  256. parameters are correct by pressing the _Test Connection_ button. This will instruct the driver to connect to the {es} instance and perform
  257. a simple SQL test query. (This will thus require a running {es} instance with the SQL plugin enabled.)
  258. [[dsn_editor_conntest]]
  259. .Connection testing
  260. image:images/sql/odbc/dsn_editor_conntest.png[]
  261. NOTE: When connection testing, all the configured parameters are taken into account, including the logging configuration. This will allow
  262. early detection of potential file/directory access rights conflicts.
  263. See <<alternative_logging>> section further for an alternative way of configuring the logging.
  264. [[available-dsn]]
  265. ==== 3. DSN is available
  266. Once everything is in place, pressing the _Save_ button will store the configuration into the chosen destination (Registry or file).
  267. Before saving a DSN configuration the provided file/directory paths are verified to be valid on the current system. The DSN editor
  268. will however not verify in any way the validity or reachability of the configured _Hostname_ : _Port_. See <<connection_testing>>
  269. for an exhaustive check.
  270. If everything is correct, the name of the newly created DSN will be listed as available to use:
  271. [[system_added]]
  272. .Connection added
  273. image:images/sql/odbc/administrator_system_added.png[]
  274. [[alternative_logging]]
  275. ==== Alternative logging configuration
  276. Due to the specification of the ODBC API, the driver will receive the configured DSN parameters - including the logging ones - only once a
  277. connection API is invoked (such as _SQLConnect_ or _SQLDriverConnect_). The _Driver Manager_ will however always make a set of API calls
  278. into the driver before attempting to establish a connection. To capture those calls as well, one needs to pass logging configuration
  279. parameters in an alternative way. The {odbc} will use an environment variable for this purpose.
  280. Configuring an environment variable is OS specific and not detailed in this guide. Whether the variable should be configured system-wide
  281. or user-specific depends on the way the ODBC-enabled application is being run and if logging should affect the current user only or not.
  282. The definition of the environment variable needs to be done as follows:
  283. * Name: _ESODBC_LOG_DIR_
  284. * Value: [path](?[level]), where:
  285. +
  286. [path] is the path to the directory where the log files will be written into;
  287. +
  288. [level] is optional and can take one of the following values: _debug_, _info_, _warn_, _error_; if not provided, _debug_ is assumed.
  289. [[env_var_logging]]
  290. .Logging environment variable
  291. image:images/sql/odbc/env_var_log.png[]
  292. NOTE: When enabling the logging through the environment variable, the driver will create *one log file per process*.
  293. Both ways of configuring the logging can coexist and both can use the same
  294. destination logging directory. However, one logging message will only be logged
  295. once, the connection logging taking precedence over the environment variable
  296. logging.
  297. [[odbc-cfg-dsnparams]]
  298. [discrete]
  299. ==== Connection string parameters
  300. The following is a list of additional parameters that can be configured for a
  301. particular connection, in case the default behavior of the driver is not
  302. suitable. For earlier versions of the driver, this needs to be done within the
  303. client application, in a manner particular to that application, generally in a
  304. free text input box (sometimes named "Connection string", "String extras", or
  305. similar). The format of the string is `Attribute1=Value1`. Multiple attributes
  306. can be specified, separated by a semicolon
  307. `Attribute1=Value1;Attribute2=Value2;`. The attribute names are given below.
  308. `Timeout` (default: `0`)::
  309. The maximum time (in seconds) a request to the server can take. This can be
  310. overridden by a larger statement-level timeout setting. The value 0 means no
  311. timeout.
  312. `Follow` (default: `yes`)::
  313. A boolean value (`yes`|`no` / `true`|`false` / `0`|`1`) controlling if the
  314. driver will follow HTTP redirects.
  315. `Packing` (default: `CBOR`)::
  316. This value controls which data format to encode the REST content in. Possible
  317. values are:
  318. * `CBOR`: use the Concise Binary Object Representation format. This is the
  319. preferred encoding, given its more compact format.
  320. * `JSON`: use the JavaScript Object Notation format. This format is more
  321. verbose, but easier to read, useful in debugging cases.
  322. `Compression` (default: `auto`)::
  323. This value controls if and when the REST content - encoded in one of the above
  324. formats - is going to be compressed. The possible values are:
  325. * `on`: enables the compression;
  326. * `off`: disables the compression;
  327. * `auto`: enables the compression, except for the case when the data flows
  328. through a secure connection; since in this case the encryption layer employs
  329. its own data compression and there can be security implications when an
  330. additional compression is enabled, the setting should be kept to this value.
  331. `MaxFetchSize` (default: `0`)::
  332. The maximum number of rows that {es-sql} server should send the driver for one
  333. page. This corresponds to {es-sql}'s request parameter `fetch_size` (see
  334. <<sql-rest-fields>>). The value 0 means server default.
  335. `MaxBodySizeMB` (default: `100`)::
  336. The maximum size (in megabytes) that an answer can grow to, before being
  337. rejected as too large by the driver.
  338. This is concerning the HTTP answer body of one page, not the cumulated data
  339. volume that a query might generate.
  340. `VarcharLimit` (default: `0`)::
  341. The maximum width of the string columns.
  342. If this setting is greater than zero, the driver will advertise all the string
  343. type columns as having a maximum character length equal to this value and will
  344. truncate any longer string to it. The string types are textual fields
  345. (TEXT, KEYWORD etc.) and some specialized fields (IP, the GEOs etc.). Note that
  346. no interpretation of the value is performed before trunctation, which can lead
  347. to invalid values if the limit is set too low.
  348. This is required for those applications that do not support column lengths as
  349. large as {es} fields can be.
  350. `ApplyTZ` (default: `no`)::
  351. A boolean value controlling the timezone of:
  352. * the context in which the query will execute (especially relevant for functions dealing with timestamp components);
  353. * the timestamps received from / sent to the server.
  354. If disabled, the UTC timezone will apply; otherwise, the local machine's set
  355. timezone.
  356. `ScientificFloats` (default: `default`)::
  357. Controls how the floating point numbers will be printed, when these are
  358. converted to string by the driver. Possible values given to this parameter:
  359. * `scientific`: the exponential notation (ex.: 1.23E01);
  360. * `default`: the default notation (ex.: 12.3);
  361. * `auto`: the driver will choose one of the above depending on the value to be
  362. printed.
  363. Note that the number of decimals is dependent on the precision (or ODBC scale)
  364. of the value being printed and varies with the different floating point types
  365. supported by {es-sql}.
  366. This setting is not effective when the application fetches from the driver the
  367. values as numbers and then does the conversion subsequently itself.
  368. `MultiFieldLenient` (default: `true`)::
  369. This boolean parameter controls the behavior of the server in case a
  370. multi-value field is queried. In case this is set and the server encounters
  371. such a field, it will pick a value in the set - without any guarantees of what
  372. that will be, but typically the first in natural ascending order - and return
  373. it as the value for the column. If not set, the server will return an error.
  374. This corresponds to {es-sql}'s request parameter `field_multi_value_leniency`
  375. (see <<sql-rest-fields>>).
  376. `AutoEscapePVA` (default: `true`)::
  377. The pattern-value arguments make use of `_` and `%` as special characters to
  378. build patern matching values. Some applications however use these chars as
  379. regular ones, which can lead to {es-sql} returning more data than the app
  380. intended. With the auto escaping, the driver will inspect the arguments and
  381. will escape these special characters if not already done by the application.
  382. `IndexIncludeFrozen` (default: `false`)::
  383. If this parameter is `true`, the server will include the frozen indices in the
  384. query execution.
  385. This corresponds to {es-sql}'s request parameter `index_include_frozen`
  386. `EarlyExecution` (default: `true`)::
  387. If this parameter is `true`, the driver will execute a statement as soon as the
  388. application submits it for preparation, i.e. early and is functionally
  389. equivalent to a direct execution. This will only happen if the query lacks
  390. parameters. Early execution is useful with those applications that inspect the
  391. result before actually executing the query. {es-sql} lacks a preparation API,
  392. so early execution is required for interoperability with these applications.