Skip to content

feat(bigtable): Support parameterized views with secure parameter inj… - #6128

Closed
ad548 wants to merge 5 commits into
google:mainfrom
ad548:feat/bigtable-parameterized-views
Closed

ad548 wants to merge 5 commits into
google:mainfrom
ad548:feat/bigtable-parameterized-views

Conversation

@ad548

@ad548 ad548 commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

…ection

Expose a parameterized query tool execute_sql_parameterized that automatically maps and injects secure parameters (like user_id) from the tool context to Bigtable's view_parameters.

Please ensure you have read the contribution guide before creating a pull request.

Link to Issue or Description of Change

1. Link to an existing issue (if applicable):

  • Closes: #issue_number
  • Related: #issue_number

2. Or, if no issue exists, describe the change:

If applicable, please follow the issue templates to provide as much detail as
possible.

Problem:
A clear and concise description of what the problem is.

Solution:
A clear and concise description of what you want to happen and why you choose
this solution.

Testing Plan

Please describe the tests that you ran to verify your changes. This is required
for all PRs that are not small documentation or typo fixes.

Unit Tests:

  • I have added or updated unit tests for my change.
  • All unit tests pass locally.

Please include a summary of passed pytest results.

Manual End-to-End (E2E) Tests:

Please provide instructions on how to manually test your changes, including any
necessary setup or configuration. Please provide logs or screenshots to help
reviewers better understand the fix.

Checklist

  • I have read the CONTRIBUTING.md document.
  • I have performed a self-review of my own code.
  • I have commented my code, particularly in hard-to-understand areas.
  • I have added tests that prove my fix is effective or that my feature works.
  • New and existing unit tests pass locally with my changes.
  • I have manually tested my changes end-to-end.
  • Any dependent changes have been merged and published in downstream modules.

Additional context

Add any other context or screenshots about the feature request here.

ad548 added 2 commits June 15, 2026 13:24
…ection

Expose a parameterized query tool execute_sql_parameterized that automatically maps and injects secure parameters (like user_id) from the tool context to Bigtable's view_parameters.
If the configured view_parameter_name is not a top-level property on the ToolContext (like user_id), check tool_context.state to support arbitrary application-specific session parameters (e.g. tenant_id).
@rohityan rohityan self-assigned this Jun 15, 2026
@wyf7107 wyf7107 self-assigned this Jun 16, 2026
@rohityan rohityan added the tools [Component] This issue is related to tools label Jun 17, 2026
@rohityan rohityan removed their assignment Jun 17, 2026
@rohityan rohityan added the request clarification [Status] The maintainer need clarification or more information from the author label Jun 17, 2026
@rohityan

rohityan commented Jun 17, 2026 •

Copy link
Copy Markdown
Collaborator

Hi @ad548 , Thank you for your contribution! We appreciate you taking the time to submit this pull request. Please add a detailed description of the feature and also fix the failing unit tests.

@GWeale GWeale added the import label Jun 18, 2026
copybara-service Bot pushed a commit that referenced this pull request Jul 1, 2026
Merge #6128

…ection

Expose a parameterized query tool execute_sql_parameterized that automatically maps and injects secure parameters (like user_id) from the tool context to Bigtable's view_parameters.

**Please ensure you have read the [contribution guide](https://github.com/google/adk-python/blob/main/CONTRIBUTING.md) before creating a pull request.**

### Link to Issue or Description of Change

**1. Link to an existing issue (if applicable):**

- Closes: #_issue_number_
- Related: #_issue_number_

**2. Or, if no issue exists, describe the change:**

_If applicable, please follow the issue templates to provide as much detail as
possible._

**Problem:**
_A clear and concise description of what the problem is._

**Solution:**
_A clear and concise description of what you want to happen and why you choose
this solution._

### Testing Plan

_Please describe the tests that you ran to verify your changes. This is required
for all PRs that are not small documentation or typo fixes._

**Unit Tests:**

- [ ] I have added or updated unit tests for my change.
- [ ] All unit tests pass locally.

_Please include a summary of passed `pytest` results._

**Manual End-to-End (E2E) Tests:**

_Please provide instructions on how to manually test your changes, including any
necessary setup or configuration. Please provide logs or screenshots to help
reviewers better understand the fix._

### Checklist

- [ ] I have read the [CONTRIBUTING.md](https://github.com/google/adk-python/blob/main/CONTRIBUTING.md) document.
- [ ] I have performed a self-review of my own code.
- [ ] I have commented my code, particularly in hard-to-understand areas.
- [ ] I have added tests that prove my fix is effective or that my feature works.
- [ ] New and existing unit tests pass locally with my changes.
- [ ] I have manually tested my changes end-to-end.
- [ ] Any dependent changes have been merged and published in downstream modules.

### Additional context

_Add any other context or screenshots about the feature request here._

COPYBARA_INTEGRATE_REVIEW=#6128 from ad548:feat/bigtable-parameterized-views f5902fd
PiperOrigin-RevId: 941207338
@adk-bot

adk-bot commented Jul 1, 2026

Copy link
Copy Markdown
Collaborator

Thank you @ad548 for your contribution! 🎉

Your changes have been successfully imported and merged via Copybara in commit 14a24f2.

Closing this PR as the changes are now in the main branch.

@adk-bot adk-bot added the merged [Status] This PR is merged label Jul 1, 2026
@adk-bot adk-bot closed this Jul 1, 2026
FrigaZzz pushed a commit to FrigaZzz/adk-python that referenced this pull request Aug 11, 2026
Merge google#6128

…ection

Expose a parameterized query tool execute_sql_parameterized that automatically maps and injects secure parameters (like user_id) from the tool context to Bigtable's view_parameters.

**Please ensure you have read the [contribution guide](https://github.com/google/adk-python/blob/main/CONTRIBUTING.md) before creating a pull request.**

### Link to Issue or Description of Change

**1. Link to an existing issue (if applicable):**

- Closes: #_issue_number_
- Related: #_issue_number_

**2. Or, if no issue exists, describe the change:**

_If applicable, please follow the issue templates to provide as much detail as
possible._

**Problem:**
_A clear and concise description of what the problem is._

**Solution:**
_A clear and concise description of what you want to happen and why you choose
this solution._

### Testing Plan

_Please describe the tests that you ran to verify your changes. This is required
for all PRs that are not small documentation or typo fixes._

**Unit Tests:**

- [ ] I have added or updated unit tests for my change.
- [ ] All unit tests pass locally.

_Please include a summary of passed `pytest` results._

**Manual End-to-End (E2E) Tests:**

_Please provide instructions on how to manually test your changes, including any
necessary setup or configuration. Please provide logs or screenshots to help
reviewers better understand the fix._

### Checklist

- [ ] I have read the [CONTRIBUTING.md](https://github.com/google/adk-python/blob/main/CONTRIBUTING.md) document.
- [ ] I have performed a self-review of my own code.
- [ ] I have commented my code, particularly in hard-to-understand areas.
- [ ] I have added tests that prove my fix is effective or that my feature works.
- [ ] New and existing unit tests pass locally with my changes.
- [ ] I have manually tested my changes end-to-end.
- [ ] Any dependent changes have been merged and published in downstream modules.

### Additional context

_Add any other context or screenshots about the feature request here._

COPYBARA_INTEGRATE_REVIEW=google#6128 from ad548:feat/bigtable-parameterized-views f5902fd
PiperOrigin-RevId: 941207338
prasanna8585 added a commit to prasanna8585/adk-python that referenced this pull request Sep 23, 2026
BigtableParameterizedViewTool wraps Bigtable's execute_sql to
automatically inject values (like user_id) into a parameterized view's
VIEW_PARAMETERS(), so the view itself can restrict which rows a query
is allowed to see. The class's own docstring states this "securely
restricts query execution to the logged-in user's data" -- but the
resolution logic had an undocumented fallback: when a configured
view_parameter_name did not match a strongly-typed attribute of
tool_context (which user_id always does, via ReadonlyContext), it fell
back to tool_context.state[param_name].

tool_context.state is writable by the caller -- the same fact this
same PR's sibling fix (BigQuery/AgentEngineSandboxComputer, in
query_tool.py and sandbox_computer.py) already established for a
different pair of tools in this same file tree. A view parameter taken
from state lets the caller choose which user's (or tenant's) rows a
"securely restricted" parameterized view returns, defeating the row-
level restriction the feature exists to provide. This is realistic for
any application-defined scoping parameter beyond the documented
user_id example -- tenant_id, org_id, customer_id, or any other custom
name a multi-tenant deployment configures via view_parameter_names,
none of which are built-in ToolContext/ReadonlyContext attributes.

Verified this was never previously addressed: the feature was
introduced in 14a24f2 (PR google#6128, "Support parameterized views with
secure parameter injection") and has had no subsequent fix; the only
later commit touching this file is an unrelated mypy-typing refactor.

Fix: remove the tool_context.state fallback entirely. Only names that
resolve to a real tool_context attribute are honored now; anything
else is silently omitted from view_parameters, exactly as an already-
missing attribute was previously handled.

Verified: existing test suite (14 tests) run and pass, including the
two pre-existing tests that only exercise the safe, strongly-typed
path (user_id), which are unaffected. The test that asserted the
vulnerable fallback behavior
(test_bigtable_parameterized_view_tool_execution_session_state_fallback)
is replaced with
test_bigtable_parameterized_view_tool_ignores_state_for_custom_parameters,
asserting the opposite: a caller-controlled tenant_id sitting in
session state is not used. Confirmed this new test actually catches
the bug by temporarily reverting the fix locally and re-running it --
it fails against the vulnerable code and passes against the fix.
test_bigtable_parameterized_view_tool_execution_multiple_parameters is
updated to match: tenant_id/agent_id (state-only) are now correctly
omitted from the result, while user_id (a real attribute) still
resolves.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

import merged [Status] This PR is merged request clarification [Status] The maintainer need clarification or more information from the author tools [Component] This issue is related to tools

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants