-
Notifications
You must be signed in to change notification settings - Fork 1.1k
feat(sources/mssql): add support for encrypt connection parameter #874
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(sources/mssql): add support for encrypt connection parameter #874
Conversation
Allows configuring the `encrypt` option for MSSQL connections. This change enables users to specify the encryption level when connecting to a MSSQL database, offering more control over security settings. The allowed values can reference the README of the github.com/microsoft/go-mssqldb package.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ShanQincheng Thanks for submitting this PR! :) Added some feedback. Please re-request reviews once the updates are made.
Comments out the `encrypt: strict` option in the MSSQL source configuration README since it's an optional field
…encrypt field Removes the redundant `TestParseEncryptField` since the functionality is covered by the `TestParseFromYamlMssql()` test.
since the functionality is already covered by the `TestMissingEncryptField()` test.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you @ShanQincheng !
|
/gcbrun |
|
/gcbrun |
…eter (#874) ## 1. Why do we need to support the `encrypt` parameter? MSSQL databases that `genai-toolbox` attempts to connect to may have their encryption levels set differently. For example, a testing/demo purpose MSSQL database may not require encryption at all. However, `genai-toolbox` currently uses the default encryption parameter (`encrypt=false`) to connect to this type of database and will throw an error: ``` ERROR "toolbox failed to initialize: unable to initialize configs: unable to initialize source "my-mssql-source": unable to connect successfully: TLS Handshake failed: cannot read handshake packet: EOF" ``` > In this case, the encryption parameter should be set to `encrypt=disable`. ## 2. Is this a necessary feature? `genai-toolbox` uses the `github.com/microsoft/go-mssqldb` package as a dependency to connect to MSSQL databases. According to the [README](https://github.com/microsoft/go-mssqldb?tab=readme-ov-file#common-parameters) of the `github.com/microsoft/go-mssqldb` package, `encrypt` is one of the common parameters. Therefore, I believe supporting the `encrypt` parameter in `genai-toolbox` is necessary. ## 3. How to replicate the error mentioned above? ### 3.1 Use this `docker-compose.yaml` file to start a demo MSSQL instance ``` services: demo-mssql-database: image: mcr.microsoft.com/mssql/server:2017-CU1-ubuntu ports: - "20256:1433" environment: ACCEPT_EULA: "Y" MSSQL_SA_PASSWORD: "hellopassword!" restart: unless-stopped healthcheck: test: ["CMD", "/opt/mssql-tools/bin/sqlcmd", "-S", "localhost", "-U", "sa", "-P", "hellopassword!", "-Q", "SELECT 1"] interval: 5s retries: 10 demo-mssql-database-init: image: mcr.microsoft.com/mssql/server:2017-CU1-ubuntu network_mode: service:demo-mssql-database command: > /bin/bash -c "/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P hellopassword! -d master -Q 'CREATE DATABASE DemoDatabase;'" depends_on: demo-mssql-database: condition: service_healthy ``` ### 3.2 Use `genai-toolbox` to connect to the above demo MSSQL database with this `tools.yaml` configuration file: ``` sources: my-mssql-source: kind: mssql host: localhost port: 20256 database: master user: sa password: 'hellopassword!' ``` ### 3.3 We shall see the error: ``` ERROR "toolbox failed to initialize: unable to initialize configs: unable to initialize source "my-mssql-source": unable to connect successfully: TLS Handshake failed: cannot read handshake packet: EOF" ``` --------- Co-authored-by: Yuan Teoh <45984206+Yuan325@users.noreply.github.com> 14a868f
…eter (googleapis#874) ## 1. Why do we need to support the `encrypt` parameter? MSSQL databases that `genai-toolbox` attempts to connect to may have their encryption levels set differently. For example, a testing/demo purpose MSSQL database may not require encryption at all. However, `genai-toolbox` currently uses the default encryption parameter (`encrypt=false`) to connect to this type of database and will throw an error: ``` ERROR "toolbox failed to initialize: unable to initialize configs: unable to initialize source "my-mssql-source": unable to connect successfully: TLS Handshake failed: cannot read handshake packet: EOF" ``` > In this case, the encryption parameter should be set to `encrypt=disable`. ## 2. Is this a necessary feature? `genai-toolbox` uses the `github.com/microsoft/go-mssqldb` package as a dependency to connect to MSSQL databases. According to the [README](https://github.com/microsoft/go-mssqldb?tab=readme-ov-file#common-parameters) of the `github.com/microsoft/go-mssqldb` package, `encrypt` is one of the common parameters. Therefore, I believe supporting the `encrypt` parameter in `genai-toolbox` is necessary. ## 3. How to replicate the error mentioned above? ### 3.1 Use this `docker-compose.yaml` file to start a demo MSSQL instance ``` services: demo-mssql-database: image: mcr.microsoft.com/mssql/server:2017-CU1-ubuntu ports: - "20256:1433" environment: ACCEPT_EULA: "Y" MSSQL_SA_PASSWORD: "hellopassword!" restart: unless-stopped healthcheck: test: ["CMD", "/opt/mssql-tools/bin/sqlcmd", "-S", "localhost", "-U", "sa", "-P", "hellopassword!", "-Q", "SELECT 1"] interval: 5s retries: 10 demo-mssql-database-init: image: mcr.microsoft.com/mssql/server:2017-CU1-ubuntu network_mode: service:demo-mssql-database command: > /bin/bash -c "/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P hellopassword! -d master -Q 'CREATE DATABASE DemoDatabase;'" depends_on: demo-mssql-database: condition: service_healthy ``` ### 3.2 Use `genai-toolbox` to connect to the above demo MSSQL database with this `tools.yaml` configuration file: ``` sources: my-mssql-source: kind: mssql host: localhost port: 20256 database: master user: sa password: 'hellopassword!' ``` ### 3.3 We shall see the error: ``` ERROR "toolbox failed to initialize: unable to initialize configs: unable to initialize source "my-mssql-source": unable to connect successfully: TLS Handshake failed: cannot read handshake packet: EOF" ``` --------- Co-authored-by: Yuan Teoh <45984206+Yuan325@users.noreply.github.com> 14a868f
🤖 I have created a release *beep* *boop* --- ## [0.10.0](v0.9.0...v0.10.0) (2025-07-25) ### Features * Add `Map` parameters support ([#928](#928)) ([4468bc9](4468bc9)) * Add Dataplex source and tool ([#847](#847)) ([30c16a5](30c16a5)) * Add Looker source and tool ([#923](#923)) ([c67e01b](c67e01b)) * Add support for null optional parameter ([#802](#802)) ([a817b12](a817b12)), closes [#736](#736) * **prebuilt/alloydb-admin-config:** Add alloydb control plane as a prebuilt config ([#937](#937)) ([0b28b72](0b28b72)) * **prebuilt/mysql,prebuilt/mssql:** Add generic mysql and mssql prebuilt tools ([#983](#983)) ([c600c30](c600c30)) * **server/mcp:** Support MCP version 2025-06-18 ([#898](#898)) ([313d3ca](313d3ca)) * **sources/mssql:** Add support for encrypt connection parameter ([#874](#874)) ([14a868f](14a868f)) * **sources/firestore:** Add Firestore as Source ([#786](#786)) ([2bb790e](2bb790e)) * **sources/mongodb:** Add MongoDB Source ([#969](#969)) ([74dbd61](74dbd61)) * **tools/alloydb-wait-for-operation:** Add wait for operation tool with exponential backoff ([#920](#920)) ([3f6ec29](3f6ec29)) * **tools/mongodb-aggregate:** Add MongoDB `aggregate` Tools ([#977](#977)) ([bd399bb](bd399bb)) * **tools/mongodb-delete:** Add MongoDB `delete` Tools ([#974](#974)) ([78e9752](78e9752)) * **tools/mongodb-find:** Add MongoDB `find` Tools ([#970](#970)) ([a747475](a747475)) * **tools/mongodb-insert:** Add MongoDB `insert` Tools ([#975](#975)) ([4c63f0c](4c63f0c)) * **tools/mongodb-update:** Add MongoDB `update` Tools ([#972](#972)) ([dfde52c](dfde52c)) * **tools/neo4j-execute-cypher:** Add neo4j-execute-cypher for Neo4j sources ([#946](#946)) ([81d0505](81d0505)) * **tools/neo4j-schema:** Add neo4j-schema tool ([#978](#978)) ([be7db3d](be7db3d)) * **tools/wait:** Create wait for tool ([#885](#885)) ([ed5ef4c](ed5ef4c)) ### Bug Fixes * Fix document preview pipeline for forked PRs ([#950](#950)) ([481cc60](481cc60)) * **prebuilt/firestore:** Mark database field as required in the firestore prebuilt tools ([#959](#959)) ([15417d4](15417d4)) * **prebuilt/cloud-sql-mssql:** Correct source reference for execute_sql tool in cloud-sql-mssql.yaml prebuilt config ([#938](#938)) ([d16728e](d16728e)) * **prebuilt/cloud-sql-mysql:** Update list_table tool ([#924](#924)) ([2083ba5](2083ba5)) * Replace 'float' with 'number' in McpManifest ([#985](#985)) ([59e23e1](59e23e1)) * **server/api:** Add logger to context in tool invoke handler ([#891](#891)) ([8ce311f](8ce311f)) * **sources/looker:** Add agent tag to Looker API calls. ([#966](#966)) ([f55dd6f](f55dd6f)) * **tools/bigquery-execute-sql:** Ensure invoke always returns a non-null value ([#925](#925)) ([9a55b80](9a55b80)) * **tools/mysqlsql:** Unmarshal json data from database during invoke ([#979](#979)) ([ccc3498](ccc3498)), closes [#840](#840) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --------- Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> Co-authored-by: Yuan Teoh <45984206+Yuan325@users.noreply.github.com>
🤖 I have created a release *beep* *boop* --- ## [0.10.0](v0.9.0...v0.10.0) (2025-07-25) ### Features * Add `Map` parameters support ([#928](#928)) ([4468bc9](4468bc9)) * Add Dataplex source and tool ([#847](#847)) ([30c16a5](30c16a5)) * Add Looker source and tool ([#923](#923)) ([c67e01b](c67e01b)) * Add support for null optional parameter ([#802](#802)) ([a817b12](a817b12)), closes [#736](#736) * **prebuilt/alloydb-admin-config:** Add alloydb control plane as a prebuilt config ([#937](#937)) ([0b28b72](0b28b72)) * **prebuilt/mysql,prebuilt/mssql:** Add generic mysql and mssql prebuilt tools ([#983](#983)) ([c600c30](c600c30)) * **server/mcp:** Support MCP version 2025-06-18 ([#898](#898)) ([313d3ca](313d3ca)) * **sources/mssql:** Add support for encrypt connection parameter ([#874](#874)) ([14a868f](14a868f)) * **sources/firestore:** Add Firestore as Source ([#786](#786)) ([2bb790e](2bb790e)) * **sources/mongodb:** Add MongoDB Source ([#969](#969)) ([74dbd61](74dbd61)) * **tools/alloydb-wait-for-operation:** Add wait for operation tool with exponential backoff ([#920](#920)) ([3f6ec29](3f6ec29)) * **tools/mongodb-aggregate:** Add MongoDB `aggregate` Tools ([#977](#977)) ([bd399bb](bd399bb)) * **tools/mongodb-delete:** Add MongoDB `delete` Tools ([#974](#974)) ([78e9752](78e9752)) * **tools/mongodb-find:** Add MongoDB `find` Tools ([#970](#970)) ([a747475](a747475)) * **tools/mongodb-insert:** Add MongoDB `insert` Tools ([#975](#975)) ([4c63f0c](4c63f0c)) * **tools/mongodb-update:** Add MongoDB `update` Tools ([#972](#972)) ([dfde52c](dfde52c)) * **tools/neo4j-execute-cypher:** Add neo4j-execute-cypher for Neo4j sources ([#946](#946)) ([81d0505](81d0505)) * **tools/neo4j-schema:** Add neo4j-schema tool ([#978](#978)) ([be7db3d](be7db3d)) * **tools/wait:** Create wait for tool ([#885](#885)) ([ed5ef4c](ed5ef4c)) ### Bug Fixes * Fix document preview pipeline for forked PRs ([#950](#950)) ([481cc60](481cc60)) * **prebuilt/firestore:** Mark database field as required in the firestore prebuilt tools ([#959](#959)) ([15417d4](15417d4)) * **prebuilt/cloud-sql-mssql:** Correct source reference for execute_sql tool in cloud-sql-mssql.yaml prebuilt config ([#938](#938)) ([d16728e](d16728e)) * **prebuilt/cloud-sql-mysql:** Update list_table tool ([#924](#924)) ([2083ba5](2083ba5)) * Replace 'float' with 'number' in McpManifest ([#985](#985)) ([59e23e1](59e23e1)) * **server/api:** Add logger to context in tool invoke handler ([#891](#891)) ([8ce311f](8ce311f)) * **sources/looker:** Add agent tag to Looker API calls. ([#966](#966)) ([f55dd6f](f55dd6f)) * **tools/bigquery-execute-sql:** Ensure invoke always returns a non-null value ([#925](#925)) ([9a55b80](9a55b80)) * **tools/mysqlsql:** Unmarshal json data from database during invoke ([#979](#979)) ([ccc3498](ccc3498)), closes [#840](#840) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --------- Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> Co-authored-by: Yuan Teoh <45984206+Yuan325@users.noreply.github.com> c45390e
🤖 I have created a release *beep* *boop* --- ## [0.10.0](googleapis/genai-toolbox@v0.9.0...v0.10.0) (2025-07-25) ### Features * Add `Map` parameters support ([googleapis#928](googleapis#928)) ([4468bc9](googleapis@4468bc9)) * Add Dataplex source and tool ([googleapis#847](googleapis#847)) ([30c16a5](googleapis@30c16a5)) * Add Looker source and tool ([googleapis#923](googleapis#923)) ([c67e01b](googleapis@c67e01b)) * Add support for null optional parameter ([googleapis#802](googleapis#802)) ([a817b12](googleapis@a817b12)), closes [googleapis#736](googleapis#736) * **prebuilt/alloydb-admin-config:** Add alloydb control plane as a prebuilt config ([googleapis#937](googleapis#937)) ([0b28b72](googleapis@0b28b72)) * **prebuilt/mysql,prebuilt/mssql:** Add generic mysql and mssql prebuilt tools ([googleapis#983](googleapis#983)) ([c600c30](googleapis@c600c30)) * **server/mcp:** Support MCP version 2025-06-18 ([googleapis#898](googleapis#898)) ([313d3ca](googleapis@313d3ca)) * **sources/mssql:** Add support for encrypt connection parameter ([googleapis#874](googleapis#874)) ([14a868f](googleapis@14a868f)) * **sources/firestore:** Add Firestore as Source ([googleapis#786](googleapis#786)) ([2bb790e](googleapis@2bb790e)) * **sources/mongodb:** Add MongoDB Source ([googleapis#969](googleapis#969)) ([74dbd61](googleapis@74dbd61)) * **tools/alloydb-wait-for-operation:** Add wait for operation tool with exponential backoff ([googleapis#920](googleapis#920)) ([3f6ec29](googleapis@3f6ec29)) * **tools/mongodb-aggregate:** Add MongoDB `aggregate` Tools ([googleapis#977](googleapis#977)) ([bd399bb](googleapis@bd399bb)) * **tools/mongodb-delete:** Add MongoDB `delete` Tools ([googleapis#974](googleapis#974)) ([78e9752](googleapis@78e9752)) * **tools/mongodb-find:** Add MongoDB `find` Tools ([googleapis#970](googleapis#970)) ([a747475](googleapis@a747475)) * **tools/mongodb-insert:** Add MongoDB `insert` Tools ([googleapis#975](googleapis#975)) ([4c63f0c](googleapis@4c63f0c)) * **tools/mongodb-update:** Add MongoDB `update` Tools ([googleapis#972](googleapis#972)) ([dfde52c](googleapis@dfde52c)) * **tools/neo4j-execute-cypher:** Add neo4j-execute-cypher for Neo4j sources ([googleapis#946](googleapis#946)) ([81d0505](googleapis@81d0505)) * **tools/neo4j-schema:** Add neo4j-schema tool ([googleapis#978](googleapis#978)) ([be7db3d](googleapis@be7db3d)) * **tools/wait:** Create wait for tool ([googleapis#885](googleapis#885)) ([ed5ef4c](googleapis@ed5ef4c)) ### Bug Fixes * Fix document preview pipeline for forked PRs ([googleapis#950](googleapis#950)) ([481cc60](googleapis@481cc60)) * **prebuilt/firestore:** Mark database field as required in the firestore prebuilt tools ([googleapis#959](googleapis#959)) ([15417d4](googleapis@15417d4)) * **prebuilt/cloud-sql-mssql:** Correct source reference for execute_sql tool in cloud-sql-mssql.yaml prebuilt config ([googleapis#938](googleapis#938)) ([d16728e](googleapis@d16728e)) * **prebuilt/cloud-sql-mysql:** Update list_table tool ([googleapis#924](googleapis#924)) ([2083ba5](googleapis@2083ba5)) * Replace 'float' with 'number' in McpManifest ([googleapis#985](googleapis#985)) ([59e23e1](googleapis@59e23e1)) * **server/api:** Add logger to context in tool invoke handler ([googleapis#891](googleapis#891)) ([8ce311f](googleapis@8ce311f)) * **sources/looker:** Add agent tag to Looker API calls. ([googleapis#966](googleapis#966)) ([f55dd6f](googleapis@f55dd6f)) * **tools/bigquery-execute-sql:** Ensure invoke always returns a non-null value ([googleapis#925](googleapis#925)) ([9a55b80](googleapis@9a55b80)) * **tools/mysqlsql:** Unmarshal json data from database during invoke ([googleapis#979](googleapis#979)) ([ccc3498](googleapis@ccc3498)), closes [googleapis#840](googleapis#840) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --------- Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com> Co-authored-by: Yuan Teoh <45984206+Yuan325@users.noreply.github.com> c45390e
1. Why do we need to support the
encryptparameter?MSSQL databases that
genai-toolboxattempts to connect to may have their encryption levels set differently. For example, a testing/demo purpose MSSQL database may not require encryption at all. However,genai-toolboxcurrently uses the default encryption parameter (encrypt=false) to connect to this type of database and will throw an error:2. Is this a necessary feature?
genai-toolboxuses thegithub.com/microsoft/go-mssqldbpackage as a dependency to connect to MSSQL databases. According to the README of thegithub.com/microsoft/go-mssqldbpackage,encryptis one of the common parameters. Therefore, I believe supporting theencryptparameter ingenai-toolboxis necessary.3. How to replicate the error mentioned above?
3.1 Use this
docker-compose.yamlfile to start a demo MSSQL instance3.2 Use
genai-toolboxto connect to the above demo MSSQL database with thistools.yamlconfiguration file:3.3 We shall see the error: