Supported platforms
SQL database in Microsoft Fabric is not covered here. It does not accept SQL Server logins, so the username-and-password credential this connection uses cannot reach it.
Prerequisites
- A SQL Server or Azure SQL database reachable from CloudThinker on its SQL port,
1433by default. - Permission to create a login or a database user and grant it read access.
- The tables you want the agent to reach in a normal user schema. Objects in
sysandINFORMATION_SCHEMAare never exposed, whatever the user is granted.
Setup
1
Create a dedicated user
Give CloudThinker its own least-privilege account. Which statement you use depends on the platform.SQL Server and Azure SQL Managed Instance — create a login in Azure SQL Database — create the user directly in your database, with no login in
master, then a user for it in your database:master. Microsoft recommends this form because it keeps the database portable:2
Grant read access to only what the agent should see
Grant on the specific schema that holds the tables you want reachable:Or, tighter, one table at a time:
3
Allow network access
- Azure SQL Database and Managed Instance: add CloudThinker to the server firewall rules.
- SQL Server: allow inbound
1433from CloudThinker, and confirm the server accepts SQL Server authentication rather than Windows authentication only.
4
Add the connection in CloudThinker
Go to Connections → Microsoft SQL Server and fill in the single Connection string field:Click Connect. CloudThinker opens the connection, reads the tables the user can see, and the Connected message reports what it loaded. A failure comes back with the reason SQL Server gave — see Troubleshooting.
Connection details
One field carries everything: an ADO.NET connection string for the user you created above.
The keywords that matter:
Required permissions
Minimum (read only)
Write access (only if you want it)
SELECT cannot write, no matter what anyone approves.
Agent capabilities
Once connected, Tony can:
What the connection cannot do, by design:
- No arbitrary SQL. The agent works through the table operations above, not a query console.
- No stored procedures.
- No schema changes. It cannot create, alter, or drop a table, an index, or a column.
- No joins across tables in a single read. Each read covers one table.
Verify the connection
Example prompts
Write access
There is no connection-wide write switch. Every insert, update, and delete is approved individually, in the conversation, before it runs.
Two things to weigh:
- Updates and deletes are keyed, not filtered. The agent addresses one row by its primary key, so a mistyped filter cannot sweep a table. A table without a primary key cannot be updated or deleted through this connection at all.
- Approval is per call, not per session. Approving one delete does not approve the next.
INSERT, UPDATE, or DELETE. That is stronger than declining each prompt.
Troubleshooting
Login failed for user
Login failed for user
SQL Server answered and rejected the credentials.
- Confirm the user exists in the right place: a login lives in
master, a user created withWITH PASSWORDlives in your database. - Confirm the server accepts SQL Server authentication. A server set to Windows authentication only refuses every username-and-password login.
- Retype the password rather than pasting it. A pasted value carrying a stray space or line break fails here.
The connection fails on a certificate error
The connection fails on a certificate error
The server did not present a certificate the client could verify, and the client refused to continue unencrypted.
- Install a certificate the client trusts. This is the right fix.
- For a self-signed or internal-CA certificate on a private network, add
TrustServerCertificate=Trueto the connection string. Traffic is still encrypted, but the server’s identity is no longer checked.
The server is unreachable, or the connection times out
The server is unreachable, or the connection times out
Nothing answered at that host and port.
- Check that
Servercarries the host and port in SQL Server’s own form,host,1433, with a comma rather than a colon. - Azure SQL: add CloudThinker to the server firewall rules.
- SQL Server: confirm the firewall allows inbound
1433and that the server is listening on TCP/IP, which is off by default on some installations.
The agent cannot find a table it should see
The agent cannot find a table it should see
- The user needs
SELECTon that table or its schema. A table the user cannot read does not appear at all. - Tables in
sysandINFORMATION_SCHEMAare excluded and cannot be exposed. - Name the table with its schema, for example
dbo.orders. The agent sees the schema and the table name together, so an unqualified name can be ambiguous when two schemas hold the same table name.
An update or delete is refused, and the table has no primary key
An update or delete is refused, and the table has no primary key
Updates and deletes address exactly one row by its primary key. Without one, the operation has no way to identify a row and is refused. Reading and aggregating the table still work. Add a primary key if you want the agent to change it.
A column never appears in results
A column never appears in results
Some SQL Server data types are not carried over this connection:
geography, geometry, hierarchyid, json, rowversion, sql_variant, vector, and xml. Tables holding them still work; those particular columns are not returned. Add a plain-text column holding the value you want visible if the agent needs to read it.The agent will not run the SQL I gave it
The agent will not run the SQL I gave it
Expected. This connection has no SQL console and no stored-procedure access. Ask for the result you want — a filtered read, a grouped count — rather than for a statement to execute.
Security
- Least privilege — grant only the permissions the agents need for your use case; start read-only and widen later.
- Read-only by default — use read-only credentials unless you want agents to make changes through this connection.
- Rotate credentials — rotate keys and tokens on your normal schedule; CloudThinker picks up the new value when you update the connection.
- Revoke on offboarding — remove the credential at the provider when you delete a connection or a teammate leaves.
- Dedicated user — never reuse an application or admin account. A separate user keeps the audit trail readable and the blast radius small.
- Grant the schema, not the database — scope
SELECTto the schema holding the tables the agent should reach. Everything else stays invisible. - Read-only by omission — withhold
INSERT,UPDATE, andDELETEand the connection is permanently read-only, regardless of what is approved in a conversation. - Keep encryption on — leave
Encrypt=Trueand reach forTrustServerCertificate=Trueonly when you own the certificate and the network.
Related
Tony Agent
Database-focused optimization agent
PostgreSQL Connection
Similar setup for PostgreSQL databases